Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision 0ede0c3c7e0db4c1f1ab6c696f7effc16dbfcce6)
+++ uspace/drv/ohci/batch.c	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
@@ -134,8 +134,14 @@
 	assert(data);
 	size_t tds = data->td_count - 1;
-	usb_log_debug2("Batch(%p) checking %d td(s) for completion.\n",
+	usb_log_debug("Batch(%p) checking %d td(s) for completion.\n",
 	    instance, tds);
+	usb_log_debug("ED: %x:%x:%x:%x.\n",
+	    data->ed->status, data->ed->td_head, data->ed->td_tail,
+	    data->ed->next);
 	size_t i = 0;
 	for (; i < tds; ++i) {
+		usb_log_debug("TD %d: %x:%x:%x:%x.\n", i,
+		    data->tds[i].status, data->tds[i].cbp, data->tds[i].next,
+		    data->tds[i].be);
 		if (!td_is_finished(&data->tds[i]))
 			return false;
Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision 0ede0c3c7e0db4c1f1ab6c696f7effc16dbfcce6)
+++ uspace/drv/ohci/hc.c	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
@@ -135,13 +135,13 @@
 	}
 
-	transfer_list_add_batch(
-	    instance->transfers[batch->transfer_type], batch);
-
 	switch (batch->transfer_type) {
 	case USB_TRANSFER_CONTROL:
 		instance->registers->control &= ~C_CLE;
+		transfer_list_add_batch(
+		    instance->transfers[batch->transfer_type], batch);
 		instance->registers->command_status |= CS_CLF;
-		usb_log_debug2("Set control transfer filled: %x.\n",
+		usb_log_debug2("Set CS control transfer filled: %x.\n",
 			instance->registers->command_status);
+		instance->registers->control_current = 0;
 		instance->registers->control |= C_CLE;
 		break;
@@ -160,10 +160,10 @@
 {
 	assert(instance);
-	if ((status & ~IS_SF) == 0) /* ignore sof status */
-		return;
+//	if ((status & ~IS_SF) == 0) /* ignore sof status */
+//		return;
 	if (status & IS_RHSC)
 		rh_interrupt(&instance->rh);
 
-	usb_log_info("OHCI interrupt: %x.\n", status);
+	usb_log_fatal("OHCI interrupt: %x.\n", status);
 
 
@@ -191,5 +191,5 @@
 		instance->registers->interrupt_status = status;
 		hc_interrupt(instance, status);
-		async_usleep(1000);
+		async_usleep(2000000);
 	}
 	return EOK;
@@ -267,4 +267,19 @@
 	    instance->registers->control);
 
+	/* Use HCCA */
+	instance->registers->hcca = addr_to_phys(instance->hcca);
+
+	/* Use queues */
+	instance->registers->bulk_head = instance->transfers_bulk.list_head_pa;
+	usb_log_debug2("Bulk HEAD set to: %p(%p).\n",
+	    instance->transfers_bulk.list_head,
+	    instance->transfers_bulk.list_head_pa);
+
+	instance->registers->control_head =
+	    instance->transfers_control.list_head_pa;
+	usb_log_debug2("Control HEAD set to: %p(%p).\n",
+	    instance->transfers_control.list_head,
+	    instance->transfers_control.list_head_pa);
+
 	/* Enable queues */
 	instance->registers->control |= (C_PLE | C_IE | C_CLE | C_BLE);
@@ -342,19 +357,5 @@
 		return ENOMEM;
 	bzero(instance->hcca, sizeof(hcca_t));
-	instance->registers->hcca = addr_to_phys(instance->hcca);
-	usb_log_debug2("OHCI HCCA initialized at %p(%p).\n",
-	    instance->hcca, instance->registers->hcca);
-
-	/* Use queues */
-	instance->registers->bulk_head = instance->transfers_bulk.list_head_pa;
-	usb_log_debug2("Bulk HEAD set to: %p(%p).\n",
-	    instance->transfers_bulk.list_head,
-	    instance->transfers_bulk.list_head_pa);
-
-	instance->registers->control_head =
-	    instance->transfers_control.list_head_pa;
-	usb_log_debug2("Control HEAD set to: %p(%p).\n",
-	    instance->transfers_control.list_head,
-	    instance->transfers_control.list_head_pa);
+	usb_log_debug2("OHCI HCCA initialized at %p.\n", instance->hcca);
 
 	unsigned i = 0;
Index: uspace/drv/ohci/main.c
===================================================================
--- uspace/drv/ohci/main.c	(revision 0ede0c3c7e0db4c1f1ab6c696f7effc16dbfcce6)
+++ uspace/drv/ohci/main.c	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
@@ -92,5 +92,5 @@
 int main(int argc, char *argv[])
 {
-	usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME);
+	usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
 	sleep(5);
 	return ddf_driver_main(&ohci_driver);
Index: uspace/drv/ohci/transfer_list.c
===================================================================
--- uspace/drv/ohci/transfer_list.c	(revision 0ede0c3c7e0db4c1f1ab6c696f7effc16dbfcce6)
+++ uspace/drv/ohci/transfer_list.c	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
@@ -143,4 +143,6 @@
 
 	fibril_mutex_lock(&instance->guard);
+	usb_log_debug2("Checking list %s for completed batches(%d).\n",
+	    instance->name, list_count(&instance->batch_list));
 	link_t *current = instance->batch_list.next;
 	while (current != &instance->batch_list) {
