Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision 1a93bb00af7ce2226c00707e4276eb0f46ce41a2)
+++ uspace/drv/uhci-hcd/batch.c	(revision c3ae877e50bebe06b28a4f14a1db4c3e38e097d9)
@@ -168,9 +168,11 @@
 	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
 
+	const bool low_speed = instance->speed == USB_SPEED_LOW;
 	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]);
+	    instance->setup_size, toggle, false, low_speed,
+	    instance->target, USB_PID_SETUP, instance->setup_buffer,
+	    &instance->tds[1]);
 
 	/* data stage */
@@ -182,6 +184,6 @@
 
 		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]);
+		    instance->max_packet_size, toggle++, false, low_speed,
+		    instance->target, USB_PID_OUT, data, &instance->tds[i + 1]);
 	}
 
@@ -189,5 +191,5 @@
 	i = instance->packets - 1;
 	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_IN, NULL, NULL);
+	    0, 1, false, low_speed, instance->target, USB_PID_IN, NULL, NULL);
 
 	instance->tds[i].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG;
@@ -201,8 +203,9 @@
 	assert(instance);
 
+	const bool low_speed = instance->speed == USB_SPEED_LOW;
 	int toggle = 0;
 	/* setup stage */
 	transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT,
-	    instance->setup_size, toggle, false, instance->target,
+	    instance->setup_size, toggle, false, low_speed, instance->target,
 	    USB_PID_SETUP, instance->setup_buffer, &instance->tds[1]);
 
@@ -215,6 +218,6 @@
 
 		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]);
+		    instance->max_packet_size, toggle, false, low_speed,
+				instance->target, USB_PID_IN, data, &instance->tds[i + 1]);
 	}
 
@@ -222,5 +225,5 @@
 	i = instance->packets - 1;
 	transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-	    0, 1, false, instance->target, USB_PID_OUT, NULL, NULL);
+	    0, 1, false, low_speed, instance->target, USB_PID_OUT, NULL, NULL);
 
 	instance->tds[i].status |= TD_STATUS_COMPLETE_INTERRUPT_FLAG;
@@ -234,4 +237,5 @@
 	assert(instance);
 
+	const bool low_speed = instance->speed == USB_SPEED_LOW;
 	int toggle = 1;
 	size_t i = 0;
@@ -244,6 +248,6 @@
 
 		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle, false, instance->target,
-		    USB_PID_IN, data, next);
+		    instance->max_packet_size, toggle, false, low_speed,
+		    instance->target, USB_PID_IN, data, next);
 	}
 
@@ -260,4 +264,5 @@
 	memcpy(instance->transport_buffer, instance->buffer, instance->buffer_size);
 
+	const bool low_speed = instance->speed == USB_SPEED_LOW;
 	int toggle = 1;
 	size_t i = 0;
@@ -270,6 +275,6 @@
 
 		transfer_descriptor_init(&instance->tds[i], DEFAULT_ERROR_COUNT,
-		    instance->max_packet_size, toggle++, false, instance->target,
-		    USB_PID_OUT, data, next);
+		    instance->max_packet_size, toggle++, false, low_speed,
+		    instance->target, USB_PID_OUT, data, next);
 	}
 
@@ -338,53 +343,4 @@
 	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/uhci_struct/transfer_descriptor.c
===================================================================
--- uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c	(revision 1a93bb00af7ce2226c00707e4276eb0f46ce41a2)
+++ uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c	(revision c3ae877e50bebe06b28a4f14a1db4c3e38e097d9)
@@ -39,5 +39,5 @@
 
 void transfer_descriptor_init(transfer_descriptor_t *instance,
-    int error_count, size_t size, bool toggle, bool isochronous,
+    int error_count, size_t size, bool toggle, bool isochronous, bool low_speed,
     usb_target_t target, int pid, void *buffer, transfer_descriptor_t *next)
 {
@@ -50,4 +50,5 @@
 	instance->status = 0
 	  | ((error_count & TD_STATUS_ERROR_COUNT_MASK) << TD_STATUS_ERROR_COUNT_POS)
+		| (low_speed ? TD_STATUS_LOW_SPEED_FLAG : 0)
 	  | TD_STATUS_ERROR_ACTIVE;
 
Index: uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision 1a93bb00af7ce2226c00707e4276eb0f46ce41a2)
+++ uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision c3ae877e50bebe06b28a4f14a1db4c3e38e097d9)
@@ -92,5 +92,5 @@
 
 void transfer_descriptor_init(transfer_descriptor_t *instance,
-    int error_count, size_t size, bool toggle, bool isochronous,
+    int error_count, size_t size, bool toggle, bool isochronous, bool low_speed,
     usb_target_t target, int pid, void *buffer, transfer_descriptor_t * next);
 
