Index: uspace/drv/bus/usb/ehci/ehci_batch.c
===================================================================
--- uspace/drv/bus/usb/ehci/ehci_batch.c	(revision a752c78c2ca75b7422b28b6d13994d567d4cfdb1)
+++ uspace/drv/bus/usb/ehci/ehci_batch.c	(revision 23e5471a7e669e1c94154d4c5c294d521c8f6623)
@@ -249,5 +249,5 @@
 {
 	assert(ehci_batch);
-//	ed_set_tail_td(ehci_batch->ed, ehci_batch->tds[ehci_batch->td_count]);
+	qh_set_next_td(ehci_batch->qh, ehci_batch->tds[0]);
 }
 
Index: uspace/drv/bus/usb/ehci/hw_struct/queue_head.h
===================================================================
--- uspace/drv/bus/usb/ehci/hw_struct/queue_head.h	(revision a752c78c2ca75b7422b28b6d13994d567d4cfdb1)
+++ uspace/drv/bus/usb/ehci/hw_struct/queue_head.h	(revision 23e5471a7e669e1c94154d4c5c294d521c8f6623)
@@ -41,4 +41,5 @@
 #include "../utils/malloc32.h"
 #include "link_pointer.h"
+#include "transfer_descriptor.h"
 #include "mem_access.h"
 
@@ -190,4 +191,11 @@
 }
 
+static inline void qh_set_next_td(qh_t *qh, td_t *td)
+{
+	assert(qh);
+	assert(td);
+	EHCI_MEM32_WR(qh->next, LINK_POINTER_TD(addr_to_phys(td)));
+}
+
 static inline bool qh_transfer_pending(const qh_t *qh)
 {
Index: uspace/drv/bus/usb/ehci/hw_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/bus/usb/ehci/hw_struct/transfer_descriptor.h	(revision a752c78c2ca75b7422b28b6d13994d567d4cfdb1)
+++ uspace/drv/bus/usb/ehci/hw_struct/transfer_descriptor.h	(revision 23e5471a7e669e1c94154d4c5c294d521c8f6623)
@@ -37,4 +37,5 @@
 #include <sys/types.h>
 #include "link_pointer.h"
+#include "mem_access.h"
 
 /** Transfer descriptor (non-ISO) */
