Index: uspace/app/mkbd/Makefile
===================================================================
--- uspace/app/mkbd/Makefile	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/app/mkbd/Makefile	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -31,8 +31,8 @@
 
 LIBS = \
+	$(LIBUSBHID_PREFIX)/libusbhid.a \
 	$(LIBUSBDEV_PREFIX)/libusbdev.a \
 	$(LIBUSB_PREFIX)/libusb.a \
-	$(LIBDRV_PREFIX)/libdrv.a \
-	$(LIBUSBHID_PREFIX)/libusbhid.a
+	$(LIBDRV_PREFIX)/libdrv.a 
 EXTRA_CFLAGS = \
 	-I$(LIBUSB_PREFIX)/include \
Index: uspace/app/mkbd/main.c
===================================================================
--- uspace/app/mkbd/main.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/app/mkbd/main.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -49,4 +49,5 @@
 #include <usb/hid/iface.h>
 #include <usb/dev/pipes.h>
+#include <async.h>
 
 #define NAME "mkbd"
@@ -229,5 +230,6 @@
 	}
 	
-	char *devpath = argv[1];
+	//char *devpath = argv[1];
+	const char *devpath = "/hw/pci0/00:06.0/ohci-rh/usb00_a2/HID0/hid";
 
 //	/* The initialization is here only to make compiler happy. */
@@ -323,4 +325,6 @@
 		
 		printf("Got buffer: %p, size: %zu\n", event, actual_size);
+		
+		async_usleep(10000);
 	}
 	
Index: uspace/drv/usbhid/generic/hiddev.c
===================================================================
--- uspace/drv/usbhid/generic/hiddev.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/drv/usbhid/generic/hiddev.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -83,7 +83,8 @@
 static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun)
 {
-	usb_log_debug("Generic HID: Get event length.\n");
+	usb_log_debug("Generic HID: Get event length (fun: %p, "
+	    "fun->driver_data: %p.\n", fun, fun->driver_data);
 	
-	if (fun == NULL || fun->driver_data) {
+	if (fun == NULL || fun->driver_data == NULL) {
 		return 0;
 	}
@@ -91,5 +92,8 @@
 	usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
 	
-	return hid_dev->input_report_size;
+	usb_log_debug("hid_dev: %p, Max input report size (%d).\n",
+	    hid_dev, hid_dev->max_input_report_size);
+	
+	return hid_dev->max_input_report_size;
 }
 
@@ -101,5 +105,6 @@
 	usb_log_debug("Generic HID: Get event.\n");
 	
-	if (fun == NULL || fun->driver_data) {
+	if (fun == NULL || fun->driver_data == NULL) {
+		usb_log_debug("No function");
 		return EINVAL;
 	}
Index: uspace/lib/drv/Makefile
===================================================================
--- uspace/lib/drv/Makefile	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/drv/Makefile	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -40,5 +40,6 @@
 	generic/remote_usb.c \
 	generic/remote_pci.c \
-	generic/remote_usbhc.c
+	generic/remote_usbhc.c \
+	generic/remote_usbhid.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/lib/drv/generic/dev_iface.c
===================================================================
--- uspace/lib/drv/generic/dev_iface.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/drv/generic/dev_iface.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -46,4 +46,6 @@
 #include "remote_pci.h"
 
+#include <stdio.h>
+
 static iface_dipatch_table_t remote_ifaces = {
 	.ifaces = {
@@ -59,5 +61,10 @@
 remote_iface_t *get_remote_iface(int idx)
 {
+	printf("get_remote_iface(): idx: %d\n", idx);
 	assert(is_valid_iface_idx(idx));
+	printf("remote iface: %p\n", remote_ifaces.ifaces[idx]);
+	
+	printf("remote_usbhid_iface ptr: %p\n", &remote_usbhid_iface);
+	
 	return remote_ifaces.ifaces[idx];
 }
@@ -66,4 +73,6 @@
 get_remote_method(remote_iface_t *rem_iface, sysarg_t iface_method_idx)
 {
+	printf("remote iface: %p\n", rem_iface);
+	printf("Method count: %d\n", rem_iface->method_count);
 	if (iface_method_idx >= rem_iface->method_count) {
 		return NULL;
Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/drv/generic/driver.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -397,4 +397,5 @@
 			 * handling ("remote interface").
 			 */
+			printf("iface_idx: %d\n", iface_idx);
 			remote_iface_t *rem_iface = get_remote_iface(iface_idx);
 			assert(rem_iface != NULL);
Index: uspace/lib/drv/generic/remote_usbhid.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhid.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/drv/generic/remote_usbhid.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -36,4 +36,5 @@
 #include <errno.h>
 #include <assert.h>
+#include <stdio.h>
 
 #include "usbhid_iface.h"
@@ -58,5 +59,5 @@
 };
 
-usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
+//usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
 
 
@@ -75,12 +76,14 @@
 
 	size_t len = hid_iface->get_event_length(fun);
-	if (len == 0) {
-		len = EEMPTY;
-	}
-	if (len < 0) {
-		async_answer_0(callid, len);
-	} else {
-		async_answer_1(callid, EOK, len);
-	}
+//	if (len == 0) {
+//		len = EEMPTY;
+//	}
+	async_answer_1(callid, EOK, len);
+	
+//	if (len < 0) {
+//		async_answer_0(callid, len);
+//	} else {
+//		async_answer_1(callid, EOK, len);
+//	}
 }
 
Index: uspace/lib/drv/include/remote_usbhid.h
===================================================================
--- uspace/lib/drv/include/remote_usbhid.h	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/drv/include/remote_usbhid.h	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -36,5 +36,5 @@
 #define LIBDRV_REMOTE_USBHID_H_
 
-remote_iface_t remote_usbhid_iface;
+extern remote_iface_t remote_usbhid_iface;
 
 #endif
Index: uspace/lib/usbhid/src/hidiface.c
===================================================================
--- uspace/lib/usbhid/src/hidiface.c	(revision e7079cfccf40b3535b85a699063f3ecc42490440)
+++ uspace/lib/usbhid/src/hidiface.c	(revision 4e78236243e90824326687be4b2be23bcc3def81)
@@ -86,4 +86,8 @@
 		return EINVAL;
 	}
+	
+//	if (size == 0) {
+//		return EOK;
+//	}
 
 	size_t buffer_size =  size;
