Index: uspace/drv/uhci-hcd/main.c
===================================================================
--- uspace/drv/uhci-hcd/main.c	(revision d6115e542e27ef824eced9683d1aac8d69815d0d)
+++ uspace/drv/uhci-hcd/main.c	(revision e0df6c2d7a704b8e474264f04947e3eadfc936c2)
@@ -134,5 +134,5 @@
 	 */
 	sleep(5);
-	usb_log_enable(USB_LOG_LEVEL_DEBUG2, NAME);
+	usb_log_enable(USB_LOG_LEVEL_INFO, NAME);
 
 	return driver_main(&uhci_driver);
Index: uspace/drv/uhci-hcd/transfer_list.c
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.c	(revision d6115e542e27ef824eced9683d1aac8d69815d0d)
+++ uspace/drv/uhci-hcd/transfer_list.c	(revision e0df6c2d7a704b8e474264f04947e3eadfc936c2)
@@ -52,4 +52,5 @@
 	queue_head_init(instance->queue_head);
 	list_initialize(&instance->batch_list);
+	fibril_mutex_initialize(&instance->guard);
 	return EOK;
 }
@@ -76,4 +77,6 @@
 	batch->qh->next_queue = instance->queue_head->next_queue;
 
+	fibril_mutex_lock(&instance->guard);
+
 	if (instance->queue_head->element == instance->queue_head->next_queue) {
 		/* there is nothing scheduled */
@@ -82,4 +85,5 @@
 		usb_log_debug2("Added batch(%p) to queue %s first.\n",
 			batch, instance->name);
+		fibril_mutex_unlock(&instance->guard);
 		return;
 	}
@@ -94,4 +98,5 @@
 	usb_log_debug2("Added batch(%p) to queue %s last, first is %p.\n",
 		batch, instance->name, first );
+	fibril_mutex_unlock(&instance->guard);
 }
 /*----------------------------------------------------------------------------*/
@@ -105,5 +110,5 @@
 
 	/* I'm the first one here */
-	if (batch->link.next == &instance->batch_list) {
+	if (batch->link.prev == &instance->batch_list) {
 		usb_log_debug("Removing tracer %p was first, next element %x.\n",
 			batch, batch->qh->next_queue);
@@ -121,4 +126,5 @@
 {
 	assert(instance);
+	fibril_mutex_lock(&instance->guard);
 	link_t *current = instance->batch_list.next;
 	while (current != &instance->batch_list) {
@@ -132,4 +138,5 @@
 		current = next;
 	}
+	fibril_mutex_unlock(&instance->guard);
 }
 /**
Index: uspace/drv/uhci-hcd/transfer_list.h
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.h	(revision d6115e542e27ef824eced9683d1aac8d69815d0d)
+++ uspace/drv/uhci-hcd/transfer_list.h	(revision e0df6c2d7a704b8e474264f04947e3eadfc936c2)
@@ -35,4 +35,6 @@
 #define DRV_UHCI_TRANSFER_LIST_H
 
+#include <fibril_synch.h>
+
 #include "uhci_struct/queue_head.h"
 
@@ -41,4 +43,5 @@
 typedef struct transfer_list
 {
+	fibril_mutex_t guard;
 	queue_head_t *queue_head;
 	uint32_t queue_head_pa;
@@ -51,5 +54,4 @@
 
 void transfer_list_set_next(transfer_list_t *instance, transfer_list_t *next);
-
 
 static inline void transfer_list_fini(transfer_list_t *instance)
