Index: uspace/drv/bus/usb/xhci/bus.c
===================================================================
--- uspace/drv/bus/usb/xhci/bus.c	(revision 0a5833d7deb1adc704e11ca192de1eb20dfecd6a)
+++ uspace/drv/bus/usb/xhci/bus.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -171,11 +171,11 @@
 
 /* Endpoint ops, optional (have generic fallback) */
-static int endpoint_get_toggle(endpoint_t *ep)
-{
-	// TODO: Implement me!
-	return ENOTSUP;
-}
-
-static void endpoint_set_toggle(endpoint_t *ep, unsigned toggle)
+static bool endpoint_get_toggle(endpoint_t *ep)
+{
+	// TODO: Implement me!
+	return ENOTSUP;
+}
+
+static void endpoint_set_toggle(endpoint_t *ep, bool toggle)
 {
 	// TODO: Implement me!
@@ -227,9 +227,9 @@
 };
 
-int xhci_bus_init(xhci_bus_t *bus, hcd_t *hcd)
-{
-	assert(bus);
-
-	bus_init(&bus->base, hcd);
+int xhci_bus_init(xhci_bus_t *bus)
+{
+	assert(bus);
+
+	bus_init(&bus->base);
 
 	if (!hash_table_create(&bus->endpoints, 0, 0, &endpoint_ht_ops)) {
Index: uspace/drv/bus/usb/xhci/bus.h
===================================================================
--- uspace/drv/bus/usb/xhci/bus.h	(revision 0a5833d7deb1adc704e11ca192de1eb20dfecd6a)
+++ uspace/drv/bus/usb/xhci/bus.h	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -52,8 +52,8 @@
 	 */
 
- 	hash_table_t endpoints;
+	hash_table_t endpoints;
 } xhci_bus_t;
 
-int xhci_bus_init(xhci_bus_t *, hcd_t *);
+int xhci_bus_init(xhci_bus_t *);
 void xhci_bus_fini(xhci_bus_t *);
 
Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision 0a5833d7deb1adc704e11ca192de1eb20dfecd6a)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -216,6 +216,12 @@
 		goto err_cmd;
 
-	return EOK;
-
+	if ((err = xhci_bus_init(&hc->bus)))
+		goto err_rh;
+
+
+	return EOK;
+
+err_rh:
+	xhci_rh_fini(&hc->rh);
 err_cmd:
 	xhci_fini_commands(hc);
@@ -610,4 +616,5 @@
 void hc_fini(xhci_hc_t *hc)
 {
+	xhci_bus_fini(&hc->bus);
 	xhci_trb_ring_fini(&hc->command_ring);
 	xhci_event_ring_fini(&hc->event_ring);
Index: uspace/drv/bus/usb/xhci/main.c
===================================================================
--- uspace/drv/bus/usb/xhci/main.c	(revision 0a5833d7deb1adc704e11ca192de1eb20dfecd6a)
+++ uspace/drv/bus/usb/xhci/main.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -81,7 +81,4 @@
 		goto err;
 
-	if ((err = xhci_bus_init(&hc->bus, hcd)))
-		goto err;
-
 	if ((err = hc_init_memory(hc)))
 		goto err;
@@ -151,7 +148,4 @@
 	hc_fini(hc);
 
-	// FIXME: Probably move init/fini of XHCI bus into HC.
-	xhci_bus_fini(&hc->bus);
-
 	free(hc);
 }
