Index: uspace/drv/vhc/connhost.c
===================================================================
--- uspace/drv/vhc/connhost.c	(revision 4125b7d6623fde4fc0b0dfa664848db2d491c2b9)
+++ uspace/drv/vhc/connhost.c	(revision bbdf09e0177a12801c1f35b97859ac7d2904be10)
@@ -313,6 +313,7 @@
     usb_address_t *address)
 {
-	usb_log_debug("tell_address(fun \"%s\", handle %zu)\n",
-	    fun->name, (size_t) fun->handle);
+	usb_log_debug(
+	    "tell_address(fun=`%s' (%" PRIun"), dev_handle=%" PRIun ")\n",
+	    fun->name, fun->handle, handle);
 	usb_address_t addr = usb_address_keeping_find(&addresses, handle);
 	if (addr < 0) {
@@ -341,4 +342,29 @@
 }
 
+static int register_endpoint(ddf_fun_t *fun,
+    usb_address_t address, usb_speed_t speed, usb_endpoint_t endpoint,
+    usb_transfer_type_t transfer_type, usb_direction_t direction,
+    size_t max_packet_size, unsigned int interval)
+{
+	if ((address == USB_ADDRESS_DEFAULT)
+	    && (endpoint == 0)) {
+		usb_address_keeping_reserve_default(&addresses);
+	}
+
+	return EOK;
+}
+
+static int unregister_endpoint(ddf_fun_t *fun, usb_address_t address,
+    usb_endpoint_t endpoint, usb_direction_t direction)
+{
+	if ((address == USB_ADDRESS_DEFAULT)
+	    && (endpoint == 0)) {
+		usb_address_keeping_release_default(&addresses);
+	}
+
+	return EOK;
+}
+
+
 static int bind_address(ddf_fun_t *fun, usb_address_t address,
     devman_handle_t handle)
@@ -367,5 +393,9 @@
 	assert(hc_fun != NULL);
 
-	return tell_address(hc_fun, root_hub_fun->handle, address);
+	if (handle == 0) {
+		handle = root_hub_fun->handle;
+	}
+
+	return tell_address(hc_fun, handle, address);
 }
 
@@ -380,4 +410,7 @@
 	.release_address = release_address,
 
+	.register_endpoint = register_endpoint,
+	.unregister_endpoint = unregister_endpoint,
+
 	.interrupt_out = interrupt_out,
 	.interrupt_in = interrupt_in,
