Index: uspace/drv/usbhid/kbd/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbd/kbddev.c	(revision 7b6f116c38d4e2688964774a9a6da33e22ee1414)
+++ uspace/drv/usbhid/kbd/kbddev.c	(revision 3a6e42399dfbcf3e44c24222f1ba2e4ae27e7dea)
@@ -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/lgtch-ultrax/lgtch-ultrax.c
===================================================================
--- uspace/drv/usbhid/lgtch-ultrax/lgtch-ultrax.c	(revision 7b6f116c38d4e2688964774a9a6da33e22ee1414)
+++ uspace/drv/usbhid/lgtch-ultrax/lgtch-ultrax.c	(revision 3a6e42399dfbcf3e44c24222f1ba2e4ae27e7dea)
@@ -300,7 +300,6 @@
 	usb_hid_report_path_set_report_id(path, 1);
 	
-	lgtch_dev->key_count = usb_hid_report_input_length(
-	    hid_dev->report, path, 
-	    USB_HID_PATH_COMPARE_END | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY);
+	lgtch_dev->key_count = usb_hid_report_size(
+	    hid_dev->report, 0, USB_HID_REPORT_TYPE_INPUT);
 	usb_hid_report_path_free(path);
 	
@@ -400,5 +399,5 @@
 	    USB_HID_REPORT_TYPE_INPUT);
 	
-	unsigned int key;
+//	unsigned int key;
 	
 	/*! @todo Is this iterating OK if done multiple times? 
@@ -406,9 +405,11 @@
 	 */
 	while (field != NULL) {
-		usb_log_debug(NAME " KEY VALUE(%X) USAGE(%X)\n", field->value, 
-		    field->usage);
+		if(field->value != 0) {
+			usb_log_debug(NAME " KEY VALUE(%X) USAGE(%X)\n", field->value, 
+			    field->usage);
 		
-		key = usb_lgtch_map_usage(field->usage);
-		usb_lgtch_push_ev(hid_dev, KEY_PRESS, key);
+			//key = usb_lgtch_map_usage(field->usage);
+			usb_lgtch_push_ev(hid_dev, KEY_PRESS, field->usage);
+		}
 		
 		field = usb_hid_report_get_sibling(
Index: uspace/drv/usbhid/subdrivers.c
===================================================================
--- uspace/drv/usbhid/subdrivers.c	(revision 7b6f116c38d4e2688964774a9a6da33e22ee1414)
+++ uspace/drv/usbhid/subdrivers.c	(revision 3a6e42399dfbcf3e44c24222f1ba2e4ae27e7dea)
@@ -42,10 +42,10 @@
 
 static usb_hid_subdriver_usage_t path_kbd[] = {
-	{USB_HIDUT_PAGE_KEYBOARD, 0}, 
+	{USB_HIDUT_PAGE_GENERIC_DESKTOP, USB_HIDUT_USAGE_GENERIC_DESKTOP_KEYBOARD}, 
 	{0, 0}
 };
 
 static usb_hid_subdriver_usage_t path_mouse2[] = {
-	{USB_HIDUT_PAGE_GENERIC_DESKTOP, USB_HIDUT_USAGE_GENERIC_DESKTOP_X},
+	{USB_HIDUT_PAGE_GENERIC_DESKTOP, USB_HIDUT_USAGE_GENERIC_DESKTOP_MOUSE}, 
 	{0, 0}
 };
@@ -59,7 +59,6 @@
 	{
 		path_kbd,
-		-1,
-		USB_HID_PATH_COMPARE_END 
-		| USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
+		0,
+		USB_HID_PATH_COMPARE_BEGIN,
 		-1,
 		-1,
@@ -75,6 +74,6 @@
 		lgtch_path,
 		1,
-		USB_HID_PATH_COMPARE_END 
-		| USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
+		USB_HID_PATH_COMPARE_BEGIN
+		| USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,		
 		0x046d,
 		0xc30e,
@@ -88,7 +87,6 @@
 	{
 		path_mouse2,
-		-1,
-		USB_HID_PATH_COMPARE_END 
-		| USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
+		0,
+		USB_HID_PATH_COMPARE_BEGIN,
 		-1,
 		-1,
Index: uspace/drv/usbhid/usbhid.c
===================================================================
--- uspace/drv/usbhid/usbhid.c	(revision 7b6f116c38d4e2688964774a9a6da33e22ee1414)
+++ uspace/drv/usbhid/usbhid.c	(revision 3a6e42399dfbcf3e44c24222f1ba2e4ae27e7dea)
@@ -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);
 	
Index: uspace/drv/usbkbd/kbddev.c
===================================================================
--- uspace/drv/usbkbd/kbddev.c	(revision 7b6f116c38d4e2688964774a9a6da33e22ee1414)
+++ uspace/drv/usbkbd/kbddev.c	(revision 3a6e42399dfbcf3e44c24222f1ba2e4ae27e7dea)
@@ -771,6 +771,6 @@
 	usb_hid_report_path_set_report_id(path, 0);
 	
-	kbd_dev->key_count = usb_hid_report_input_length(
-	    kbd_dev->parser, path, USB_HID_PATH_COMPARE_END);
+	kbd_dev->key_count = usb_hid_report_size(
+	    kbd_dev->parser, 0, USB_HID_REPORT_TYPE_INPUT);
 	usb_hid_report_path_free (path);
 	
@@ -803,7 +803,7 @@
 	usb_hid_report_path_set_report_id(kbd_dev->led_path, 0x00);
 	
-	kbd_dev->led_output_size = usb_hid_report_output_size(kbd_dev->parser, 
-	    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(kbd_dev->parser, 
+	    0, 
+	    USB_HID_REPORT_TYPE_INPUT);
 	
 	usb_log_debug("Output report size (in items): %zu\n", 
