Index: uspace/lib/usbhid/include/usb/classes/hid_report_items.h
===================================================================
--- uspace/lib/usbhid/include/usb/classes/hid_report_items.h	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/lib/usbhid/include/usb/classes/hid_report_items.h	(revision 65b458c4e29cccc7161601b794cb6db07efb5c3d)
@@ -46,4 +46,11 @@
 #define USB_HID_ITEM_IS_LONG(data)	(data == 0xFE)
 
+
+/**
+ * Extended usage macros
+ */
+#define USB_HID_IS_EXTENDED_USAGE(usage)	((usage & 0xFFFF0000) != 0)
+#define USB_HID_EXTENDED_USAGE_PAGE(usage)	((usage & 0xFFFF0000) >> 16)
+#define USB_HID_EXTENDED_USAGE(usage)		(usage & 0xFFFF)
 
 /**
Index: uspace/lib/usbhid/include/usb/classes/hidparser.h
===================================================================
--- uspace/lib/usbhid/include/usb/classes/hidparser.h	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/lib/usbhid/include/usb/classes/hidparser.h	(revision 65b458c4e29cccc7161601b794cb6db07efb5c3d)
@@ -51,8 +51,4 @@
                          size_t size, uint8_t *report_id);
 
-/** */
-size_t usb_hid_report_input_length(const usb_hid_report_t *report,
-	usb_hid_report_path_t *path, int flags);
-
 /*
  * Output report parser functions
@@ -65,7 +61,7 @@
 void usb_hid_report_output_free(uint8_t *output);
 
-/** Returns size of output for given usage path */
-size_t usb_hid_report_output_size(usb_hid_report_t *report,
-                                  usb_hid_report_path_t *path, int flags);
+/** Returns size of report in items */
+size_t usb_hid_report_size(usb_hid_report_t *report, uint8_t report_id, 
+                           usb_hid_report_type_t type);
 
 /** Makes the output report buffer by translated given data */
Index: uspace/lib/usbhid/include/usb/classes/hidtypes.h
===================================================================
--- uspace/lib/usbhid/include/usb/classes/hidtypes.h	(revision 9e195e2cd2e7af9bd0b0ef0bde139dac93b3f53f)
+++ uspace/lib/usbhid/include/usb/classes/hidtypes.h	(revision 65b458c4e29cccc7161601b794cb6db07efb5c3d)
@@ -39,5 +39,5 @@
 #include <adt/list.h>
 
-#define USB_HID_MAX_USAGES	20
+#define USB_HID_MAX_USAGES	0xffff
 
 #define USB_HID_UINT32_TO_INT32(x, size)	((((x) & (1 << ((size) - 1))) != 0) ? -(~(x - 1) & ((1 << size) - 1)) : (x)) //(-(~((x) - 1)))
@@ -92,9 +92,11 @@
 	int32_t physical_minimum;
 	int32_t physical_maximum;
-	uint32_t usage_minimum;
-	uint32_t usage_maximum;
+	int32_t usage_minimum;
+	int32_t usage_maximum;
 	uint32_t unit;
 	uint32_t unit_exponent;
-	
+
+	uint32_t *usages;
+	size_t usages_count;
 
 	int32_t value;
@@ -121,7 +123,7 @@
 
 	/** */	
-	uint32_t usage_minimum;
-	/** */	
-	uint32_t usage_maximum;
+	int32_t usage_minimum;
+	/** */	
+	int32_t usage_maximum;
 	/** */	
 	int32_t logical_minimum;
