Index: uspace/drv/usbhid/kbd/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbd/kbddev.c	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/drv/usbhid/kbd/kbddev.c	(revision d59d0bb9f935622eec30fe2dc8beaee5a6abc723)
@@ -313,9 +313,9 @@
 	usb_hid_report_field_t *field = usb_hid_report_get_sibling(
 	    hid_dev->report, NULL, kbd_dev->led_path, 
-	    USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY | USB_HID_PATH_COMPARE_END,
+	    USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
 	    USB_HID_REPORT_TYPE_OUTPUT);
 	
-	while (field != NULL) {
-
+	while (field != NULL) {		
+		
 		if ((field->usage == USB_HID_LED_NUM_LOCK) 
 		    && (kbd_dev->mods & KM_NUM_LOCK)){
@@ -334,6 +334,7 @@
 		
 		field = usb_hid_report_get_sibling(hid_dev->report, field,
-		    kbd_dev->led_path, USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY 
-		    | USB_HID_PATH_COMPARE_END, USB_HID_REPORT_TYPE_OUTPUT);
+		    kbd_dev->led_path,  
+	    	USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
+			USB_HID_REPORT_TYPE_OUTPUT);
 	}
 	
@@ -865,7 +866,6 @@
 	usb_hid_report_path_set_report_id(path, 0);
 	
-	kbd_dev->key_count = usb_hid_report_input_length(
-	    hid_dev->report, path, 
-	    USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY);
+	kbd_dev->key_count = usb_hid_report_size(
+	    hid_dev->report, 0, USB_HID_REPORT_TYPE_INPUT); 
 	usb_hid_report_path_free(path);
 	
@@ -908,7 +908,6 @@
 	    kbd_dev->led_path, USB_HIDUT_PAGE_LED, 0);
 	
-	kbd_dev->led_output_size = usb_hid_report_output_size(hid_dev->report, 
-	    kbd_dev->led_path, 
-	    USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY);
+	kbd_dev->led_output_size = usb_hid_report_size(hid_dev->report, 
+	    0, USB_HID_REPORT_TYPE_OUTPUT);
 	
 	usb_log_debug("Output report size (in items): %zu\n", 
Index: uspace/drv/usbhid/multimedia/multimedia.c
===================================================================
--- uspace/drv/usbhid/multimedia/multimedia.c	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/drv/usbhid/multimedia/multimedia.c	(revision d59d0bb9f935622eec30fe2dc8beaee5a6abc723)
@@ -252,7 +252,7 @@
 	usb_hid_report_path_set_report_id(path, 1);
 	
-	multim_dev->key_count = usb_hid_report_input_length(
-	    hid_dev->report, path, 
-	    USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY);
+	multim_dev->key_count = usb_hid_report_size(
+	    hid_dev->report, 0, USB_HID_REPORT_TYPE_INPUT);
+
 	usb_hid_report_path_free(path);
 	
@@ -347,5 +347,5 @@
 	    USB_HID_REPORT_TYPE_INPUT);
 	
-	unsigned int key;
+//	unsigned int key;
 	
 	/*! @todo Is this iterating OK if done multiple times? 
@@ -353,11 +353,13 @@
 	 */
 	while (field != NULL) {
-		usb_log_debug(NAME " KEY VALUE(%X) USAGE(%X)\n", field->value, 
-		    field->usage);
-		
-		key = usb_multimedia_map_usage(field->usage);
-		const char *key_str = usb_multimedia_usage_to_str(field->usage);
-		usb_log_info("Pressed key: %s\n", key_str);
-		usb_multimedia_push_ev(hid_dev, KEY_PRESS, key);
+		if(field->value != 0) {
+			usb_log_debug(NAME " KEY VALUE(%X) USAGE(%X)\n", field->value, 
+			    field->usage);
+			key = usb_multimedia_map_usage(field->usage);
+			const char *key_str = 
+			    usb_multimedia_usage_to_str(field->usage);
+			usb_log_info("Pressed key: %s\n", key_str);
+			usb_multimedia_push_ev(hid_dev, KEY_PRESS, key);
+		}
 		
 		field = usb_hid_report_get_sibling(
Index: uspace/drv/usbhid/usbhid.c
===================================================================
--- uspace/drv/usbhid/usbhid.c	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/drv/usbhid/usbhid.c	(revision d59d0bb9f935622eec30fe2dc8beaee5a6abc723)
@@ -203,8 +203,17 @@
 	
 	usb_log_debug("Compare flags: %d\n", mapping->compare);
-	size_t size = usb_hid_report_input_length(hid_dev->report, usage_path, 
-	    mapping->compare);
+//	size_t size = usb_hid_report_size(hid_dev->report, 0, 
+//	    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,
+					field, usage_path, mapping->compare, 
+		            USB_HID_REPORT_TYPE_INPUT);
+	}
+	
 	usb_log_debug("Size of the input report: %zuB\n", size);
-	
 	usb_hid_report_path_free(usage_path);
 	
