Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 90dd59dcdd7810ff0b649b59ab64cc30c6b3d0de)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 23b0fe8e5a14774779ca68b936cc950407e553b8)
@@ -203,5 +203,4 @@
 	instance->generic.private_data = instance;
 	instance->generic.schedule = schedule;
-	instance->generic.batch_init_hook = batch_init_ohci;
 	instance->generic.ep_add_hook = NULL;
 
Index: uspace/drv/bus/usb/uhci/hc.c
===================================================================
--- uspace/drv/bus/usb/uhci/hc.c	(revision 90dd59dcdd7810ff0b649b59ab64cc30c6b3d0de)
+++ uspace/drv/bus/usb/uhci/hc.c	(revision 23b0fe8e5a14774779ca68b936cc950407e553b8)
@@ -198,6 +198,6 @@
 	instance->generic.private_data = instance;
 	instance->generic.schedule = hc_schedule;
-	instance->generic.batch_init_hook = batch_init_uhci;
 	instance->generic.ep_add_hook = NULL;
+
 #undef CHECK_RET_DEST_FUN_RETURN
 
@@ -382,4 +382,8 @@
 	assert(instance);
 	assert(batch);
+	int ret = batch_init_uhci(batch);
+	if (ret != EOK) {
+		return ret;
+	}
 
 	transfer_list_t *list =
Index: uspace/lib/usbhost/include/usb/host/hcd.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/hcd.h	(revision 90dd59dcdd7810ff0b649b59ab64cc30c6b3d0de)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision 23b0fe8e5a14774779ca68b936cc950407e553b8)
@@ -51,5 +51,4 @@
 	int (*schedule)(hcd_t *, usb_transfer_batch_t *);
 	int (*ep_add_hook)(hcd_t *, endpoint_t *);
-	int (*batch_init_hook)(usb_transfer_batch_t *);
 };
 /*----------------------------------------------------------------------------*/
Index: uspace/lib/usbhost/src/iface.c
===================================================================
--- uspace/lib/usbhost/src/iface.c	(revision 90dd59dcdd7810ff0b649b59ab64cc30c6b3d0de)
+++ uspace/lib/usbhost/src/iface.c	(revision 23b0fe8e5a14774779ca68b936cc950407e553b8)
@@ -78,15 +78,8 @@
 	}
 
-	/* No private data and no private data_dtor, these should be set by
-	 * batch_init_hook*/
+	/* No private data and no private data dtor, these will be set later */
 	usb_transfer_batch_init(batch, ep, data, NULL, size, setup_data,
 	    setup_size, in, out, arg, fun, NULL, NULL);
-	if (hcd->batch_init_hook) {
-		ret = hcd->batch_init_hook(batch);
-		if (ret != EOK)
-			goto out;
-	} else {
-		usb_log_warning("Missing batch_private_data constructor!\n");
-	}
+
 	if (hcd->schedule) {
 		ret = hcd->schedule(hcd, batch);
@@ -204,6 +197,7 @@
 		return ENOMEM;
 	int ret = EOK;
+
 	if (hcd->ep_add_hook) {
-		ret = hcd->ep_add_hook(ep);
+		ret = hcd->ep_add_hook(hcd, ep);
 	}
 	if (ret != EOK) {
