Index: uspace/drv/bus/usb/vhc/main.c
===================================================================
--- uspace/drv/bus/usb/vhc/main.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
+++ uspace/drv/bus/usb/vhc/main.c	(revision c0e4b5b2dc3d72ddcf6f4ab147613ff2edb04b8c)
@@ -89,6 +89,5 @@
 
 	/* Initialize generic structures */
-	ret = hcd_ddf_setup_hc(dev, USB_SPEED_FULL,
-	    BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11);
+	ret = hcd_ddf_setup_hc(dev);
 	if (ret != EOK) {
 		usb_log_error("Failed to init HCD structures: %s.\n",
@@ -98,5 +97,5 @@
 	}
 
-	hcd_set_implementation(dev_to_hcd(dev), data, &vhc_hc_ops);
+	hcd_set_implementation(dev_to_hcd(dev), data, &vhc_hc_ops, &data->bus.base);
 
 	/* Add virtual hub device */
Index: uspace/drv/bus/usb/vhc/transfer.c
===================================================================
--- uspace/drv/bus/usb/vhc/transfer.c	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
+++ uspace/drv/bus/usb/vhc/transfer.c	(revision c0e4b5b2dc3d72ddcf6f4ab147613ff2edb04b8c)
@@ -31,4 +31,5 @@
 #include <usb/debug.h>
 #include <usbvirt/device.h>
+#include <usb/host/bandwidth.h>
 #include <usbvirt/ipc.h>
 #include "vhcd.h"
@@ -37,5 +38,5 @@
 static bool is_set_address_transfer(vhc_transfer_t *transfer)
 {
-	if (transfer->batch->ep->endpoint != 0) {
+	if (transfer->batch->ep->target.endpoint != 0) {
 		return false;
 	}
@@ -80,5 +81,5 @@
 		if (dir == USB_DIRECTION_IN) {
 			rc = usbvirt_data_in(dev, batch->ep->transfer_type,
-			    batch->ep->endpoint,
+			    batch->ep->target.endpoint,
 			    batch->buffer, batch->buffer_size,
 			    actual_data_size);
@@ -86,5 +87,5 @@
 			assert(dir == USB_DIRECTION_OUT);
 			rc = usbvirt_data_out(dev, batch->ep->transfer_type,
-			    batch->ep->endpoint,
+			    batch->ep->target.endpoint,
 			    batch->buffer, batch->buffer_size);
 		}
@@ -115,5 +116,5 @@
 	} else {
 		if (dir == USB_DIRECTION_IN) {
-			rc = usbvirt_ipc_send_data_in(sess, batch->ep->endpoint,
+			rc = usbvirt_ipc_send_data_in(sess, batch->ep->target.endpoint,
 			    batch->ep->transfer_type,
 			    batch->buffer, batch->buffer_size,
@@ -121,5 +122,5 @@
 		} else {
 			assert(dir == USB_DIRECTION_OUT);
-			rc = usbvirt_ipc_send_data_out(sess, batch->ep->endpoint,
+			rc = usbvirt_ipc_send_data_out(sess, batch->ep->target.endpoint,
 			    batch->ep->transfer_type,
 			    batch->buffer, batch->buffer_size);
@@ -159,4 +160,5 @@
 	list_initialize(&instance->devices);
 	fibril_mutex_initialize(&instance->guard);
+	usb2_bus_init(&instance->bus, BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11);
 	instance->magic = 0xDEADBEEF;
 	return virthub_init(&instance->hub, "root hub");
@@ -182,5 +184,5 @@
 	list_foreach(vhc->devices, link, vhc_virtdev_t, dev) {
 		fibril_mutex_lock(&dev->guard);
-		if (dev->address == transfer->batch->ep->address) {
+		if (dev->address == transfer->batch->ep->target.address) {
 			if (!targets) {
 				list_append(&transfer->link, &dev->transfer_queue);
Index: uspace/drv/bus/usb/vhc/vhcd.h
===================================================================
--- uspace/drv/bus/usb/vhc/vhcd.h	(revision 741bcdeb7cf25de945b027110bc02ccbb1a6100e)
+++ uspace/drv/bus/usb/vhc/vhcd.h	(revision c0e4b5b2dc3d72ddcf6f4ab147613ff2edb04b8c)
@@ -42,4 +42,5 @@
 
 #include <usb/host/hcd.h>
+#include <usb/host/usb2_bus.h>
 
 #define NAME "vhc"
@@ -60,4 +61,5 @@
 	fibril_mutex_t guard;
 	usbvirt_device_t hub;
+	usb2_bus_t bus;
 } vhc_data_t;
 
