Index: uspace/drv/uhci/uhci.c
===================================================================
--- uspace/drv/uhci/uhci.c	(revision d5f7a8ab2dc0af707778c71a8dbdd2032a2201ee)
+++ uspace/drv/uhci/uhci.c	(revision 7977fa1fb2de983b0f7a559b69c727b7ec6169b5)
@@ -10,4 +10,6 @@
 
 static int init_tranfer_lists(transfer_list_t list[]);
+
+//static int init_transfer();
 
 int uhci_init(device_t *device, void *regs)
@@ -80,4 +82,5 @@
 	    usb_str_transfer_type(transfer_type),
 	    size);
+
 	if (size >= 1024)
 		return ENOTSUP;
@@ -104,5 +107,12 @@
 	CHECK_RET_FREE_JOB(ret, "Failed to allocate tranfer descriptor.\n");
 
-	transfer_descriptor_init(td, 3, size, false, target, USB_PID_IN);
+	ret = transfer_descriptor_init(td, 3, size, false, target, USB_PID_IN);
+	if (ret != EOK) {
+		uhci_print_error("Failed to initialize transfer descriptor.\n");
+		trans_free(td);
+		trans_free(job);
+		return ret;
+	}
+	td->callback = job;
 
 
Index: uspace/drv/uhci/uhci_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/uhci/uhci_struct/transfer_descriptor.h	(revision d5f7a8ab2dc0af707778c71a8dbdd2032a2201ee)
+++ uspace/drv/uhci/uhci_struct/transfer_descriptor.h	(revision 7977fa1fb2de983b0f7a559b69c727b7ec6169b5)
@@ -38,4 +38,5 @@
 #include <usb/usb.h>
 
+#include "translating_malloc.h"
 #include "callback.h"
 #include "link_pointer.h"
@@ -120,4 +121,12 @@
 }
 
+static inline void transfer_descriptor_append(
+  transfer_descriptor_t *instance, transfer_descriptor_t *item)
+{
+	assert(instance);
+	instance->next_va = item;
+	instance->next = (uintptr_t)addr_to_phys( item ) & LINK_POINTER_ADDRESS_MASK;
+}
+
 #endif
 /**
