Index: uspace/drv/bus/usb/vhc/hub/virthub.c
===================================================================
--- uspace/drv/bus/usb/vhc/hub/virthub.c	(revision 237df2fe310a52652921f9329987ec1657d4be25)
+++ uspace/drv/bus/usb/vhc/hub/virthub.c	(revision 0e97b4b564b961a6ed76de761df2c1ab32c04f35)
@@ -155,5 +155,5 @@
 	dev->address = 0;
 	dev->name = str_dup(name);
-	if (!name)
+	if (!dev->name)
 		return ENOMEM;
 
Index: uspace/drv/bus/usb/vhc/main.c
===================================================================
--- uspace/drv/bus/usb/vhc/main.c	(revision 237df2fe310a52652921f9329987ec1657d4be25)
+++ uspace/drv/bus/usb/vhc/main.c	(revision 0e97b4b564b961a6ed76de761df2c1ab32c04f35)
@@ -51,5 +51,4 @@
 };
 
-
 static int vhc_control_node(ddf_dev_t *dev, ddf_fun_t **fun)
 {
@@ -93,5 +92,5 @@
 		usb_log_error("Failed to init HCD structures: %s.\n",
 		   str_error(ret));
-		free(data);
+		ddf_fun_destroy(ctl_fun);
 		return ret;
 	}
@@ -100,14 +99,12 @@
 
 	/* Add virtual hub device */
-	usb_address_t address = 1;
-	ret = vhc_virtdev_plug_hub(data, &data->hub, NULL, address);
+	ret = vhc_virtdev_plug_hub(data, &data->hub, NULL, 0);
 	if (ret != EOK) {
 		usb_log_error("Failed to plug root hub: %s.\n", str_error(ret));
-		free(data);
+		ddf_fun_destroy(ctl_fun);
 		return ret;
 	}
 
-	// TODO fix the address hack
-	ret = hcd_ddf_setup_hub(dev, &address);
+	ret = hcd_ddf_setup_root_hub(dev, USB_SPEED_FULL);
 	if (ret != EOK) {
 		usb_log_error("Failed to init VHC root hub: %s\n",
