Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision 3cc5ccda9b784d3ca357dc5ba7ce9faaba72a3ba)
+++ uspace/drv/uhci-hcd/iface.c	(revision 61bb85dd4ff71b2ca717857ec4fdcc77e375b007)
@@ -113,5 +113,5 @@
 	if (!tracker)
 		return ENOMEM;
-	tracker_control_read_data_old(tracker);
+	tracker_interrupt_out(tracker);
 	return EOK;
 }
@@ -121,5 +121,5 @@
     usbhc_iface_transfer_in_callback_t callback, void *arg)
 {
-	size_t max_packet_size = 8;
+	size_t max_packet_size = 4;
 	dev_speed_t speed = FULL_SPEED;
 
@@ -128,5 +128,5 @@
 	if (!tracker)
 		return ENOMEM;
-	tracker_control_read_data_old(tracker);
+	tracker_interrupt_in(tracker);
 	return EOK;
 }
Index: uspace/drv/uhci-hcd/tracker.c
===================================================================
--- uspace/drv/uhci-hcd/tracker.c	(revision 3cc5ccda9b784d3ca357dc5ba7ce9faaba72a3ba)
+++ uspace/drv/uhci-hcd/tracker.c	(revision 61bb85dd4ff71b2ca717857ec4fdcc77e375b007)
@@ -286,4 +286,5 @@
 	}
 
+	assert(instance->packet_size <= instance->max_packet_size);
 	if (instance->packet_size) {
 		/* we are data in, we want data from our device. if there is data */
@@ -309,4 +310,6 @@
 		/* that's all, end coomunication */
 		instance->next_step = tracker_call_in_and_dispose;
+	} else {
+		instance->next_step = tracker_interrupt_in;
 	}
 }
@@ -323,5 +326,5 @@
 	}
 
-	/* we are data out, we down't want data from our device */
+	/* we are data out, we don't want data from our device */
 	instance->buffer_offset += instance->packet_size;
 
@@ -343,4 +346,6 @@
 		/* that's all, end coomunication */
 		instance->next_step = tracker_call_out_and_dispose;
+	} else {
+		instance->next_step = tracker_interrupt_out;
 	}
 }
@@ -356,6 +361,6 @@
 		memcpy(instance->buffer + instance->buffer_offset, instance->packet,
 		    instance->packet_size);
-	}
-	instance->buffer_offset += instance->packet_size;
+		instance->buffer_offset += instance->packet_size;
+	}
 	usb_log_debug("Callback IN(%d): %d, %zu.\n", instance->transfer_type,
 	    err, instance->buffer_offset);
