Index: uspace/drv/ohci/endpoint_list.c
===================================================================
--- uspace/drv/ohci/endpoint_list.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/ohci/endpoint_list.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -103,6 +103,5 @@
 		/* There are active EDs, get the last one */
 		hcd_endpoint_t *last = list_get_instance(
-		    instance->endpoint_list.prev, hcd_endpoint_t, link);
-		assert(last);
+		    list_last(&instance->endpoint_list), hcd_endpoint_t, link);
 		last_ed = last->ed;
 	}
@@ -121,5 +120,5 @@
 
 	hcd_endpoint_t *first = list_get_instance(
-	    instance->endpoint_list.next, hcd_endpoint_t, link);
+	    list_first(&instance->endpoint_list), hcd_endpoint_t, link);
 	usb_log_debug("HCD EP(%p) added to list %s, first is %p(%p).\n",
 		hcd_ep, instance->name, first, first->ed);
@@ -153,5 +152,5 @@
 	ed_t *prev_ed;
 	/* Remove from the hardware queue */
-	if (instance->endpoint_list.next == &hcd_ep->link) {
+	if (list_first(&instance->endpoint_list) == &hcd_ep->link) {
 		/* I'm the first one here */
 		prev_ed = instance->list_head;
Index: uspace/drv/ohci/endpoint_list.h
===================================================================
--- uspace/drv/ohci/endpoint_list.h	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/ohci/endpoint_list.h	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -52,5 +52,5 @@
 	const char *name;
 	/** Sw list of all active EDs */
-	link_t endpoint_list;
+	list_t endpoint_list;
 } endpoint_list_t;
 
Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/ohci/hc.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -357,6 +357,6 @@
 		    instance->registers->periodic_current);
 
-		link_t *current = instance->pending_batches.next;
-		while (current != &instance->pending_batches) {
+		link_t *current = instance->pending_batches.head.next;
+		while (current != &instance->pending_batches.head) {
 			link_t *next = current->next;
 			usb_transfer_batch_t *batch =
@@ -367,4 +367,5 @@
 				usb_transfer_batch_finish(batch);
 			}
+
 			current = next;
 		}
Index: uspace/drv/ohci/hc.h
===================================================================
--- uspace/drv/ohci/hc.h	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/ohci/hc.h	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -68,5 +68,5 @@
 	endpoint_list_t lists[4];
 	/** List of active transfers */
-	link_t pending_batches;
+	list_t pending_batches;
 
 	/** Fibril for periodic checks if interrupts can't be used */
Index: uspace/drv/uhci/hc.c
===================================================================
--- uspace/drv/uhci/hc.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/uhci/hc.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -345,5 +345,5 @@
 
 		while (!list_empty(&done)) {
-			link_t *item = done.next;
+			link_t *item = list_first(&done);
 			list_remove(item);
 			usb_transfer_batch_t *batch =
Index: uspace/drv/uhci/transfer_list.c
===================================================================
--- uspace/drv/uhci/transfer_list.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/uhci/transfer_list.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -121,6 +121,6 @@
 	} else {
 		/* There is something scheduled */
-		usb_transfer_batch_t *last =
-		    usb_transfer_batch_from_link(instance->batch_list.prev);
+		usb_transfer_batch_t *last = usb_transfer_batch_from_link(
+		    list_last(&instance->batch_list));
 		last_qh = batch_qh(last);
 	}
@@ -146,10 +146,10 @@
 }
 /*----------------------------------------------------------------------------*/
-/** Add completed bantches to the provided list.
+/** Add completed batches to the provided list.
  *
  * @param[in] instance List to use.
  * @param[in] done list to fill
  */
-void transfer_list_remove_finished(transfer_list_t *instance, link_t *done)
+void transfer_list_remove_finished(transfer_list_t *instance, list_t *done)
 {
 	assert(instance);
@@ -157,6 +157,6 @@
 
 	fibril_mutex_lock(&instance->guard);
-	link_t *current = instance->batch_list.next;
-	while (current != &instance->batch_list) {
+	link_t *current = instance->batch_list.head.next;
+	while (current != &instance->batch_list.head) {
 		link_t * const next = current->next;
 		usb_transfer_batch_t *batch =
@@ -181,5 +181,5 @@
 	fibril_mutex_lock(&instance->guard);
 	while (!list_empty(&instance->batch_list)) {
-		link_t * const current = instance->batch_list.next;
+		link_t * const current = list_first(&instance->batch_list);
 		usb_transfer_batch_t *batch =
 		    usb_transfer_batch_from_link(current);
@@ -212,5 +212,5 @@
 	qh_t *prev_qh = NULL;
 	/* Remove from the hardware queue */
-	if (instance->batch_list.next == &batch->link) {
+	if (list_first(&instance->batch_list) == &batch->link) {
 		/* I'm the first one here */
 		prev_qh = instance->queue_head;
Index: uspace/drv/uhci/transfer_list.h
===================================================================
--- uspace/drv/uhci/transfer_list.h	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/uhci/transfer_list.h	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -51,5 +51,5 @@
 	const char *name;
 	/** List of all batches in this list */
-	link_t batch_list;
+	list_t batch_list;
 } transfer_list_t;
 
@@ -59,5 +59,5 @@
 void transfer_list_add_batch(
     transfer_list_t *instance, usb_transfer_batch_t *batch);
-void transfer_list_remove_finished(transfer_list_t *instance, link_t *done);
+void transfer_list_remove_finished(transfer_list_t *instance, list_t *done);
 void transfer_list_abort_all(transfer_list_t *instance);
 #endif
Index: uspace/drv/usbmid/explore.c
===================================================================
--- uspace/drv/usbmid/explore.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/usbmid/explore.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -54,8 +54,7 @@
  * @return Interface @p interface_no is already present in the list.
  */
-static bool interface_in_list(link_t *list, int interface_no)
+static bool interface_in_list(list_t *list, int interface_no)
 {
-	link_t *l;
-	for (l = list->next; l != list; l = l->next) {
+	list_foreach(*list, l) {
 		usbmid_interface_t *iface
 		    = list_get_instance(l, usbmid_interface_t, link);
@@ -75,5 +74,5 @@
  */
 static void create_interfaces(uint8_t *config_descriptor,
-    size_t config_descriptor_size, link_t *list)
+    size_t config_descriptor_size, list_t *list)
 {
 	usb_dp_parser_data_t data = {
@@ -181,12 +180,10 @@
 
 	/* Create interface children. */
-	link_t interface_list;
+	list_t interface_list;
 	list_initialize(&interface_list);
 	create_interfaces(config_descriptor_raw, config_descriptor_size,
 	    &interface_list);
 
-	link_t *link;
-	for (link = interface_list.next; link != &interface_list;
-	    link = link->next) {
+	list_foreach(interface_list, link) {
 		usbmid_interface_t *iface = list_get_instance(link,
 		    usbmid_interface_t, link);
Index: uspace/drv/vhc/transfer.c
===================================================================
--- uspace/drv/vhc/transfer.c	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/vhc/transfer.c	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -189,6 +189,6 @@
 	assert(!list_empty(&dev->transfer_queue));
 
-	vhc_transfer_t *transfer = list_get_instance(dev->transfer_queue.next,
-	    vhc_transfer_t, link);
+	vhc_transfer_t *transfer = list_get_instance(
+	    list_first(&dev->transfer_queue), vhc_transfer_t, link);
 	list_remove(&transfer->link);
 
Index: uspace/drv/vhc/vhcd.h
===================================================================
--- uspace/drv/vhc/vhcd.h	(revision 497b6f3135cb82d98d8ae1b63a4d9d9182e3f18d)
+++ uspace/drv/vhc/vhcd.h	(revision b72efe87f3e33beaa3b0d0cf7c8b598a58f6a6de)
@@ -52,10 +52,10 @@
 	usb_address_t address;
 	fibril_mutex_t guard;
-	link_t transfer_queue;
+	list_t transfer_queue;
 } vhc_virtdev_t;
 
 typedef struct {
 	uint32_t magic;
-	link_t devices;
+	list_t devices;
 	fibril_mutex_t guard;
 	usb_endpoint_manager_t ep_manager;
