Index: uspace/drv/bus/usb/ehci/endpoint_list.c
===================================================================
--- uspace/drv/bus/usb/ehci/endpoint_list.c	(revision c86ca9a21081d254a444d9cc9618a9d121e7b786)
+++ uspace/drv/bus/usb/ehci/endpoint_list.c	(revision 68a61f19ab9f40d735741e804ffe8540380fc88a)
@@ -60,10 +60,12 @@
 		return ENOMEM;
 	}
+	/* Make sure the address translation exists by initializing first */
+	qh_init(instance->list_head, NULL);
+
 	instance->list_head_pa = addr_to_phys(instance->list_head);
+	list_initialize(&instance->endpoint_list);
 	usb_log_debug2("Transfer list %s setup with ED: %p(0x%0" PRIx32 ")).\n",
 	    name, instance->list_head, instance->list_head_pa);
 
-	qh_init(instance->list_head, NULL);
-	list_initialize(&instance->endpoint_list);
 	fibril_mutex_initialize(&instance->guard);
 	return EOK;
@@ -108,5 +110,5 @@
 	}
 	assert(last_qh);
-	/* Keep link */
+	/* Keep link, this might point to the queue QH, or next chained queue */
 	ep->qh->horizontal = last_qh->horizontal;
 	/* Make sure QH update is written to the memory */
@@ -156,7 +158,5 @@
 		qpos = "FIRST";
 	} else {
-		ehci_endpoint_t *prev =
-		    list_get_instance(ep->link.prev, ehci_endpoint_t, link);
-		prev_qh = prev->qh;
+		prev_qh = ehci_endpoint_list_instance(ep->link.prev)->qh;
 		qpos = "NOT FIRST";
 	}
