Index: uspace/lib/usb/include/usb/host/batch.h
===================================================================
--- uspace/lib/usb/include/usb/host/batch.h	(revision c4e3b1f7e7e68b2a0742a03f3db780b17cf27eeb)
+++ uspace/lib/usb/include/usb/host/batch.h	(revision 2cc6e97ca93ca1ba8d706942d928f0859b7d8107)
@@ -58,9 +58,10 @@
 	ddf_fun_t *fun;
 	void *private_data;
+	void (*private_data_dtor)(void *p_data);
 };
 
 void usb_transfer_batch_init(
     usb_transfer_batch_t *instance,
-		endpoint_t *ep,
+    endpoint_t *ep,
     char *buffer,
     char *data_buffer,
@@ -72,16 +73,12 @@
     void *arg,
     ddf_fun_t *fun,
-    void *private_data
+    void *private_data,
+    void (*private_data_dtor)(void *p_data)
 );
 
-static inline usb_transfer_batch_t *usb_transfer_batch_from_link(link_t *l)
-{
-	assert(l);
-	return list_get_instance(l, usb_transfer_batch_t, link);
-}
-
-void usb_transfer_batch_call_in(usb_transfer_batch_t *instance);
-void usb_transfer_batch_call_out(usb_transfer_batch_t *instance);
+void usb_transfer_batch_call_in_and_dispose(usb_transfer_batch_t *instance);
+void usb_transfer_batch_call_out_and_dispose(usb_transfer_batch_t *instance);
 void usb_transfer_batch_finish(usb_transfer_batch_t *instance);
+void usb_transfer_batch_dispose(usb_transfer_batch_t *instance);
 
 static inline void usb_transfer_batch_finish_error(
@@ -93,4 +90,10 @@
 }
 
+static inline usb_transfer_batch_t *usb_transfer_batch_from_link(link_t *l)
+{
+	assert(l);
+	return list_get_instance(l, usb_transfer_batch_t, link);
+}
+
 #endif
 /**
