Index: uspace/lib/usb/include/usb/host/batch.h
===================================================================
--- uspace/lib/usb/include/usb/host/batch.h	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/include/usb/host/batch.h	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -39,4 +39,5 @@
 #include <usbhc_iface.h>
 #include <usb/usb.h>
+#include <usb/host/endpoint.h>
 
 typedef struct usb_transfer_batch usb_transfer_batch_t;
@@ -60,4 +61,5 @@
 	ddf_fun_t *fun;
 	void *arg;
+	endpoint_t *ep;
 	void *private_data;
 };
@@ -78,4 +80,5 @@
     void *arg,
     ddf_fun_t *fun,
+		endpoint_t *ep,
     void *private_data
 );
Index: uspace/lib/usb/include/usb/host/device_keeper.h
===================================================================
--- uspace/lib/usb/include/usb/host/device_keeper.h	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/include/usb/host/device_keeper.h	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -45,4 +45,5 @@
 #include <fibril_synch.h>
 #include <usb/usb.h>
+#include <usb/host/endpoint.h>
 
 /** Number of USB address for array dimensions. */
@@ -72,5 +73,5 @@
 
 void usb_device_keeper_add_ep(
-    usb_device_keeper_t *instance, usb_address_t address, link_t *ep);
+    usb_device_keeper_t *instance, usb_address_t address, endpoint_t *ep);
 
 void usb_device_keeper_reserve_default_address(
@@ -82,5 +83,5 @@
     usb_target_t target,
     const uint8_t *setup_data);
-
+/*
 int usb_device_keeper_get_toggle(usb_device_keeper_t *instance,
     usb_target_t target, usb_direction_t direction);
@@ -88,5 +89,5 @@
 int usb_device_keeper_set_toggle(usb_device_keeper_t *instance,
     usb_target_t target, usb_direction_t direction, bool toggle);
-
+*/
 usb_address_t device_keeper_get_free_address(usb_device_keeper_t *instance,
     usb_speed_t speed);
Index: uspace/lib/usb/include/usb/host/endpoint.h
===================================================================
--- uspace/lib/usb/include/usb/host/endpoint.h	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/include/usb/host/endpoint.h	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -47,5 +47,5 @@
 	size_t max_packet_size;
 	bool active;
-	int toggle:1;
+	unsigned toggle:1;
 } endpoint_t;
 
@@ -55,5 +55,10 @@
 void endpoint_destroy(endpoint_t *instance);
 
+int endpoint_toggle_get(endpoint_t *instance);
+
+void endpoint_toggle_set(endpoint_t *instance, int toggle);
+
 void endpoint_toggle_reset(link_t *ep);
+
 
 #endif
Index: uspace/lib/usb/src/host/batch.c
===================================================================
--- uspace/lib/usb/src/host/batch.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/src/host/batch.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -54,4 +54,5 @@
     void *arg,
     ddf_fun_t *fun,
+		endpoint_t *ep,
     void *private_data
     )
@@ -77,5 +78,5 @@
 	instance->next_step = NULL;
 	instance->error = EOK;
-
+	instance->ep = ep;
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/lib/usb/src/host/device_keeper.c
===================================================================
--- uspace/lib/usb/src/host/device_keeper.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/src/host/device_keeper.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -56,6 +56,6 @@
 		instance->devices[i].control_used = 0;
 		instance->devices[i].handle = 0;
-		instance->devices[i].toggle_status[0] = 0;
-		instance->devices[i].toggle_status[1] = 0;
+//		instance->devices[i].toggle_status[0] = 0;
+//		instance->devices[i].toggle_status[1] = 0;
 		list_initialize(&instance->devices[i].endpoints);
 	}
@@ -63,10 +63,10 @@
 /*----------------------------------------------------------------------------*/
 void usb_device_keeper_add_ep(
-    usb_device_keeper_t *instance, usb_address_t address, link_t *ep)
+    usb_device_keeper_t *instance, usb_address_t address, endpoint_t *ep)
 {
 	assert(instance);
 	fibril_mutex_lock(&instance->guard);
 	assert(instance->devices[address].occupied);
-	list_append(ep, &instance->devices[address].endpoints);
+	list_append(&ep->same_device_eps, &instance->devices[address].endpoints);
 	fibril_mutex_unlock(&instance->guard);
 }
@@ -131,8 +131,9 @@
 		if (((data[0] & 0xf) == 1) && ((data[2] | data[3]) == 0)) {
 			/* endpoint number is < 16, thus first byte is enough */
-			instance->devices[target.address].toggle_status[0] &=
-			    ~(1 << data[4]);
-			instance->devices[target.address].toggle_status[1] &=
-			    ~(1 << data[4]);
+			assert(!"NOT IMPLEMENTED!");
+//			instance->devices[target.address].toggle_status[0] &=
+//			    ~(1 << data[4]);
+//			instance->devices[target.address].toggle_status[1] &=
+//			    ~(1 << data[4]);
 		}
 	break;
@@ -142,6 +143,14 @@
 		/* target must be device */
 		if ((data[0] & 0xf) == 0) {
-			instance->devices[target.address].toggle_status[0] = 0;
-			instance->devices[target.address].toggle_status[1] = 0;
+			link_t *current =
+			    instance->devices[target.address].endpoints.next;
+			while (current !=
+			   instance->devices[target.address].endpoints.prev)
+			{
+				endpoint_toggle_reset(current);
+				current = current->next;
+			}
+//			instance->devices[target.address].toggle_status[0] = 0;
+//			instance->devices[target.address].toggle_status[1] = 0;
 		}
 	break;
@@ -150,4 +159,5 @@
 }
 /*----------------------------------------------------------------------------*/
+#if 0
 /** Get current value of endpoint toggle.
  *
@@ -212,4 +222,5 @@
 	return ret;
 }
+#endif
 /*----------------------------------------------------------------------------*/
 /** Get a free USB address
Index: uspace/lib/usb/src/host/endpoint.c
===================================================================
--- uspace/lib/usb/src/host/endpoint.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/lib/usb/src/host/endpoint.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -35,5 +35,4 @@
 
 #include <errno.h>
-
 #include <usb/host/endpoint.h>
 
@@ -57,4 +56,17 @@
 }
 /*----------------------------------------------------------------------------*/
+int endpoint_toggle_get(endpoint_t *instance)
+{
+	assert(instance);
+	return (int)instance->toggle;
+}
+/*----------------------------------------------------------------------------*/
+void endpoint_toggle_set(endpoint_t *instance, int toggle)
+{
+	assert(instance);
+	assert(toggle == 0 || toggle == 1);
+	instance->toggle = toggle;
+}
+/*----------------------------------------------------------------------------*/
 void endpoint_toggle_reset(link_t *ep)
 {
