Index: uspace/drv/usbhid/usbhid.c
===================================================================
--- uspace/drv/usbhid/usbhid.c	(revision b9e3aa3fe40f91fd4973778e5692861a1f04b7f9)
+++ uspace/drv/usbhid/usbhid.c	(revision f3f97332d56ce8693a0ffcb97b4ffefaa24cd316)
@@ -206,8 +206,8 @@
 	}
 	
-	if (mapping->report_id >= 0) {
-		usb_hid_report_path_set_report_id(usage_path, 
-		    mapping->report_id);
-	}
+//	if (mapping->report_id >= 0) {
+//		usb_hid_report_path_set_report_id(usage_path, 
+//		    mapping->report_id);
+//	}
 	
 	assert(hid_dev->report != NULL);
@@ -216,51 +216,69 @@
 //	size_t size = usb_hid_report_size(hid_dev->report, 0, 
 //	    USB_HID_REPORT_TYPE_INPUT);
-	size_t size = 0;
-
-	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)) {
+//	size_t size = 0;
+	
+	bool matches = false;
+
+//	usb_hid_report_description_t *report_des = 
+//		usb_hid_report_find_description(hid_dev->report,
+//		mapping->report_id, USB_HID_REPORT_TYPE_INPUT);
+	uint8_t report_id = mapping->report_id;
+
+	/*while(report_des != NULL)*/do {
+
+//		if((mapping->report_id) == 0 && (report_des->report_id != 0)) {
+//			usb_hid_report_path_set_report_id(usage_path,
+//				report_des->report_id);
+//		}
+					     
+		usb_log_debug("Trying report id %u\n", report_id);
+		
+		if (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 {
+				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);
+		
+		usb_log_debug("Field: %p\n", field);
+
+		if (field != NULL) {
+//			size++;
+//			field = usb_hid_report_get_sibling(hid_dev->report,
+//			    field, usage_path, mapping->compare, 
+//			    USB_HID_REPORT_TYPE_INPUT);
+			matches = true;
 			break;
 		}
-	}
-	
-	usb_log_debug("Size of the input report: %zu\n", size);
+		
+		report_id = usb_hid_get_next_report_id(
+		    hid_dev->report, report_id,
+		    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;
+//		}
+	} while (!matches && report_id != 0);
+	
+//	usb_log_debug("Size of the input report: %zu\n", size);
 	usb_hid_report_path_free(usage_path);
 	
-	return (size > 0);
+	return matches;
 }
 
