Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision 8be7819e446d3ad8391ac21c6f806e6e55e61bd6)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision cae002cccadb8f80b02e632090ca484bf19bd83a)
@@ -401,4 +401,5 @@
 {
 	usb_hub_port_t *port = arg;
+	assert(port);
 	const int rc =
 	    usb_hub_port_set_feature(port, USB_HUB_FEATURE_PORT_RESET);
@@ -440,21 +441,20 @@
 	    data->port, &new_address, NULL, NULL, &child_fun);
 
-	if (rc != EOK) {
+	if (rc == EOK) {
+		fibril_mutex_lock(&data->port->mutex);
+		data->port->attached_device.fun = child_fun;
+		data->port->attached_device.address = new_address;
+		fibril_mutex_unlock(&data->port->mutex);
+
+		usb_log_info("Detected new device on `%s' (port %zu), "
+		    "address %d (handle %" PRIun ").\n",
+		    data->hub->usb_device->ddf_dev->name,
+		    data->port->port_number, new_address, child_fun->handle);
+	} else {
 		usb_log_error("Failed registering device on port %zu: %s.\n",
 		    data->port->port_number, str_error(rc));
-		goto leave;
-	}
-
-	fibril_mutex_lock(&data->port->mutex);
-	data->port->attached_device.fun = child_fun;
-	data->port->attached_device.address = new_address;
-	fibril_mutex_unlock(&data->port->mutex);
-
-	usb_log_info("Detected new device on `%s' (port %zu), "
-	    "address %d (handle %" PRIun ").\n",
-	    data->hub->usb_device->ddf_dev->name, data->port->port_number,
-	    new_address, child_fun->handle);
-
-leave:
+	}
+
+
 	fibril_mutex_lock(&data->hub->pending_ops_mutex);
 	assert(data->hub->pending_ops_count > 0);
Index: uspace/drv/bus/usb/usbhub/port.h
===================================================================
--- uspace/drv/bus/usb/usbhub/port.h	(revision 8be7819e446d3ad8391ac21c6f806e6e55e61bd6)
+++ uspace/drv/bus/usb/usbhub/port.h	(revision cae002cccadb8f80b02e632090ca484bf19bd83a)
@@ -44,5 +44,5 @@
 /** Information about single port on a hub. */
 typedef struct {
-	/* Port number as reporteed in descriptors. */
+	/* Port number as reported in descriptors. */
 	size_t port_number;
 	/** Device communication pipe. */
Index: uspace/drv/bus/usb/usbhub/usbhub.c
===================================================================
--- uspace/drv/bus/usb/usbhub/usbhub.c	(revision 8be7819e446d3ad8391ac21c6f806e6e55e61bd6)
+++ uspace/drv/bus/usb/usbhub/usbhub.c	(revision cae002cccadb8f80b02e632090ca484bf19bd83a)
@@ -170,33 +170,5 @@
 int usb_hub_device_remove(usb_device_t *usb_dev)
 {
-	assert(usb_dev);
-	usb_hub_dev_t *hub_dev = usb_dev->driver_data;
-	assert(hub_dev);
-	//TODO: Cascade the call here.
-	//TODO: Enable after cascading is implemented.
 	return ENOTSUP;
-	if (!hub_dev->power_switched) {
-		/* That is all we can do. */
-		return EOK;
-	}
-	int ret = EOK;
-	usb_log_info("Hub is about to be removed, powering down all ports.\n");
-	for (size_t port = 0; port < hub_dev->port_count; ++port) {
-		usb_log_debug("Powering down port %zu.\n", port);
-		int pret = usb_hub_port_clear_feature(
-		    &hub_dev->ports[port], USB_HUB_FEATURE_PORT_POWER);
-		if (pret != EOK) {
-			usb_log_error("Cannot power down port %zu: %s.\n",
-			    hub_dev->ports[port].port_number, str_error(pret));
-			ret = pret;
-		} else {
-			if (!hub_dev->per_port_power) {
-				usb_log_debug("Ganged power switching mode, "
-				   "one port is enough.\n");
-				break;
-			}
-		}
-	}
-	return ret;
 }
 /*----------------------------------------------------------------------------*/
