Index: uspace/lib/usb/include/usb/classes/hidpath.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hidpath.h	(revision 3b5d5b9dafb5c595d014e7da3bb03c64022764d7)
+++ uspace/lib/usb/include/usb/classes/hidpath.h	(revision 7bb803666a59d8a1e8ff0640f591cacbb0f96922)
@@ -43,8 +43,20 @@
  * Description of path of usage pages and usages in report descriptor
  */
+/** Wanted usage path must be exactly the same as the searched one */
 #define USB_HID_PATH_COMPARE_STRICT				0
-#define USB_HID_PATH_COMPARE_END				1
+/** Wanted usage path must be the suffix in the searched one */
+#define USB_HID_PATH_COMPARE_END			1
+/** */
 #define USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY	4
 #define USB_HID_PATH_COMPARE_COLLECTION_ONLY	2 /* porovnava jenom cestu z Kolekci */
+/** Searched usage page must be prefix of the other one */
+#define USB_HID_PATH_COMPARE_BEGIN		8
+/** Searched couple of usage page and usage can be anywhere in usage path */
+#define USB_HID_PATH_COMPARE_WHERE		16
+/**
+ * TODO
+ *  * porovnani zacatek - neni to to samy jako COLLECTION ONLY?? -- TEST
+ *  * porovnani kdekoliv (jenom s delkou 1 at si to moc nekomplikujem)
+ */
 
 
Index: uspace/lib/usb/include/usb/classes/hidtypes.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hidtypes.h	(revision 3b5d5b9dafb5c595d014e7da3bb03c64022764d7)
+++ uspace/lib/usb/include/usb/classes/hidtypes.h	(revision 7bb803666a59d8a1e8ff0640f591cacbb0f96922)
@@ -165,4 +165,6 @@
 	/** */	
 	link_t link;
+
+	int in_delimiter;
 } usb_hid_report_item_t;
 
Index: uspace/lib/usb/src/hiddescriptor.c
===================================================================
--- uspace/lib/usb/src/hiddescriptor.c	(revision 3b5d5b9dafb5c595d014e7da3bb03c64022764d7)
+++ uspace/lib/usb/src/hiddescriptor.c	(revision 7bb803666a59d8a1e8ff0640f591cacbb0f96922)
@@ -41,4 +41,9 @@
 #include <assert.h>
 
+
+#define OUTSIDE_DELIMITER_SET	0
+#define START_DELIMITER_SET	1
+#define INSIDE_DELIMITER_SET	2
+	
 /** The new report item flag. Used to determine when the item is completly
  * configured and should be added to the report structure
@@ -267,4 +272,5 @@
 		return ENOMEM;
 	}
+	usb_hid_report_path_append_item(usage_path, 0, 0);	
 	
 	while(i<size){	
@@ -442,6 +448,17 @@
 			
 		case USB_HID_REPORT_TAG_COLLECTION:
-			// TODO usage_path->flags = *data;
-			usb_hid_report_path_append_item(usage_path, report_item->usage_page, report_item->usages[report_item->usages_count-1]);						
+			//TODO: usage_path->flags = *data;
+			
+			usb_log_debug("APPENDED ITEM TO USAGE PATH (PAGE %d, USAGE %d\n", report_item->usage_page, report_item->usages[report_item->usages_count-1]);
+			usb_hid_print_usage_path(usage_path);
+
+			// set last item
+			usb_hid_report_set_last_item(usage_path, USB_HID_TAG_CLASS_GLOBAL, report_item->usage_page);
+			usb_hid_report_set_last_item(usage_path, USB_HID_TAG_CLASS_LOCAL, report_item->usages[report_item->usages_count-1]);
+			// append the new one which will be set by common
+			// usage/usage page
+			usb_hid_report_path_append_item(usage_path, report_item->usage_page, report_item->usages[report_item->usages_count-1]);	
+			usb_hid_print_usage_path(usage_path);
+
 			usb_hid_report_reset_local_items (report_item);
 			return USB_HID_NO_ACTION;
@@ -579,7 +596,11 @@
 			break;			
 		case USB_HID_REPORT_TAG_DELIMITER:
-			//report_item->delimiter = usb_hid_report_tag_data_uint32(data,item_size);
-			//TODO: 
-			//	DELIMITER STUFF
+			if (report_item->in_delimiter == OUTSIDE_DELIMITER_SET) {
+				report_item->in_delimiter = START_DELIMITER_SET;
+			}
+			else {
+				report_item->in_delimiter = OUTSIDE_DELIMITER_SET;
+			}
+			
 			break;
 		
