Index: uspace/drv/vhc/conn.h
===================================================================
--- uspace/drv/vhc/conn.h	(revision b36e5de2b3fb91be80216fe929bf2bfee1268933)
+++ uspace/drv/vhc/conn.h	(revision b68b27909054c76dc019f8747e5deced7215822a)
@@ -38,4 +38,5 @@
 #include <usb/usb.h>
 #include <usbhc_iface.h>
+#include <usb_iface.h>
 #include "vhcd.h"
 #include "devices.h"
@@ -43,5 +44,6 @@
 void connection_handler_host(sysarg_t);
 
-usbhc_iface_t vhc_iface;
+extern usbhc_iface_t vhc_iface;
+extern usb_iface_t vhc_usb_iface;
 
 void address_init(void);
Index: uspace/drv/vhc/connhost.c
===================================================================
--- uspace/drv/vhc/connhost.c	(revision b36e5de2b3fb91be80216fe929bf2bfee1268933)
+++ uspace/drv/vhc/connhost.c	(revision b68b27909054c76dc019f8747e5deced7215822a)
@@ -37,4 +37,5 @@
 #include <usb/usb.h>
 #include <usb/addrkeep.h>
+#include <usb/ddfiface.h>
 
 #include "vhcd.h"
@@ -313,4 +314,15 @@
 static usb_address_keeping_t addresses;
 
+static int tell_address(device_t *dev, devman_handle_t handle,
+    usb_address_t *address)
+{
+	usb_address_t addr = usb_address_keeping_find(&addresses, handle);
+	if (addr < 0) {
+		return addr;
+	}
+
+	*address = addr;
+	return EOK;
+}
 
 static int reserve_default_address(device_t *dev, usb_speed_t ignored)
@@ -350,16 +362,4 @@
 }
 
-static int tell_address(device_t *dev, devman_handle_t handle,
-    usb_address_t *address)
-{
-	usb_address_t addr = usb_address_keeping_find(&addresses, handle);
-	if (addr < 0) {
-		return addr;
-	}
-
-	*address = addr;
-	return EOK;
-}
-
 void address_init(void)
 {
@@ -368,6 +368,4 @@
 
 usbhc_iface_t vhc_iface = {
-	.tell_address = tell_address,
-
 	.reserve_default_address = reserve_default_address,
 	.release_default_address = release_default_address,
@@ -383,4 +381,10 @@
 };
 
+usb_iface_t vhc_usb_iface = {
+	.get_hc_handle = usb_iface_get_hc_handle_hc_impl,
+	.get_address = tell_address
+};
+
+
 /**
  * @}
Index: uspace/drv/vhc/hcd.c
===================================================================
--- uspace/drv/vhc/hcd.c	(revision b36e5de2b3fb91be80216fe929bf2bfee1268933)
+++ uspace/drv/vhc/hcd.c	(revision b68b27909054c76dc019f8747e5deced7215822a)
@@ -45,4 +45,5 @@
 
 #include <usb/usb.h>
+#include <usb/ddfiface.h>
 #include <usb_iface.h>
 #include "vhcd.h"
@@ -52,20 +53,7 @@
 #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,
+	.interfaces[USB_DEV_IFACE] = &vhc_usb_iface,
 	.close = on_client_close,
 	.default_handler = default_connection_handler
