Index: uspace/drv/usbhid/kbddev.c
===================================================================
--- uspace/drv/usbhid/kbddev.c	(revision f8e4cb62ab74e6b5a3272ed17535d0e8f98fae57)
+++ uspace/drv/usbhid/kbddev.c	(revision 82d04a486066b8412d873a2564edc4b906ef4295)
@@ -929,4 +929,12 @@
 	memset(kbd_dev, 0, sizeof(usbhid_kbd_t));
 	
+	kbd_dev->parser = (usb_hid_report_parser_t *)(malloc(sizeof(
+	    usb_hid_report_parser_t)));
+	if (kbd_dev->parser == NULL) {
+		usb_log_fatal("No memory!\n");
+		free(kbd_dev);
+		return NULL;
+	}
+	
 	kbd_dev->console_phone = -1;
 	kbd_dev->initialized = USBHID_KBD_STATUS_UNINITIALIZED;
@@ -996,5 +1004,12 @@
 	kbd_dev->usb_dev = dev;
 	
-	/* Get the report descriptor and initialize report parser. */
+	/* Initialize the report parser. */
+	rc = usb_hid_parser_init(kbd_dev->parser);
+	if (rc != EOK) {
+		usb_log_error("Failed to initialize report parser.\n");
+		return rc;
+	}
+	
+	/* Get the report descriptor and parse it. */
 	rc = usbhid_kbd_process_report_descriptor(kbd_dev);
 	if (rc != EOK) {
@@ -1132,4 +1147,9 @@
 	}
 	
+	// destroy the parser
+	if ((*kbd_dev)->parser != NULL) {
+		usb_hid_free_report_parser((*kbd_dev)->parser);
+	}
+	
 	/* TODO: what about the USB device structure?? */
 
