Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision f98b8269484d60177e1e59042e7ea84533bfeb61)
+++ uspace/drv/ohci/hc.c	(revision 6b6e3ed323f6b4cf247e08fc3569d65d36a8c240)
@@ -47,4 +47,5 @@
 static void hc_gain_control(hc_t *instance);
 static void hc_init_hw(hc_t *instance);
+static int hc_init_transfer_lists(hc_t *instance);
 /*----------------------------------------------------------------------------*/
 int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun)
@@ -211,6 +212,7 @@
 	assert((instance->registers->command_status & CS_HCR) == 0);
 	/* hc is now in suspend state */
+	/* init queues */
+	hc_init_transfer_lists(instance);
 	/* TODO: init HCCA block */
-	/* TODO: init queues */
 	/* TODO: enable queues */
 	/* TODO: enable interrupts */
@@ -220,4 +222,44 @@
 	usb_log_info("OHCI HC up and running.\n");
 }
+/*----------------------------------------------------------------------------*/
+int hc_init_transfer_lists(hc_t *instance)
+{
+	assert(instance);
+#define CHECK_RET_CLEAR_RETURN(ret, message...) \
+	if (ret != EOK) { \
+		usb_log_error(message); \
+		transfer_list_fini(&instance->transfers_isochronous); \
+		transfer_list_fini(&instance->transfers_interrupt); \
+		transfer_list_fini(&instance->transfers_control); \
+		transfer_list_fini(&instance->transfers_bulk); \
+		return ret; \
+	} else (void) 0
+
+	int ret;
+	ret = transfer_list_init(&instance->transfers_bulk, "BULK");
+	CHECK_RET_CLEAR_RETURN(ret, "Failed to init BULK list.");
+
+	ret = transfer_list_init(&instance->transfers_control, "CONTROL");
+	CHECK_RET_CLEAR_RETURN(ret, "Failed to init CONTROL list.");
+
+	ret = transfer_list_init(&instance->transfers_interrupt, "INTERRUPT");
+	CHECK_RET_CLEAR_RETURN(ret, "Failed to init INTERRUPT list.");
+
+	transfer_list_set_next(&instance->transfers_interrupt,
+		&instance->transfers_isochronous);
+
+	/* Assign pointers to be used during scheduling */
+	instance->transfers[USB_TRANSFER_INTERRUPT] =
+	  &instance->transfers_interrupt;
+	instance->transfers[USB_TRANSFER_ISOCHRONOUS] =
+	  &instance->transfers_interrupt;
+	instance->transfers[USB_TRANSFER_CONTROL] =
+	  &instance->transfers_control;
+	instance->transfers[USB_TRANSFER_BULK] =
+	  &instance->transfers_bulk;
+
+	return EOK;
+#undef CHECK_RET_CLEAR_RETURN
+}
 /**
  * @}
Index: uspace/drv/ohci/hc.h
===================================================================
--- uspace/drv/ohci/hc.h	(revision f98b8269484d60177e1e59042e7ea84533bfeb61)
+++ uspace/drv/ohci/hc.h	(revision 6b6e3ed323f6b4cf247e08fc3569d65d36a8c240)
@@ -48,4 +48,5 @@
 #include "ohci_regs.h"
 #include "root_hub.h"
+#include "transfer_list.h"
 #include "hw_struct/hcca.h"
 
@@ -54,4 +55,12 @@
 	usb_address_t rh_address;
 	rh_t rh;
+
+	transfer_list_t transfers_isochronous;
+	transfer_list_t transfers_interrupt;
+	transfer_list_t transfers_control;
+	transfer_list_t transfers_bulk;
+
+	transfer_list_t *transfers[4];
+
 	ddf_fun_t *ddf_instance;
 	usb_device_keeper_t manager;
