Index: uspace/drv/usbhid/subdrivers.c
===================================================================
--- uspace/drv/usbhid/subdrivers.c	(revision 37f87fa3c6487413c897d909b685591962d2d2cf)
+++ uspace/drv/usbhid/subdrivers.c	(revision df44fa2ce2cd4c6a7125a389be0292b42d1d62b3)
@@ -38,7 +38,7 @@
 #include "usb/classes/hidpath.h"
 
-//#include "lgtch-ultrax/lgtch-ultrax.h"
 #include "multimedia/multimedia.h"
 #include "mouse/mousedev.h"
+#include "generic/hiddev.h"
 
 static usb_hid_subdriver_usage_t path_kbd[] = {
@@ -58,8 +58,12 @@
 };
 
+static usb_hid_subdriver_usage_t generic_hid_key_path[] = {
+	{0, 0}
+};
+
 const usb_hid_subdriver_mapping_t usb_hid_subdrivers[] = {
 	{
 		path_kbd,
-		-1,
+		0,
 		USB_HID_PATH_COMPARE_BEGIN,
 		-1,
@@ -88,5 +92,5 @@
 	{
 		path_mouse,
-		-1,
+		0,
 		USB_HID_PATH_COMPARE_BEGIN,
 		-1,
@@ -99,4 +103,17 @@
 		}
 	},
+	{
+		generic_hid_key_path,
+		0,
+		USB_HID_PATH_COMPARE_ANYWHERE,
+		-1,
+		-1,
+		{
+			.init = usb_generic_hid_init,
+			.deinit = NULL,
+			.poll = usb_generic_hid_polling_callback,
+			.poll_end = NULL
+		}
+	},
 	{NULL, -1, 0, -1, -1, {NULL, NULL, NULL, NULL, NULL}}
 };
Index: uspace/drv/usbhid/usbhid.c
===================================================================
--- uspace/drv/usbhid/usbhid.c	(revision 37f87fa3c6487413c897d909b685591962d2d2cf)
+++ uspace/drv/usbhid/usbhid.c	(revision df44fa2ce2cd4c6a7125a389be0292b42d1d62b3)
@@ -234,5 +234,7 @@
 	}
 	
-	hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc(count * 
+	// add one generic HID subdriver per device
+	
+	hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc((count + 1) * 
 	    sizeof(usb_hid_subdriver_t));
 	if (hid_dev->subdrivers == NULL) {
@@ -247,5 +249,10 @@
 	}
 	
-	hid_dev->subdriver_count = count;
+	hid_dev->subdrivers[count].init = usb_generic_hid_init;
+	hid_dev->subdrivers[count].poll = usb_generic_hid_polling_callback;
+	hid_dev->subdrivers[count].deinit = NULL;
+	hid_dev->subdrivers[count].poll_end = NULL;
+	
+	hid_dev->subdriver_count = count + 1;
 	
 	return EOK;
