Index: uspace/drv/vhc/hcd.c
===================================================================
--- uspace/drv/vhc/hcd.c	(revision 1f383dde20a2b1e39baa81fbc44a73c126e508e4)
+++ uspace/drv/vhc/hcd.c	(revision b2a6fcfe62e491c8d0a4c86810869e9bcff954a5)
@@ -46,4 +46,5 @@
 
 #include <usb/usb.h>
+#include <usb_iface.h>
 #include "vhcd.h"
 #include "hc.h"
@@ -52,6 +53,20 @@
 #include "conn.h"
 
+static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle)
+{
+	/* This shall be called only for VHC device. */
+	assert(dev->parent == NULL);
+
+	*handle = dev->handle;
+	return EOK;
+}
+
+static usb_iface_t hc_usb_iface = {
+	.get_hc_handle = usb_iface_get_hc_handle
+};
+
 static device_ops_t vhc_ops = {
 	.interfaces[USBHC_DEV_IFACE] = &vhc_iface,
+	.interfaces[USB_DEV_IFACE] = &hc_usb_iface,
 	.default_handler = default_connection_handler
 };
@@ -70,9 +85,4 @@
 
 	dev->ops = &vhc_ops;
-
-	/*
-	 * Initialize address management.
-	 */
-	address_init();
 
 	/*
@@ -108,6 +118,17 @@
 	printf(NAME ": virtual USB host controller driver.\n");
 
+	/*
+	 * Initialize address management.
+	 */
+	address_init();
+
+	/*
+	 * Run the transfer scheduler.
+	 */
 	hc_manager();
 
+	/*
+	 * We are also a driver within devman framework.
+	 */
 	return driver_main(&vhc_driver);
 }
Index: uspace/drv/vhc/hub.c
===================================================================
--- uspace/drv/vhc/hub.c	(revision 1f383dde20a2b1e39baa81fbc44a73c126e508e4)
+++ uspace/drv/vhc/hub.c	(revision b2a6fcfe62e491c8d0a4c86810869e9bcff954a5)
@@ -79,5 +79,5 @@
 	device_t *hc_dev = (device_t *) arg;
 
-	int hc = usb_drv_hc_connect(hc_dev, IPC_FLAG_BLOCKING);
+	int hc = usb_drv_hc_connect(hc_dev, hc_dev->handle, IPC_FLAG_BLOCKING);
 	if (hc < 0) {
 		printf(NAME ": failed to register root hub\n");
