Index: uspace/drv/uhci/callback.c
===================================================================
--- uspace/drv/uhci/callback.c	(revision eb03e92e6918c31a2fa8ded7f2163b3ef73b08b4)
+++ uspace/drv/uhci/callback.c	(revision 987dda8790dfa3d5fb8d4e582a13153820c50f94)
@@ -3,6 +3,4 @@
 
 #include "callback.h"
-
-
 int callback_init(callback_t *instance, device_t *dev,
   void *buffer, size_t size, usbhc_iface_transfer_in_callback_t func_in,
Index: uspace/drv/uhci/callback.h
===================================================================
--- uspace/drv/uhci/callback.h	(revision eb03e92e6918c31a2fa8ded7f2163b3ef73b08b4)
+++ uspace/drv/uhci/callback.h	(revision 987dda8790dfa3d5fb8d4e582a13153820c50f94)
@@ -64,4 +64,16 @@
 	callback_init(instance, dev, buffer, size, func, NULL, arg)
 
+static inline callback_t *callback_get(device_t *dev,
+  void *buffer, size_t size, usbhc_iface_transfer_in_callback_t func_in,
+  usbhc_iface_transfer_out_callback_t func_out, void *arg)
+{
+	callback_t *instance = malloc(sizeof(callback_t));
+	if (callback_init(instance, dev, buffer, size, func_in, func_out, arg)) {
+		free(instance);
+		instance = NULL;
+	}
+	return instance;
+}
+
 static inline void callback_fini(callback_t *instance)
 {
@@ -69,4 +81,10 @@
 	if (instance->new_buffer)
 		trans_free(instance->new_buffer);
+}
+
+static inline void callback_dispose(callback_t *instance)
+{
+	callback_fini(instance);
+	free(instance);
 }
 
