Index: uspace/drv/uhci-hcd/tracker.c
===================================================================
--- uspace/drv/uhci-hcd/tracker.c	(revision 518372c146e337844170beb46334730c9d560b71)
+++ uspace/drv/uhci-hcd/tracker.c	(revision 53338bda98807fedcb5b4a4ee04c9e6e2ee1813d)
@@ -37,4 +37,5 @@
 
 #include "tracker.h"
+#include "transfer_list.h"
 #include "uhci.h"
 #include "utils/malloc32.h"
@@ -387,4 +388,5 @@
 	assert(instance);
 	tracker_call_in(instance);
+	transfer_list_remove_tracker(instance->scheduled_list, instance);
 	free32(instance->td);
 	free32(instance->packet);
@@ -396,4 +398,6 @@
 	assert(instance);
 	tracker_call_out(instance);
+	assert(instance->scheduled_list);
+	transfer_list_remove_tracker(instance->scheduled_list, instance);
 	free32(instance->td);
 	free32(instance->packet);
Index: uspace/drv/uhci-hcd/tracker.h
===================================================================
--- uspace/drv/uhci-hcd/tracker.h	(revision 518372c146e337844170beb46334730c9d560b71)
+++ uspace/drv/uhci-hcd/tracker.h	(revision 53338bda98807fedcb5b4a4ee04c9e6e2ee1813d)
@@ -47,4 +47,6 @@
 } dev_speed_t;
 
+struct transfer_list;
+
 typedef struct tracker
 {
@@ -68,4 +70,6 @@
 	void (*next_step)(struct tracker*);
 	unsigned toggle:1;
+
+	struct transfer_list *scheduled_list;
 } tracker_t;
 
Index: uspace/drv/uhci-hcd/transfer_list.c
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.c	(revision 518372c146e337844170beb46334730c9d560b71)
+++ uspace/drv/uhci-hcd/transfer_list.c	(revision 53338bda98807fedcb5b4a4ee04c9e6e2ee1813d)
@@ -100,4 +100,17 @@
 	}
 }
+/*----------------------------------------------------------------------------*/
+void transfer_list_remove_tracker(transfer_list_t *instance, tracker_t *tracker)
+{
+	assert(instance);
+	assert(tracker);
+	assert(instance->queue_head);
+	assert(tracker->td);
+
+	uint32_t pa = (uintptr_t)addr_to_phys(tracker->td);
+	if ((instance->queue_head->element & LINK_POINTER_ADDRESS_MASK) == pa) {
+		instance->queue_head->element = tracker->td->next;
+	}
+}
 /**
  * @}
Index: uspace/drv/uhci-hcd/transfer_list.h
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.h	(revision 518372c146e337844170beb46334730c9d560b71)
+++ uspace/drv/uhci-hcd/transfer_list.h	(revision 53338bda98807fedcb5b4a4ee04c9e6e2ee1813d)
@@ -36,4 +36,5 @@
 
 #include "uhci_struct/queue_head.h"
+
 #include "tracker.h"
 
@@ -52,4 +53,5 @@
 void transfer_list_set_next(transfer_list_t *instance, transfer_list_t *next);
 
+
 static inline void transfer_list_fini(transfer_list_t *instance)
 {
@@ -58,6 +60,7 @@
 }
 
+void transfer_list_add_tracker(transfer_list_t *instance, tracker_t *tracker);
 
-void transfer_list_add_tracker(transfer_list_t *instance, tracker_t *tracker);
+void transfer_list_remove_tracker(transfer_list_t *instance, tracker_t *track);
 
 #endif
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision 518372c146e337844170beb46334730c9d560b71)
+++ uspace/drv/uhci-hcd/uhci.c	(revision 53338bda98807fedcb5b4a4ee04c9e6e2ee1813d)
@@ -178,4 +178,6 @@
 	list_append(&tracker->link, &instance->tracker_list);
 
+	tracker->scheduled_list = list;
+
 	usb_log_debug2("Scheduler(%d) releasing tracker list mutex.\n",
 	    fibril_get_id());
