Index: uspace/drv/uhci-rhd/port.c
===================================================================
--- uspace/drv/uhci-rhd/port.c	(revision 79d2987615b780d65a2ce85f69be6227caa7ecb1)
+++ uspace/drv/uhci-rhd/port.c	(revision 4e8e1f51aca228845c8d503a3f52fbf34a47bb20)
@@ -33,8 +33,10 @@
  */
 #include <errno.h>
+#include <str_error.h>
 
 #include <usb/usb.h>    /* usb_address_t */
 #include <usb/usbdrv.h> /* usb_drv_*     */
 #include <usb/debug.h>
+#include <usb/recognise.h>
 
 #include "port.h"
@@ -204,7 +206,15 @@
 	assert(port->attached_device == 0);
 
-	ret = usb_drv_register_child_in_devman(port->hc_phone, port->rh,
-	  usb_address, &port->attached_device);
-
+	devman_handle_t hc_handle;
+	ret = usb_drv_find_hc(port->rh, &hc_handle);
+	if (ret != EOK) {
+		usb_log_error("Failed to get handle of host controller: %s.\n",
+		    str_error(ret));
+		uhci_port_set_enabled(port, false);
+		return ENOMEM;
+	}
+
+	ret = usb_device_register_child_in_devman(usb_address, hc_handle,
+	    port->rh, &port->attached_device);
 	if (ret != EOK) { /* something went wrong */
 		usb_log_error("Failed(%d) in usb_drv_register_child.\n", ret);
Index: uspace/drv/usbhub/usbhub.c
===================================================================
--- uspace/drv/usbhub/usbhub.c	(revision 79d2987615b780d65a2ce85f69be6227caa7ecb1)
+++ uspace/drv/usbhub/usbhub.c	(revision 4e8e1f51aca228845c8d503a3f52fbf34a47bb20)
@@ -36,8 +36,10 @@
 #include <bool.h>
 #include <errno.h>
+#include <str_error.h>
 
 #include <usb_iface.h>
 #include <usb/usbdrv.h>
 #include <usb/descriptor.h>
+#include <usb/recognise.h>
 #include <usb/devreq.h>
 #include <usb/classes/hub.h>
@@ -317,7 +319,15 @@
 	}
 
+	devman_handle_t hc_handle;
+	opResult = usb_drv_find_hc(hub->device, &hc_handle);
+	if (opResult != EOK) {
+		usb_log_error("Failed to get handle of host controller: %s.\n",
+		    str_error(opResult));
+		return;
+	}
+
 	devman_handle_t child_handle;
-	opResult = usb_drv_register_child_in_devman(hc, hub->device,
-            new_device_address, &child_handle);
+        opResult = usb_device_register_child_in_devman(new_device_address,
+            hc_handle, hub->device, &child_handle);
 	if (opResult != EOK) {
 		dprintf(USB_LOG_LEVEL_ERROR, "could not start driver for new device");
Index: uspace/drv/vhc/hub.c
===================================================================
--- uspace/drv/vhc/hub.c	(revision 79d2987615b780d65a2ce85f69be6227caa7ecb1)
+++ uspace/drv/vhc/hub.c	(revision 4e8e1f51aca228845c8d503a3f52fbf34a47bb20)
@@ -41,4 +41,5 @@
 #include <driver.h>
 #include <usb/usbdrv.h>
+#include <usb/recognise.h>
 
 #include "hub.h"
@@ -93,5 +94,7 @@
 
 	devman_handle_t hub_handle;
-	usb_drv_register_child_in_devman(hc, hc_dev, hub_address, &hub_handle);
+	usb_device_register_child_in_devman(hub_address, hc_dev->handle,
+	    hc_dev, &hub_handle);
+	//usb_drv_register_child_in_devman(hc, hc_dev, hub_address, &hub_handle);
 	usb_drv_bind_address(hc, hub_address, hub_handle);
 
