Index: uspace/drv/uhci-hcd/Makefile
===================================================================
--- uspace/drv/uhci-hcd/Makefile	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/Makefile	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -40,5 +40,5 @@
 	uhci_struct/transfer_descriptor.c \
 	pci.c \
-	tracker.c
+	batch.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
+++ uspace/drv/uhci-hcd/batch.c	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -0,0 +1,379 @@
+/*
+ * Copyright (c) 2011 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/** @addtogroup usb
+ * @{
+ */
+/** @file
+ * @brief UHCI driver
+ */
+#include <errno.h>
+
+#include <usb/debug.h>
+
+#include "batch.h"
+#include "transfer_list.h"
+#include "uhci.h"
+#include "utils/malloc32.h"
+
+#define DEFAULT_ERROR_COUNT 3
+
+static int batch_schedule(batch_t *instance);
+
+static void batch_call_in(batch_t *instance);
+static void batch_call_out(batch_t *instance);
+static void batch_call_in_and_dispose(batch_t *instance);
+static void batch_call_out_and_dispose(batch_t *instance);
+
+
+batch_t * batch_get(device_t *dev, usb_target_t target,
+    usb_transfer_type_t transfer_type, size_t max_packet_size,
+    dev_speed_t speed, char *buffer, size_t size,
+    char* setup_buffer, size_t setup_size,
+    usbhc_iface_transfer_in_callback_t func_in,
+    usbhc_iface_transfer_out_callback_t func_out, void *arg)
+{
+	assert(func_in == NULL || func_out == NULL);
+	assert(func_in != NULL || func_out != NULL);
+
+	batch_t *instance = malloc(sizeof(batch_t));
+	if (instance == NULL) {
+		usb_log_error("Failed to allocate batch instance.\n");
+		return NULL;
+	}
+
+	instance->qh = queue_head_get();
+	if (instance->qh == NULL) {
+		usb_log_error("Failed to allocate queue head.\n");
+		free(instance);
+		return NULL;
+	}
+
+	instance->packets = (size + max_packet_size - 1) / max_packet_size;
+	if (transfer_type == USB_TRANSFER_CONTROL) {
+		instance->packets += 2;
+	}
+
+	instance->tds = malloc32(sizeof(transfer_descriptor_t) * instance->packets);
+	if (instance->tds == NULL) {
+		usb_log_error("Failed to allocate transfer descriptors.\n");
+		queue_head_dispose(instance->qh);
+		free(instance);
+		return NULL;
+	}
+	bzero(instance->tds, sizeof(transfer_descriptor_t) * instance->packets);
+
+	const size_t transport_size = max_packet_size * instance->packets;
+
+	instance->transport_buffer =
+	   (size > 0) ? malloc32(transport_size) : NULL;
+	if ((size > 0) && (instance->transport_buffer == NULL)) {
+		usb_log_error("Failed to allocate device accessible buffer.\n");
+		queue_head_dispose(instance->qh);
+		free32(instance->tds);
+		free(instance);
+		return NULL;
+	}
+
+	instance->setup_buffer = setup_buffer ? malloc32(setup_size) : NULL;
+	if ((setup_size > 0) && (instance->setup_buffer == NULL)) {
+		usb_log_error("Failed to allocate device accessible setup buffer.\n");
+		queue_head_dispose(instance->qh);
+		free32(instance->tds);
+		free32(instance->transport_buffer);
+		free(instance);
+		return NULL;
+	}
+	if (instance->setup_buffer) {
+		memcpy(instance->setup_buffer, setup_buffer, setup_size);
+	}
+
+	instance->max_packet_size = max_packet_size;
+
+	link_initialize(&instance->link);
+
+	instance->target = target;
+	instance->transfer_type = transfer_type;
+
+	if (func_out)
+		instance->callback_out = func_out;
+	if (func_in)
+		instance->callback_in = func_in;
+
+	instance->buffer = buffer;
+	instance->buffer_size = size;
+	instance->setup_size = setup_size;
+	instance->dev = dev;
+	instance->arg = arg;
+	instance->speed = speed;
+
+	queue_head_element_td(instance->qh, addr_to_phys(instance->tds));
+	return instance;
+}
+/*----------------------------------------------------------------------------*/
+bool batch_is_complete(batch_t *instance)
+{
+	assert(instance);
+	usb_log_debug("Checking(%p) %d packet for completion.\n",
+	    instance, instance->packets);
+	/* This is just an ugly trick to support the old API */
+	instance->transfered_size = -instance->setup_size;
+	size_t i = 0;
+	for (;i < instance->packets; ++i) {
+		if (transfer_descriptor_is_active(&instance->tds[i]))
+			return false;
+		instance->error = transfer_descriptor_status(&instance->tds[i]);
+		if (instance->error != EOK) {
+			return true;
+		}
+		instance->transfered_size +=
+		    transfer_descriptor_actual_size(&instance->tds[i]);
+	}
+	return true;
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_write(batch_t *instance)
+{
+	assert(instance);
+
+	/* we are data out, we are supposed to provide data */
+	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
+
+	int toggle = 0;
+	/* setup stage */
+	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
+	    instance->setup_size, toggle, false, instance->target,
+	    USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
+
+	/* data stage */
+	size_t i = 1;
+	for (;i < instance->packets - 1; ++i) {
+		char *data =
+		    instance->transport_buffer + ((i - 1) * instance->max_packet_size);
+		toggle = 1 - toggle;
+
+		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+		    instance->max_packet_size, toggle++, false, instance->target,
+		    USB_PID_OUT, data, &instance->tds[i + 1]);
+	}
+
+	/* status stage */
+	i = instance->packets - 1;
+	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+	    0, 1, false, instance->target, USB_PID_IN, NULL, NULL);
+
+	instance->next_step = batch_call_out_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_read(batch_t *instance)
+{
+	assert(instance);
+
+	int toggle = 0;
+	/* setup stage */
+	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
+	    instance->setup_size, toggle, false, instance->target,
+	    USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
+
+	/* data stage */
+	size_t i = 1;
+	for (;i < instance->packets - 1; ++i) {
+		char *data =
+		    instance->transport_buffer + ((i - 1) * instance->max_packet_size);
+		toggle = 1 - toggle;
+
+		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+		    instance->max_packet_size, toggle, false, instance->target,
+		    USB_PID_IN, data, &instance->tds[i + 1]);
+	}
+
+	/* status stage */
+	i = instance->packets - 1;
+	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+	    0, 1, false, instance->target, USB_PID_OUT, NULL, NULL);
+
+	instance->next_step = batch_call_in_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_interrupt_in(batch_t *instance)
+{
+	assert(instance);
+
+	int toggle = 1;
+	size_t i = 0;
+	for (;i < instance->packets; ++i) {
+		char *data =
+		    instance->transport_buffer + (i  * instance->max_packet_size);
+		transfer_descriptor_t *next = (i + 1) < instance->packets ?
+		    &instance->tds[i + 1] : NULL;
+		toggle = 1 - toggle;
+
+		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+		    instance->max_packet_size, toggle, false, instance->target,
+		    USB_PID_IN, data, next);
+	}
+
+	instance->next_step = batch_call_in_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_interrupt_out(batch_t *instance)
+{
+	assert(instance);
+
+	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
+
+	int toggle = 1;
+	size_t i = 0;
+	for (;i < instance->packets; ++i) {
+		char *data =
+		    instance->transport_buffer + (i  * instance->max_packet_size);
+		transfer_descriptor_t *next = (i + 1) < instance->packets ?
+		    &instance->tds[i + 1] : NULL;
+		toggle = 1 - toggle;
+
+		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
+		    instance->max_packet_size, toggle++, false, instance->target,
+		    USB_PID_OUT, data, next);
+	}
+
+	instance->next_step = batch_call_out_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_call_in(batch_t *instance)
+{
+	assert(instance);
+	assert(instance->callback_in);
+
+	memcpy(instance->buffer, instance->transport_buffer, instance->buffer_size);
+
+	int err = instance->error;
+	usb_log_info("Callback IN(%d): %d, %zu.\n", instance->transfer_type,
+	    err, instance->transfered_size);
+
+	instance->callback_in(instance->dev,
+	    err, instance->transfered_size,
+	    instance->arg);
+}
+/*----------------------------------------------------------------------------*/
+void batch_call_out(batch_t *instance)
+{
+	assert(instance);
+	assert(instance->callback_out);
+
+	int err = instance->error;
+	usb_log_info("Callback OUT(%d): %d.\n", instance->transfer_type, err);
+	instance->callback_out(instance->dev,
+	    err, instance->arg);
+}
+/*----------------------------------------------------------------------------*/
+void batch_call_in_and_dispose(batch_t *instance)
+{
+	assert(instance);
+	batch_call_in(instance);
+	usb_log_debug("Disposing batch: %p.\n", instance);
+	free32(instance->tds);
+	free32(instance->qh);
+	free32(instance->setup_buffer);
+	free32(instance->transport_buffer);
+	free(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_call_out_and_dispose(batch_t *instance)
+{
+	assert(instance);
+	batch_call_out(instance);
+	usb_log_debug("Disposing batch: %p.\n", instance);
+	free32(instance->tds);
+	free32(instance->qh);
+	free32(instance->setup_buffer);
+	free32(instance->transport_buffer);
+	free(instance);
+}
+/*----------------------------------------------------------------------------*/
+int batch_schedule(batch_t *instance)
+{
+	assert(instance);
+	uhci_t *hc = dev_to_uhci(instance->dev);
+	assert(hc);
+	return uhci_schedule(hc, instance);
+}
+/*----------------------------------------------------------------------------*/
+/* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */
+void batch_control_setup_old(batch_t *instance)
+{
+	assert(instance);
+	instance->packets = 1;
+
+	/* setup stage */
+	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
+	    instance->setup_size, 0, false, instance->target,
+	    USB_PID_SETUP, instance->setup_buffer, NULL);
+
+	instance->next_step = batch_call_out_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_write_data_old(batch_t *instance)
+{
+	assert(instance);
+	instance->packets -= 2;
+	batch_interrupt_out(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_read_data_old(batch_t *instance)
+{
+	assert(instance);
+	instance->packets -= 2;
+	batch_interrupt_in(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_write_status_old(batch_t *instance)
+{
+	assert(instance);
+	instance->packets = 1;
+	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
+	    0, 1, false, instance->target, USB_PID_IN, NULL, NULL);
+	instance->next_step = batch_call_in_and_dispose;
+	batch_schedule(instance);
+}
+/*----------------------------------------------------------------------------*/
+void batch_control_read_status_old(batch_t *instance)
+{
+	assert(instance);
+	instance->packets = 1;
+	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
+	    0, 1, false, instance->target, USB_PID_OUT, NULL, NULL);
+	instance->next_step = batch_call_out_and_dispose;
+	batch_schedule(instance);
+}
+/**
+ * @}
+ */
Index: uspace/drv/uhci-hcd/batch.h
===================================================================
--- uspace/drv/uhci-hcd/batch.h	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
+++ uspace/drv/uhci-hcd/batch.h	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2011 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/** @addtogroup usb
+ * @{
+ */
+/** @file
+ * @brief UHCI driver
+ */
+#ifndef DRV_UHCI_BATCH_H
+#define DRV_UHCI_BATCH_H
+
+#include <adt/list.h>
+
+#include <usbhc_iface.h>
+#include <usb/usb.h>
+
+#include "uhci_struct/transfer_descriptor.h"
+#include "uhci_struct/queue_head.h"
+
+typedef enum {
+	LOW_SPEED,
+	FULL_SPEED,
+} dev_speed_t;
+
+typedef struct batch
+{
+	link_t link;
+	dev_speed_t speed;
+	usb_target_t target;
+	usb_transfer_type_t transfer_type;
+	union {
+		usbhc_iface_transfer_in_callback_t callback_in;
+		usbhc_iface_transfer_out_callback_t callback_out;
+	};
+	void *arg;
+	char *transport_buffer;
+	char *setup_buffer;
+	size_t setup_size;
+	char *buffer;
+	size_t buffer_size;
+	size_t max_packet_size;
+	size_t packets;
+	size_t transfered_size;
+	int error;
+	device_t *dev;
+	queue_head_t *qh;
+	transfer_descriptor_t *tds;
+	void (*next_step)(struct batch*);
+} batch_t;
+
+batch_t * batch_get(device_t *dev, usb_target_t target,
+    usb_transfer_type_t transfer_type, size_t max_packet_size,
+    dev_speed_t speed, char *buffer, size_t size,
+		char *setup_buffer, size_t setup_size,
+    usbhc_iface_transfer_in_callback_t func_in,
+    usbhc_iface_transfer_out_callback_t func_out, void *arg);
+
+bool batch_is_complete(batch_t *instance);
+
+void batch_control_write(batch_t *instance);
+
+void batch_control_read(batch_t *instance);
+
+void batch_interrupt_in(batch_t *instance);
+
+void batch_interrupt_out(batch_t *instance);
+
+/* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */
+void batch_control_setup_old(batch_t *instance);
+
+void batch_control_write_data_old(batch_t *instance);
+
+void batch_control_read_data_old(batch_t *instance);
+
+void batch_control_write_status_old(batch_t *instance);
+
+void batch_control_read_status_old(batch_t *instance);
+#endif
+/**
+ * @}
+ */
Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/iface.c	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -109,9 +109,9 @@
 	dev_speed_t speed = FULL_SPEED;
 
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_INTERRUPT,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_INTERRUPT,
 	    max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_interrupt_out(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_interrupt_out(batch);
 	return EOK;
 }
@@ -124,9 +124,9 @@
 	dev_speed_t speed = FULL_SPEED;
 
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_INTERRUPT,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_INTERRUPT,
 	    max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_interrupt_in(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_interrupt_in(batch);
 	return EOK;
 }
@@ -139,10 +139,10 @@
 	dev_speed_t speed = FULL_SPEED;
 
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, data, size, setup_data, setup_size,
 	    NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_write(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_write(batch);
 	return EOK;
 }
@@ -155,10 +155,10 @@
 	dev_speed_t speed = FULL_SPEED;
 
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, data, size, setup_data, setup_size, callback,
 	    NULL, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_read(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_read(batch);
 	return EOK;
 }
@@ -172,9 +172,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_setup_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_setup_old(batch);
 	return EOK;
 }
@@ -188,9 +188,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_write_data_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_write_data_old(batch);
 	return EOK;
 }
@@ -203,9 +203,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, NULL, 0, NULL, 0, callback, NULL, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_write_status_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_write_status_old(batch);
 	return EOK;
 }
@@ -219,9 +219,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_setup_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_setup_old(batch);
 	return EOK;
 }
@@ -235,9 +235,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_read_data_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_read_data_old(batch);
 	return EOK;
 }
@@ -250,9 +250,9 @@
 
 	usb_log_warning("Using deprecated API %s.\n", __FUNCTION__);
-	tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,
+	batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, NULL, 0, NULL, 0, NULL, callback, arg);
-	if (!tracker)
-		return ENOMEM;
-	tracker_control_read_status_old(tracker);
+	if (!batch)
+		return ENOMEM;
+	batch_control_read_status_old(batch);
 	return EOK;
 }
Index: pace/drv/uhci-hcd/tracker.c
===================================================================
--- uspace/drv/uhci-hcd/tracker.c	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ 	(revision )
@@ -1,379 +1,0 @@
-/*
- * Copyright (c) 2011 Jan Vesely
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/** @addtogroup usb
- * @{
- */
-/** @file
- * @brief UHCI driver
- */
-#include <errno.h>
-
-#include <usb/debug.h>
-
-#include "tracker.h"
-#include "transfer_list.h"
-#include "uhci.h"
-#include "utils/malloc32.h"
-
-#define DEFAULT_ERROR_COUNT 3
-
-static int tracker_schedule(tracker_t *instance);
-
-static void tracker_call_in(tracker_t *instance);
-static void tracker_call_out(tracker_t *instance);
-static void tracker_call_in_and_dispose(tracker_t *instance);
-static void tracker_call_out_and_dispose(tracker_t *instance);
-
-
-tracker_t * tracker_get(device_t *dev, usb_target_t target,
-    usb_transfer_type_t transfer_type, size_t max_packet_size,
-    dev_speed_t speed, char *buffer, size_t size,
-    char* setup_buffer, size_t setup_size,
-    usbhc_iface_transfer_in_callback_t func_in,
-    usbhc_iface_transfer_out_callback_t func_out, void *arg)
-{
-	assert(func_in == NULL || func_out == NULL);
-	assert(func_in != NULL || func_out != NULL);
-
-	tracker_t *instance = malloc(sizeof(tracker_t));
-	if (instance == NULL) {
-		usb_log_error("Failed to allocate tracker instance.\n");
-		return NULL;
-	}
-
-	instance->qh = queue_head_get();
-	if (instance->qh == NULL) {
-		usb_log_error("Failed to allocate queue head.\n");
-		free(instance);
-		return NULL;
-	}
-
-	instance->packets = (size + max_packet_size - 1) / max_packet_size;
-	if (transfer_type == USB_TRANSFER_CONTROL) {
-		instance->packets += 2;
-	}
-
-	instance->tds = malloc32(sizeof(transfer_descriptor_t) * instance->packets);
-	if (instance->tds == NULL) {
-		usb_log_error("Failed to allocate transfer descriptors.\n");
-		queue_head_dispose(instance->qh);
-		free(instance);
-		return NULL;
-	}
-	bzero(instance->tds, sizeof(transfer_descriptor_t) * instance->packets);
-
-	const size_t transport_size = max_packet_size * instance->packets;
-
-	instance->transport_buffer =
-	   (size > 0) ? malloc32(transport_size) : NULL;
-	if ((size > 0) && (instance->transport_buffer == NULL)) {
-		usb_log_error("Failed to allocate device accessible buffer.\n");
-		queue_head_dispose(instance->qh);
-		free32(instance->tds);
-		free(instance);
-		return NULL;
-	}
-
-	instance->setup_buffer = setup_buffer ? malloc32(setup_size) : NULL;
-	if ((setup_size > 0) && (instance->setup_buffer == NULL)) {
-		usb_log_error("Failed to allocate device accessible setup buffer.\n");
-		queue_head_dispose(instance->qh);
-		free32(instance->tds);
-		free32(instance->transport_buffer);
-		free(instance);
-		return NULL;
-	}
-	if (instance->setup_buffer) {
-		memcpy(instance->setup_buffer, setup_buffer, setup_size);
-	}
-
-	instance->max_packet_size = max_packet_size;
-
-	link_initialize(&instance->link);
-
-	instance->target = target;
-	instance->transfer_type = transfer_type;
-
-	if (func_out)
-		instance->callback_out = func_out;
-	if (func_in)
-		instance->callback_in = func_in;
-
-	instance->buffer = buffer;
-	instance->buffer_size = size;
-	instance->setup_size = setup_size;
-	instance->dev = dev;
-	instance->arg = arg;
-	instance->speed = speed;
-
-	queue_head_element_td(instance->qh, addr_to_phys(instance->tds));
-	return instance;
-}
-/*----------------------------------------------------------------------------*/
-bool tracker_is_complete(tracker_t *instance)
-{
-	assert(instance);
-	usb_log_debug("Checking(%p) %d packet for completion.\n",
-	    instance, instance->packets);
-	/* This is just an ugly trick to support the old API */
-	instance->transfered_size = -instance->setup_size;
-	size_t i = 0;
-	for (;i < instance->packets; ++i) {
-		if (transfer_descriptor_is_active(&instance->tds[i]))
-			return false;
-		instance->error = transfer_descriptor_status(&instance->tds[i]);
-		if (instance->error != EOK) {
-			return true;
-		}
-		instance->transfered_size +=
-		    transfer_descriptor_actual_size(&instance->tds[i]);
-	}
-	return true;
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_write(tracker_t *instance)
-{
-	assert(instance);
-
-	/* we are data out, we are supposed to provide data */
-	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
-
-	int toggle = 0;
-	/* setup stage */
-	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    instance->setup_size, toggle, false, instance->target,
-	    USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
-
-	/* data stage */
-	size_t i = 1;
-	for (;i < instance->packets - 1; ++i) {
-		char *data =
-		    instance->transport_buffer + ((i - 1) * instance->max_packet_size);
-		toggle = 1 - toggle;
-
-		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle++, false, instance->target,
-		    USB_PID_OUT, data, &instance->tds[i + 1]);
-	}
-
-	/* status stage */
-	i = instance->packets - 1;
-	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_IN, NULL, NULL);
-
-	instance->next_step = tracker_call_out_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_read(tracker_t *instance)
-{
-	assert(instance);
-
-	int toggle = 0;
-	/* setup stage */
-	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    instance->setup_size, toggle, false, instance->target,
-	    USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
-
-	/* data stage */
-	size_t i = 1;
-	for (;i < instance->packets - 1; ++i) {
-		char *data =
-		    instance->transport_buffer + ((i - 1) * instance->max_packet_size);
-		toggle = 1 - toggle;
-
-		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle, false, instance->target,
-		    USB_PID_IN, data, &instance->tds[i + 1]);
-	}
-
-	/* status stage */
-	i = instance->packets - 1;
-	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_OUT, NULL, NULL);
-
-	instance->next_step = tracker_call_in_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_interrupt_in(tracker_t *instance)
-{
-	assert(instance);
-
-	int toggle = 1;
-	size_t i = 0;
-	for (;i < instance->packets; ++i) {
-		char *data =
-		    instance->transport_buffer + (i  * instance->max_packet_size);
-		transfer_descriptor_t *next = (i + 1) < instance->packets ?
-		    &instance->tds[i + 1] : NULL;
-		toggle = 1 - toggle;
-
-		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle, false, instance->target,
-		    USB_PID_IN, data, next);
-	}
-
-	instance->next_step = tracker_call_in_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_interrupt_out(tracker_t *instance)
-{
-	assert(instance);
-
-	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
-
-	int toggle = 1;
-	size_t i = 0;
-	for (;i < instance->packets; ++i) {
-		char *data =
-		    instance->transport_buffer + (i  * instance->max_packet_size);
-		transfer_descriptor_t *next = (i + 1) < instance->packets ?
-		    &instance->tds[i + 1] : NULL;
-		toggle = 1 - toggle;
-
-		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle++, false, instance->target,
-		    USB_PID_OUT, data, next);
-	}
-
-	instance->next_step = tracker_call_out_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_call_in(tracker_t *instance)
-{
-	assert(instance);
-	assert(instance->callback_in);
-
-	memcpy(instance->buffer, instance->transport_buffer, instance->buffer_size);
-
-	int err = instance->error;
-	usb_log_info("Callback IN(%d): %d, %zu.\n", instance->transfer_type,
-	    err, instance->transfered_size);
-
-	instance->callback_in(instance->dev,
-	    err, instance->transfered_size,
-	    instance->arg);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_call_out(tracker_t *instance)
-{
-	assert(instance);
-	assert(instance->callback_out);
-
-	int err = instance->error;
-	usb_log_info("Callback OUT(%d): %d.\n", instance->transfer_type, err);
-	instance->callback_out(instance->dev,
-	    err, instance->arg);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_call_in_and_dispose(tracker_t *instance)
-{
-	assert(instance);
-	tracker_call_in(instance);
-	usb_log_debug("Disposing tracker: %p.\n", instance);
-	free32(instance->tds);
-	free32(instance->qh);
-	free32(instance->setup_buffer);
-	free32(instance->transport_buffer);
-	free(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_call_out_and_dispose(tracker_t *instance)
-{
-	assert(instance);
-	tracker_call_out(instance);
-	usb_log_debug("Disposing tracker: %p.\n", instance);
-	free32(instance->tds);
-	free32(instance->qh);
-	free32(instance->setup_buffer);
-	free32(instance->transport_buffer);
-	free(instance);
-}
-/*----------------------------------------------------------------------------*/
-int tracker_schedule(tracker_t *instance)
-{
-	assert(instance);
-	uhci_t *hc = dev_to_uhci(instance->dev);
-	assert(hc);
-	return uhci_schedule(hc, instance);
-}
-/*----------------------------------------------------------------------------*/
-/* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */
-void tracker_control_setup_old(tracker_t *instance)
-{
-	assert(instance);
-	instance->packets = 1;
-
-	/* setup stage */
-	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    instance->setup_size, 0, false, instance->target,
-	    USB_PID_SETUP, instance->setup_buffer, NULL);
-
-	instance->next_step = tracker_call_out_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_write_data_old(tracker_t *instance)
-{
-	assert(instance);
-	instance->packets -= 2;
-	tracker_interrupt_out(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_read_data_old(tracker_t *instance)
-{
-	assert(instance);
-	instance->packets -= 2;
-	tracker_interrupt_in(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_write_status_old(tracker_t *instance)
-{
-	assert(instance);
-	instance->packets = 1;
-	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_IN, NULL, NULL);
-	instance->next_step = tracker_call_in_and_dispose;
-	tracker_schedule(instance);
-}
-/*----------------------------------------------------------------------------*/
-void tracker_control_read_status_old(tracker_t *instance)
-{
-	assert(instance);
-	instance->packets = 1;
-	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_OUT, NULL, NULL);
-	instance->next_step = tracker_call_out_and_dispose;
-	tracker_schedule(instance);
-}
-/**
- * @}
- */
Index: pace/drv/uhci-hcd/tracker.h
===================================================================
--- uspace/drv/uhci-hcd/tracker.h	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/*
- * Copyright (c) 2011 Jan Vesely
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/** @addtogroup usb
- * @{
- */
-/** @file
- * @brief UHCI driver
- */
-#ifndef DRV_UHCI_TRACKER_H
-#define DRV_UHCI_TRACKER_H
-
-#include <adt/list.h>
-
-#include <usbhc_iface.h>
-#include <usb/usb.h>
-
-#include "uhci_struct/transfer_descriptor.h"
-#include "uhci_struct/queue_head.h"
-
-typedef enum {
-	LOW_SPEED,
-	FULL_SPEED,
-} dev_speed_t;
-
-typedef struct tracker
-{
-	link_t link;
-	dev_speed_t speed;
-	usb_target_t target;
-	usb_transfer_type_t transfer_type;
-	union {
-		usbhc_iface_transfer_in_callback_t callback_in;
-		usbhc_iface_transfer_out_callback_t callback_out;
-	};
-	void *arg;
-	char *transport_buffer;
-	char *setup_buffer;
-	size_t setup_size;
-	char *buffer;
-	size_t buffer_size;
-	size_t max_packet_size;
-	size_t packets;
-	size_t transfered_size;
-	int error;
-	device_t *dev;
-	queue_head_t *qh;
-	transfer_descriptor_t *tds;
-	void (*next_step)(struct tracker*);
-} tracker_t;
-
-tracker_t * tracker_get(device_t *dev, usb_target_t target,
-    usb_transfer_type_t transfer_type, size_t max_packet_size,
-    dev_speed_t speed, char *buffer, size_t size,
-		char *setup_buffer, size_t setup_size,
-    usbhc_iface_transfer_in_callback_t func_in,
-    usbhc_iface_transfer_out_callback_t func_out, void *arg);
-
-bool tracker_is_complete(tracker_t *instance);
-
-void tracker_control_write(tracker_t *instance);
-
-void tracker_control_read(tracker_t *instance);
-
-void tracker_interrupt_in(tracker_t *instance);
-
-void tracker_interrupt_out(tracker_t *instance);
-
-/* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */
-void tracker_control_setup_old(tracker_t *instance);
-
-void tracker_control_write_data_old(tracker_t *instance);
-
-void tracker_control_read_data_old(tracker_t *instance);
-
-void tracker_control_write_status_old(tracker_t *instance);
-
-void tracker_control_read_status_old(tracker_t *instance);
-#endif
-/**
- * @}
- */
Index: uspace/drv/uhci-hcd/transfer_list.c
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.c	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/transfer_list.c	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -51,5 +51,5 @@
 
 	queue_head_init(instance->queue_head);
-	list_initialize(&instance->tracker_list);
+	list_initialize(&instance->batch_list);
 	return EOK;
 }
@@ -64,10 +64,10 @@
 }
 /*----------------------------------------------------------------------------*/
-void transfer_list_add_tracker(transfer_list_t *instance, tracker_t *tracker)
+void transfer_list_add_batch(transfer_list_t *instance, batch_t *batch)
 {
 	assert(instance);
-	assert(tracker);
+	assert(batch);
 
-	uint32_t pa = (uintptr_t)addr_to_phys(tracker->qh);
+	uint32_t pa = (uintptr_t)addr_to_phys(batch->qh);
 	assert((pa & LINK_POINTER_ADDRESS_MASK) == pa);
 	pa |= LINK_POINTER_QUEUE_HEAD_FLAG;
@@ -76,42 +76,42 @@
 	if ((instance->queue_head->element & LINK_POINTER_TERMINATE_FLAG) != 0) {
 		/* there is nothing scheduled */
-		list_append(&tracker->link, &instance->tracker_list);
+		list_append(&batch->link, &instance->batch_list);
 		instance->queue_head->element = pa;
-		usb_log_debug2("Added tracker(%p) to queue %s first.\n",
-			tracker, instance->name);
+		usb_log_debug2("Added batch(%p) to queue %s first.\n",
+			batch, instance->name);
 		return;
 	}
 	/* now we can be sure that there is someting scheduled */
-	assert(!list_empty(&instance->tracker_list));
-	tracker_t *first = list_get_instance(
-	          instance->tracker_list.next, tracker_t, link);
-	tracker_t *last = list_get_instance(
-	    instance->tracker_list.prev, tracker_t, link);
+	assert(!list_empty(&instance->batch_list));
+	batch_t *first = list_get_instance(
+	          instance->batch_list.next, batch_t, link);
+	batch_t *last = list_get_instance(
+	    instance->batch_list.prev, batch_t, link);
 	queue_head_append_qh(last->qh, pa);
-	list_append(&tracker->link, &instance->tracker_list);
-	usb_log_debug2("Added tracker(%p) to queue %s last, first is %p.\n",
-		tracker, instance->name, first );
+	list_append(&batch->link, &instance->batch_list);
+	usb_log_debug2("Added batch(%p) to queue %s last, first is %p.\n",
+		batch, instance->name, first );
 }
 /*----------------------------------------------------------------------------*/
-static void transfer_list_remove_tracker(
-    transfer_list_t *instance, tracker_t *tracker)
+static void transfer_list_remove_batch(
+    transfer_list_t *instance, batch_t *batch)
 {
 	assert(instance);
-	assert(tracker);
+	assert(batch);
 	assert(instance->queue_head);
-	assert(tracker->qh);
+	assert(batch->qh);
 
 	/* I'm the first one here */
-	if (tracker->link.next == &instance->tracker_list) {
+	if (batch->link.next == &instance->batch_list) {
 		usb_log_debug("Removing tracer %p was first, next element %x.\n",
-			tracker, tracker->qh->next_queue);
-		instance->queue_head->element = tracker->qh->next_queue;
+			batch, batch->qh->next_queue);
+		instance->queue_head->element = batch->qh->next_queue;
 	} else {
 		usb_log_debug("Removing tracer %p was NOT first, next element %x.\n",
-			tracker, tracker->qh->next_queue);
-		tracker_t *prev = list_get_instance(tracker->link.prev, tracker_t, link);
-		prev->qh->next_queue = tracker->qh->next_queue;
+			batch, batch->qh->next_queue);
+		batch_t *prev = list_get_instance(batch->link.prev, batch_t, link);
+		prev->qh->next_queue = batch->qh->next_queue;
 	}
-	list_remove(&tracker->link);
+	list_remove(&batch->link);
 }
 /*----------------------------------------------------------------------------*/
@@ -119,12 +119,12 @@
 {
 	assert(instance);
-	link_t *current = instance->tracker_list.next;
-	while (current != &instance->tracker_list) {
+	link_t *current = instance->batch_list.next;
+	while (current != &instance->batch_list) {
 		link_t *next = current->next;
-		tracker_t *tracker = list_get_instance(current, tracker_t, link);
+		batch_t *batch = list_get_instance(current, batch_t, link);
 
-		if (tracker_is_complete(tracker)) {
-			transfer_list_remove_tracker(instance, tracker);
-			tracker->next_step(tracker);
+		if (batch_is_complete(batch)) {
+			transfer_list_remove_batch(instance, batch);
+			batch->next_step(batch);
 		}
 		current = next;
Index: uspace/drv/uhci-hcd/transfer_list.h
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.h	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/transfer_list.h	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -37,5 +37,5 @@
 #include "uhci_struct/queue_head.h"
 
-#include "tracker.h"
+#include "batch.h"
 
 typedef struct transfer_list
@@ -45,5 +45,5 @@
 	struct transfer_list *next;
 	const char *name;
-	link_t tracker_list;
+	link_t batch_list;
 } transfer_list_t;
 
@@ -60,5 +60,5 @@
 void transfer_list_check(transfer_list_t *instance);
 
-void transfer_list_add_tracker(transfer_list_t *instance, tracker_t *tracker);
+void transfer_list_add_batch(transfer_list_t *instance, batch_t *batch);
 #endif
 /**
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/uhci.c	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -89,6 +89,6 @@
 	pio_write_32(&instance->registers->flbaseadd, (uint32_t)pa);
 
-	list_initialize(&instance->tracker_list);
-	fibril_mutex_initialize(&instance->tracker_list_mutex);
+	list_initialize(&instance->batch_list);
+	fibril_mutex_initialize(&instance->batch_list_mutex);
 
 	instance->cleaner = fibril_create(uhci_clean_finished, instance);
@@ -152,14 +152,14 @@
 }
 /*----------------------------------------------------------------------------*/
-int uhci_schedule(uhci_t *instance, tracker_t *tracker)
-{
-	assert(instance);
-	assert(tracker);
-	const int low_speed = (tracker->speed == LOW_SPEED);
+int uhci_schedule(uhci_t *instance, batch_t *batch)
+{
+	assert(instance);
+	assert(batch);
+	const int low_speed = (batch->speed == LOW_SPEED);
 	if (!allowed_usb_packet(
-	    low_speed, tracker->transfer_type, tracker->max_packet_size)) {
+	    low_speed, batch->transfer_type, batch->max_packet_size)) {
 		usb_log_warning("Invalid USB packet specified %s SPEED %d %zu.\n",
-			  low_speed ? "LOW" : "FULL" , tracker->transfer_type,
-		    tracker->max_packet_size);
+			  low_speed ? "LOW" : "FULL" , batch->transfer_type,
+		    batch->max_packet_size);
 		return ENOTSUP;
 	}
@@ -167,7 +167,7 @@
 
 	transfer_list_t *list =
-	    instance->transfers[low_speed][tracker->transfer_type];
+	    instance->transfers[low_speed][batch->transfer_type];
 	assert(list);
-	transfer_list_add_tracker(list, tracker);
+	transfer_list_add_batch(list, batch);
 
 	return EOK;
Index: uspace/drv/uhci-hcd/uhci.h
===================================================================
--- uspace/drv/uhci-hcd/uhci.h	(revision 7dd3318d27ef639ceb71f338262b6270c0fd4459)
+++ uspace/drv/uhci-hcd/uhci.h	(revision 83c439ccd5bc176ae6ed6a165dcba2d795f3826d)
@@ -44,5 +44,5 @@
 
 #include "transfer_list.h"
-#include "tracker.h"
+#include "batch.h"
 
 typedef struct uhci_regs {
@@ -81,6 +81,6 @@
 	link_pointer_t *frame_list;
 
-	link_t tracker_list;
-	fibril_mutex_t tracker_list_mutex;
+	link_t batch_list;
+	fibril_mutex_t batch_list_mutex;
 
 	transfer_list_t transfers_bulk_full;
@@ -113,5 +113,5 @@
   void *arg );
 
-int uhci_schedule(uhci_t *instance, tracker_t *tracker);
+int uhci_schedule(uhci_t *instance, batch_t *batch);
 
 static inline uhci_t * dev_to_uhci(device_t *dev)
