Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision 7013b14b3a18e6a7ccde76e9c2b111d1eb64af46)
+++ uspace/drv/ohci/batch.c	(revision d6522dd3264f9a8edf5adbaa051188824bff4a31)
@@ -164,6 +164,10 @@
 		}
 	}
-	data->leave_td = ++i;
+	data->leave_td = i;
 	assert(data->leave_td <= data->td_count);
+	hcd_endpoint_t *hcd_ep = hcd_endpoint_get(instance->ep);
+	assert(hcd_ep);
+	hcd_ep->td = data->tds[i];
+
 	return true;
 }
@@ -243,7 +247,5 @@
 	ohci_transfer_batch_t *data = instance->private_data;
 	assert(data);
-	ed_init(data->ed, instance->ep);
-//	ed_add_tds(data->ed, &data->tds[0], &data->tds[data->td_count - 1]);
-	usb_log_debug("Created ED(%p): %x:%x:%x:%x.\n", data->ed,
+	usb_log_debug("Using ED(%p): %x:%x:%x:%x.\n", data->ed,
 	    data->ed->status, data->ed->td_tail, data->ed->td_head,
 	    data->ed->next);
@@ -292,11 +294,8 @@
 	ohci_transfer_batch_t *data = instance->private_data;
 	assert(data);
-	ed_init(data->ed, instance->ep);
-//	ed_add_tds(data->ed, &data->tds[0], &data->tds[data->td_count - 1]);
-	usb_log_debug("Created ED(%p): %x:%x:%x:%x.\n", data->ed,
+	usb_log_debug("Using ED(%p): %x:%x:%x:%x.\n", data->ed,
 	    data->ed->status, data->ed->td_tail, data->ed->td_head,
 	    data->ed->next);
 
-	/* data stage */
 	size_t td_current = 0;
 	size_t remain_size = instance->buffer_size;
Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision 7013b14b3a18e6a7ccde76e9c2b111d1eb64af46)
+++ uspace/drv/ohci/hc.c	(revision d6522dd3264f9a8edf5adbaa051188824bff4a31)
@@ -306,4 +306,5 @@
 
 			if (batch_is_complete(batch)) {
+				list_remove(current);
 				usb_transfer_batch_finish(batch);
 			}
