Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/drv/ohci/batch.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -73,7 +73,7 @@
 	CHECK_NULL_DISPOSE_RETURN(instance,
 	    "Failed to allocate batch instance.\n");
-	usb_transfer_batch_init(instance, target, transfer_type, speed, max_packet_size,
-	    buffer, NULL, buffer_size, NULL, setup_size, func_in,
-	    func_out, arg, fun, NULL);
+	usb_transfer_batch_init(instance, target, transfer_type, speed,
+	    max_packet_size, buffer, NULL, buffer_size, NULL, setup_size,
+	    func_in, func_out, arg, fun, NULL, NULL);
 
         if (buffer_size > 0) {
Index: uspace/drv/ohci/iface.c
===================================================================
--- uspace/drv/ohci/iface.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/drv/ohci/iface.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -164,5 +164,5 @@
 	// TODO use real endpoint here!
 	return usb_endpoint_manager_register_ep(&hc->ep_manager,
-	    address, endpoint, direction, NULL, NULL, 0);
+	    address, endpoint, direction, NULL, 0);
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/drv/uhci-hcd/batch.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -49,5 +49,5 @@
 	td_t *tds;
 	size_t transfers;
-	usb_device_keeper_t *manager;
+//	usb_device_keeper_t *manager;
 } uhci_batch_t;
 
@@ -87,5 +87,5 @@
     usbhc_iface_transfer_in_callback_t func_in,
     usbhc_iface_transfer_out_callback_t func_out, void *arg,
-    usb_device_keeper_t *manager
+    usb_device_keeper_t *manager, endpoint_t *ep
     )
 {
@@ -105,7 +105,8 @@
 	CHECK_NULL_DISPOSE_RETURN(instance,
 	    "Failed to allocate batch instance.\n");
-	usb_transfer_batch_init(instance, target, transfer_type, speed, max_packet_size,
+	usb_transfer_batch_init(instance, target,
+	    transfer_type, speed, max_packet_size,
 	    buffer, NULL, buffer_size, NULL, setup_size, func_in,
-	    func_out, arg, fun, NULL);
+	    func_out, arg, fun, ep, NULL);
 
 
@@ -114,5 +115,5 @@
 	    "Failed to allocate batch instance.\n");
 	bzero(data, sizeof(uhci_batch_t));
-	data->manager = manager;
+//	data->manager = manager;
 	instance->private_data = data;
 
@@ -180,8 +181,11 @@
 			    instance, i, data->tds[i].status);
 			td_print_status(&data->tds[i]);
-
+			endpoint_toggle_set(instance->ep,
+			    td_toggle(&data->tds[i]));
+/*
 			usb_device_keeper_set_toggle(data->manager,
 			    instance->target, instance->direction,
 			    td_toggle(&data->tds[i]));
+*/
 			if (i > 0)
 				goto substract_ret;
@@ -310,6 +314,7 @@
 
 	const bool low_speed = instance->speed == USB_SPEED_LOW;
-	int toggle = usb_device_keeper_get_toggle(
-	    data->manager, instance->target, instance->direction);
+	int toggle = endpoint_toggle_get(instance->ep);
+//	usb_device_keeper_get_toggle(
+//	    data->manager, instance->target, instance->direction);
 	assert(toggle == 0 || toggle == 1);
 
@@ -342,6 +347,7 @@
 	}
 	td_set_ioc(&data->tds[transfer - 1]);
-	usb_device_keeper_set_toggle(data->manager, instance->target,
-	    instance->direction, toggle);
+	endpoint_toggle_set(instance->ep, toggle);
+//	usb_device_keeper_set_toggle(data->manager, instance->target,
+//	    instance->direction, toggle);
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/drv/uhci-hcd/batch.h
===================================================================
--- uspace/drv/uhci-hcd/batch.h	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/drv/uhci-hcd/batch.h	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -56,5 +56,6 @@
     usbhc_iface_transfer_out_callback_t func_out,
 		void *arg,
-		usb_device_keeper_t *manager
+		usb_device_keeper_t *manager,
+		endpoint_t *ep
 		);
 
Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision 8dc762e047944f4eeb1b533176031bd8bfe58813)
+++ uspace/drv/uhci-hcd/iface.c	(revision f567bcfa21aeafa070516a508a114ce99a13d224)
@@ -183,5 +183,5 @@
 		endpoint_destroy(ep);
 	} else {
-		usb_device_keeper_add_ep(&hc->manager, address, &ep->same_device_eps);
+		usb_device_keeper_add_ep(&hc->manager, address, ep);
 	}
 	return ret;
@@ -246,5 +246,6 @@
 	usb_transfer_batch_t *batch =
 	    batch_get(fun, target, ep->transfer_type, ep->max_packet_size,
-	        ep->speed, data, size, NULL, 0, NULL, callback, arg, &hc->manager);
+	        ep->speed, data, size, NULL, 0, NULL, callback, arg,
+		&hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
@@ -304,5 +305,6 @@
 	usb_transfer_batch_t *batch =
 	    batch_get(fun, target, ep->transfer_type, ep->max_packet_size,
-	        ep->speed, data, size, NULL, 0, callback, NULL, arg, &hc->manager);
+	        ep->speed, data, size, NULL, 0, callback, NULL, arg,
+		&hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
@@ -352,5 +354,5 @@
 	    batch_get(fun, target, ep->transfer_type, ep->max_packet_size,
 	        ep->speed, data, size, NULL, 0, NULL, callback, arg,
-		&hc->manager);
+		&hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
@@ -399,5 +401,5 @@
 	    batch_get(fun, target, ep->transfer_type, ep->max_packet_size,
 	        ep->speed, data, size, NULL, 0, callback, NULL, arg,
-		&hc->manager);
+		&hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
@@ -448,5 +450,5 @@
 	    batch_get(fun, target, USB_TRANSFER_CONTROL, max_packet_size, speed,
 	        data, size, setup_data, setup_size, NULL, callback, arg,
-	        &hc->manager);
+	        &hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
@@ -495,5 +497,5 @@
 	    batch_get(fun, target, USB_TRANSFER_CONTROL, max_packet_size, speed,
 	        data, size, setup_data, setup_size, callback, NULL, arg,
-		&hc->manager);
+		&hc->manager, ep);
 	if (!batch)
 		return ENOMEM;
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)
 {
