Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision c5b93dc5dcb245abfa09800d3728758f1839755f)
+++ uspace/drv/uhci-hcd/batch.c	(revision eae83aa2645097dce3972a7a166f1393d886a40f)
@@ -47,7 +47,7 @@
 static int batch_schedule(batch_t *instance);
 
-static void batch_control(
-    batch_t *instance, int data_stage, int status_stage);
-static void batch_data(batch_t *instance, int pid);
+static void batch_control(batch_t *instance,
+    usb_packet_id data_stage, usb_packet_id status_stage);
+static void batch_data(batch_t *instance, usb_packet_id pid);
 static void batch_call_in(batch_t *instance);
 static void batch_call_out(batch_t *instance);
@@ -232,5 +232,5 @@
 }
 /*----------------------------------------------------------------------------*/
-static void batch_data(batch_t *instance, int pid)
+static void batch_data(batch_t *instance, usb_packet_id pid)
 {
 	assert(instance);
@@ -266,6 +266,6 @@
 }
 /*----------------------------------------------------------------------------*/
-static void batch_control(
-    batch_t *instance, int data_stage, int status_stage)
+static void batch_control(batch_t *instance,
+   usb_packet_id data_stage, usb_packet_id status_stage)
 {
 	assert(instance);
Index: uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c
===================================================================
--- uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c	(revision c5b93dc5dcb245abfa09800d3728758f1839755f)
+++ uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.c	(revision eae83aa2645097dce3972a7a166f1393d886a40f)
@@ -39,8 +39,9 @@
 
 void td_init(td_t *instance, int err_count, size_t size, bool toggle, bool iso,
-    bool low_speed, usb_target_t target, int pid, void *buffer, td_t *next)
+    bool low_speed, usb_target_t target, usb_packet_id pid, void *buffer, td_t *next)
 {
 	assert(instance);
 	assert(size < 1024);
+	assert((pid == USB_PID_SETUP) || (pid == USB_PID_IN) || (pid == USB_PID_OUT));
 
 	instance->next = 0
@@ -53,4 +54,8 @@
 	    | (iso ? TD_STATUS_ISOCHRONOUS_FLAG : 0)
 	    | TD_STATUS_ERROR_ACTIVE;
+
+	if (pid == USB_PID_IN && !iso) {
+		instance->status |= TD_STATUS_SPD_FLAG;
+	}
 
 	instance->device = 0
Index: uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision c5b93dc5dcb245abfa09800d3728758f1839755f)
+++ uspace/drv/uhci-hcd/uhci_struct/transfer_descriptor.h	(revision eae83aa2645097dce3972a7a166f1393d886a40f)
@@ -92,5 +92,6 @@
 
 void td_init(td_t *instance, int error_count, size_t size, bool toggle, bool iso,
-    bool low_speed, usb_target_t target, int pid, void *buffer, td_t * next);
+    bool low_speed, usb_target_t target, usb_packet_id pid, void *buffer,
+    td_t *next);
 
 int td_status(td_t *instance);
