Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision f123909d82f100ce358a4d2d10ff2ecc24efcbda)
+++ uspace/drv/uhci-hcd/batch.c	(revision 3bd96bb951ab0413b8e57b2afd8fdb7056374fb0)
@@ -45,6 +45,4 @@
 #define DEFAULT_ERROR_COUNT 3
 
-static int batch_schedule(batch_t *instance);
-
 static void batch_control(batch_t *instance,
     usb_packet_id data_stage, usb_packet_id status_stage);
@@ -54,5 +52,4 @@
 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);
 
 
@@ -203,5 +200,4 @@
 	instance->next_step = batch_call_out_and_dispose;
 	usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -216,5 +212,4 @@
 	instance->next_step = batch_call_in_and_dispose;
 	usb_log_debug("Batch(%p) CONTROL READ initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -229,5 +224,4 @@
 	instance->next_step = batch_call_in_and_dispose;
 	usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -244,5 +238,4 @@
 	instance->next_step = batch_call_out_and_dispose;
 	usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -257,5 +250,4 @@
 	instance->next_step = batch_call_in_and_dispose;
 	usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -271,5 +263,4 @@
 	instance->next_step = batch_call_out_and_dispose;
 	usb_log_debug("Batch(%p) BULK OUT initialized.\n", instance);
-	batch_schedule(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -446,12 +437,4 @@
 	free(instance);
 }
-/*----------------------------------------------------------------------------*/
-int batch_schedule(batch_t *instance)
-{
-	assert(instance);
-	uhci_hc_t *hc = fun_to_uhci_hc(instance->fun);
-	assert(hc);
-	return uhci_hc_schedule(hc, instance);
-}
 /**
  * @}
Index: uspace/drv/uhci-hcd/batch.h
===================================================================
--- uspace/drv/uhci-hcd/batch.h	(revision f123909d82f100ce358a4d2d10ff2ecc24efcbda)
+++ uspace/drv/uhci-hcd/batch.h	(revision 3bd96bb951ab0413b8e57b2afd8fdb7056374fb0)
@@ -78,4 +78,6 @@
 		);
 
+void batch_dispose(batch_t *instance);
+
 bool batch_is_complete(batch_t *instance);
 
Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision f123909d82f100ce358a4d2d10ff2ecc24efcbda)
+++ uspace/drv/uhci-hcd/iface.c	(revision 3bd96bb951ab0413b8e57b2afd8fdb7056374fb0)
@@ -161,4 +161,9 @@
 		return ENOMEM;
 	batch_interrupt_out(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
@@ -192,4 +197,9 @@
 		return ENOMEM;
 	batch_interrupt_in(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
@@ -224,4 +234,9 @@
 		return ENOMEM;
 	batch_bulk_out(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
@@ -255,4 +270,9 @@
 		return ENOMEM;
 	batch_bulk_in(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
@@ -293,4 +313,9 @@
 	device_keeper_reset_if_need(&hc->device_manager, target, setup_data);
 	batch_control_write(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
@@ -327,4 +352,9 @@
 		return ENOMEM;
 	batch_control_read(batch);
+	const int ret = uhci_hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+		return ret;
+	}
 	return EOK;
 }
