Index: uspace/lib/usbhost/include/usb/host/bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/bus.h	(revision fc0271a550440de57d1676cc1511bf5eedae0d8f)
+++ uspace/lib/usbhost/include/usb/host/bus.h	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -68,12 +68,10 @@
 	/* Endpoint ops, optional (have generic fallback) */
 	void (*destroy_endpoint)(endpoint_t *);
-	int (*endpoint_get_toggle)(endpoint_t *);
-	void (*endpoint_set_toggle)(endpoint_t *, unsigned);
+	bool (*endpoint_get_toggle)(endpoint_t *);
+	void (*endpoint_set_toggle)(endpoint_t *, bool);
 } bus_ops_t;
 
 /** Endpoint management structure */
 typedef struct bus {
-	hcd_t *hcd;
-
 	/* Synchronization of ops */
 	fibril_mutex_t guard;
@@ -85,5 +83,5 @@
 } bus_t;
 
-void bus_init(bus_t *, hcd_t *hcd);
+void bus_init(bus_t *);
 
 endpoint_t *bus_create_endpoint(bus_t *);
Index: uspace/lib/usbhost/include/usb/host/usb2_bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb2_bus.h	(revision fc0271a550440de57d1676cc1511bf5eedae0d8f)
+++ uspace/lib/usbhost/include/usb/host/usb2_bus.h	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -65,5 +65,5 @@
 } usb2_bus_t;
 
-extern int usb2_bus_init(usb2_bus_t *, hcd_t *, size_t, count_bw_func_t);
+extern int usb2_bus_init(usb2_bus_t *, size_t, count_bw_func_t);
 
 #endif
Index: uspace/lib/usbhost/src/bus.c
===================================================================
--- uspace/lib/usbhost/src/bus.c	(revision fc0271a550440de57d1676cc1511bf5eedae0d8f)
+++ uspace/lib/usbhost/src/bus.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -43,9 +43,8 @@
  * Initializes the bus structure.
  */
-void bus_init(bus_t *bus, hcd_t *hcd)
+void bus_init(bus_t *bus)
 {
 	memset(bus, 0, sizeof(bus_t));
 
-	bus->hcd = hcd;
 	fibril_mutex_initialize(&bus->guard);
 }
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision fc0271a550440de57d1676cc1511bf5eedae0d8f)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
@@ -41,4 +41,5 @@
 #include <errno.h>
 #include <macros.h>
+#include <stdlib.h>
 #include <stdbool.h>
 
@@ -110,4 +111,14 @@
 }
 
+static endpoint_t *usb2_bus_create_ep(bus_t *bus)
+{
+	endpoint_t *ep = malloc(sizeof(endpoint_t));
+	if (!ep)
+		return NULL;
+
+	endpoint_init(ep, bus);
+	return ep;
+}
+
 /** Register an endpoint to the bus. Reserves bandwidth.
  * @param bus usb_bus structure, non-null.
@@ -271,4 +282,5 @@
 
 static const bus_ops_t usb2_bus_ops = {
+	.create_endpoint = usb2_bus_create_ep,
 	.find_endpoint = usb2_bus_find_ep,
 	.release_endpoint = usb2_bus_release_ep,
@@ -287,9 +299,9 @@
  * @return Error code.
  */
-int usb2_bus_init(usb2_bus_t *bus, hcd_t *hcd, size_t available_bandwidth, count_bw_func_t count_bw)
+int usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth, count_bw_func_t count_bw)
 {
 	assert(bus);
 
-	bus_init(&bus->base, hcd);
+	bus_init(&bus->base);
 
 	bus->base.ops = usb2_bus_ops;
