Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision 57c0a7eb5ef14b723abc35cb15fec827c026d345)
+++ uspace/drv/uhci-hcd/batch.c	(revision a60150a3100679ffb522243b05de26eafc57efed)
@@ -54,4 +54,5 @@
 static void batch_call_in_and_dispose(batch_t *instance);
 static void batch_call_out_and_dispose(batch_t *instance);
+static void batch_dispose(batch_t *instance);
 
 
@@ -163,4 +164,7 @@
 			usb_log_debug("Batch(%p) found error TD(%d):%x.\n",
 			    instance, i, instance->tds[i].status);
+
+			device_keeper_set_toggle(instance->manager, instance->target,
+			    td_toggle(&instance->tds[i]));
 			if (i > 0)
 				goto substract_ret;
@@ -352,4 +356,17 @@
 	assert(instance);
 	batch_call_in(instance);
+	batch_dispose(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_call_out_and_dispose(batch_t *instance)
+{
+	assert(instance);
+	batch_call_out(instance);
+	batch_dispose(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_dispose(batch_t *instance)
+{
+	assert(instance);
 	usb_log_debug("Batch(%p) disposing.\n", instance);
 	free32(instance->tds);
@@ -360,16 +377,4 @@
 }
 /*----------------------------------------------------------------------------*/
-void batch_call_out_and_dispose(batch_t *instance)
-{
-	assert(instance);
-	batch_call_out(instance);
-	usb_log_debug("Batch(%p) disposing.\n", instance);
-	free32(instance->tds);
-	free32(instance->qh);
-	free32(instance->setup_buffer);
-	free32(instance->transport_buffer);
-	free(instance);
-}
-/*----------------------------------------------------------------------------*/
 int batch_schedule(batch_t *instance)
 {
Index: uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision 57c0a7eb5ef14b723abc35cb15fec827c026d345)
+++ uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision a60150a3100679ffb522243b05de26eafc57efed)
@@ -115,4 +115,11 @@
 }
 
+static inline int td_toggle(td_t *instance)
+{
+	assert(instance);
+	return ((instance->device & TD_DEVICE_DATA_TOGGLE_ONE_FLAG) != 0)
+	    ? 1 : 0;
+}
+
 static inline bool td_is_active(td_t *instance)
 {
