Index: uspace/lib/drv/generic/remote_usbhid.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhid.c	(revision eb2f7dda503f968308ff974fda1442ae818f1e68)
+++ uspace/lib/drv/generic/remote_usbhid.c	(revision e765ccb6cde2fa56a59892f7298c9f2a0ec6e244)
@@ -71,5 +71,5 @@
 	}
 
-	int len = hid_iface->get_event_length(fun);
+	size_t len = hid_iface->get_event_length(fun);
 	if (len == 0) {
 		len = EEMPTY;
@@ -100,8 +100,8 @@
 		return;
 	}
-	/* Check that length is even number. Truncate otherwise. */
-	if ((len % 2) == 1) {
-		len--;
-	}
+//	/* Check that length is even number. Truncate otherwise. */
+//	if ((len % 2) == 1) {
+//		len--;
+//	}
 	if (len == 0) {
 		async_answer_0(data_callid, EINVAL);
@@ -111,29 +111,26 @@
 	int rc;
 
-	size_t items = len / 2;
-	uint16_t *usage_pages_and_usages = malloc(sizeof(uint16_t) * len);
-	if (usage_pages_and_usages == NULL) {
+	int32_t *data = malloc(len);
+	if (data == NULL) {
 		async_answer_0(data_callid, ENOMEM);
 		async_answer_0(callid, ENOMEM);
 	}
 
-	size_t act_items;
-	int rc = hid_iface->get_event(fun, usage_pages_and_usages,
-	    usage_pages_and_usages + items, items, &act_items, flags);
+	size_t act_length;
+	rc = hid_iface->get_event(fun, data, len, &act_length, flags);
 	if (rc != EOK) {
-		free(usage_pages_and_usages);
+		free(data);
 		async_answer_0(data_callid, rc);
 		async_answer_0(callid, rc);
 	}
-	if (act_items >= items) {
+	if (act_length >= len) {
 		/* This shall not happen. */
 		// FIXME: how about an assert here?
-		act_items = items;
+		act_length = len;
 	}
 
-	async_data_read_finalize(data_callid, usage_pages_and_usages,
-	    act_items * 2 * sizeof(uint16_t));
+	async_data_read_finalize(data_callid, data, act_length);
 
-	free(usage_pages_and_usages);
+	free(data);
 
 	async_answer_0(callid, EOK);
