Index: uspace/drv/usbhid/kbd/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbd/kbddev.c	(revision cf2ccd4368b5ded2c44cf0c34588f91253ac78f9)
+++ uspace/drv/usbhid/kbd/kbddev.c	(revision 730466363cef42e6be17822a4aea8c7fbcc1651e)
@@ -694,5 +694,5 @@
 	while (field != NULL) {
 		usb_log_debug2("FIELD (%p) - VALUE(%d) USAGE(%u)\n", 
-		    field, field->value, field->value);
+		    field, field->value, field->usage);
 		
 		assert(i < kbd_dev->key_count);
@@ -709,5 +709,10 @@
 		 *       two parts of the Report somehow.
 		 */
-		kbd_dev->keys[i] = field->value;
+		if( field->value != 0 ) {
+			kbd_dev->keys[i] = field->usage;
+		}
+		else {
+			kbd_dev->keys[i] = 0;
+		}
 		usb_log_debug2("Saved %u. key usage %d\n", i, kbd_dev->keys[i]);
 		
Index: uspace/lib/usb/src/hidparser.c
===================================================================
--- uspace/lib/usb/src/hidparser.c	(revision cf2ccd4368b5ded2c44cf0c34588f91253ac78f9)
+++ uspace/lib/usb/src/hidparser.c	(revision 730466363cef42e6be17822a4aea8c7fbcc1651e)
@@ -175,5 +175,5 @@
 		if(report_item->usages_count > 0 && ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) {
 			uint32_t usage;
-			if(report_item->type != USB_HID_REPORT_TYPE_INPUT) {
+			if(report_item->type == USB_HID_REPORT_TYPE_INPUT) {
 				if(i < report_item->usages_count){
 					usage = report_item->usages[i];
