Index: uspace/drv/usbhid/usbhid.c
===================================================================
--- uspace/drv/usbhid/usbhid.c	(revision ee7e7c938e9c9fc3ee28e22c006c58cff0af78e2)
+++ uspace/drv/usbhid/usbhid.c	(revision dcb7d7cd6753bc17b6e14b5b93793cb4b97abc4d)
@@ -207,11 +207,44 @@
 //	    USB_HID_REPORT_TYPE_INPUT);
 	size_t size = 0;
-	usb_hid_report_field_t *field = usb_hid_report_get_sibling (hid_dev->report,
-		NULL, usage_path, mapping->compare, USB_HID_REPORT_TYPE_INPUT);
-	while(field != NULL) {
-		size++;
-		field = usb_hid_report_get_sibling (hid_dev->report,
+
+	usb_hid_report_description_t *report_des = 
+		usb_hid_report_find_description(hid_dev->report,
+		mapping->report_id, USB_HID_REPORT_TYPE_INPUT);
+
+	while(report_des != NULL) {
+
+		if((mapping->report_id) == 0 && (report_des->report_id != 0)) {
+			usb_hid_report_path_set_report_id(usage_path,
+				report_des->report_id);
+		}
+
+		usb_hid_report_field_t *field = usb_hid_report_get_sibling (
+			hid_dev->report,
+			NULL, usage_path, mapping->compare, 
+			USB_HID_REPORT_TYPE_INPUT);
+
+		while(field != NULL) {
+			size++;
+			field = usb_hid_report_get_sibling (hid_dev->report,
 					field, usage_path, mapping->compare, 
 		            USB_HID_REPORT_TYPE_INPUT);
+		}
+
+		if((mapping->report_id == 0) && (report_des->report_id != 0)) {
+			uint8_t report_id = usb_hid_get_next_report_id(
+				hid_dev->report, report_des->report_id,
+			        USB_HID_REPORT_TYPE_INPUT);
+
+			if(report_id == 0) {
+				break;
+			}
+
+	 		report_des = usb_hid_report_find_description(
+				hid_dev->report, report_id, 
+				USB_HID_REPORT_TYPE_INPUT);
+		}
+		else {
+			break;
+		}
 	}
 	
Index: uspace/lib/usbhid/src/hiddescriptor.c
===================================================================
--- uspace/lib/usbhid/src/hiddescriptor.c	(revision ee7e7c938e9c9fc3ee28e22c006c58cff0af78e2)
+++ uspace/lib/usbhid/src/hiddescriptor.c	(revision dcb7d7cd6753bc17b6e14b5b93793cb4b97abc4d)
@@ -336,5 +336,6 @@
 				usb_hid_report_description_t, link);
 
-		if((report_des->report_id == report_id) && 
+		// if report id not set, return the first of the type
+		if(((report_des->report_id == report_id) || (report_id == 0)) && 
 		   (report_des->type == type)) { 
 			return report_des;
Index: uspace/lib/usbhid/src/hidpath.c
===================================================================
--- uspace/lib/usbhid/src/hidpath.c	(revision ee7e7c938e9c9fc3ee28e22c006c58cff0af78e2)
+++ uspace/lib/usbhid/src/hidpath.c	(revision dcb7d7cd6753bc17b6e14b5b93793cb4b97abc4d)
@@ -211,5 +211,7 @@
 
 	if(report_path->report_id != path->report_id) {
-		return 1;
+		if(path->report_id != 0) {
+			return 1;
+		}
 	}
 
