Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision 3df8ea96d77e53139c8c76dc4de46476b4fb38a3)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision c9467b013ac7c2fc324b2f6ae26438927b70100d)
@@ -66,5 +66,5 @@
 {
 	assert(port);
-	if (port->attached_device.fun)
+	if (port->attached_handle != USB_DEVICE_HANDLE_INVALID)
 		return usb_hub_port_device_gone(port, hub);
 	return EOK;
@@ -471,10 +471,7 @@
 	}
 
-	usb_log_fatal("reserving default address\n");
-
 	/* Reserve default address */
 	int ret;
 	while ((ret = usb_reserve_default_address(exch, speed)) == ENOENT) {
-		usb_log_fatal("reserving default address %d\n", ret);
 		async_usleep(1000000);
 	}
@@ -507,6 +504,16 @@
 				    "Failed to release default address\n");
 		}
+	} else {
+		if (usb_release_default_address(exch) != EOK)
+			usb_log_warning("Failed to release default address\n");
 	}
 	async_exchange_end(exch);
+
+	fibril_mutex_lock(&hub->pending_ops_mutex);
+	assert(hub->pending_ops_count > 0);
+	--hub->pending_ops_count;
+	fibril_condvar_signal(&hub->pending_ops_cv);
+	fibril_mutex_unlock(&hub->pending_ops_mutex);
+
 	return ret;
 #if 0
Index: uspace/drv/bus/usb/usbhub/port.h
===================================================================
--- uspace/drv/bus/usb/usbhub/port.h	(revision 3df8ea96d77e53139c8c76dc4de46476b4fb38a3)
+++ uspace/drv/bus/usb/usbhub/port.h	(revision c9467b013ac7c2fc324b2f6ae26438927b70100d)
@@ -61,6 +61,4 @@
 	usb_device_handle_t attached_handle;
 
-	/** Information about attached device. */
-	usb_hub_attached_device_t attached_device;
 } usb_hub_port_t;
 
@@ -73,6 +71,4 @@
 {
 	assert(port);
-	port->attached_device.address = -1;
-	port->attached_device.fun = NULL;
 	port->port_number = port_number;
 	port->control_pipe = control_pipe;
Index: uspace/drv/bus/usb/usbhub/usbhub.c
===================================================================
--- uspace/drv/bus/usb/usbhub/usbhub.c	(revision 3df8ea96d77e53139c8c76dc4de46476b4fb38a3)
+++ uspace/drv/bus/usb/usbhub/usbhub.c	(revision c9467b013ac7c2fc324b2f6ae26438927b70100d)
@@ -200,10 +200,7 @@
 
 	for (size_t port = 0; port < hub->port_count; ++port) {
-		if (hub->ports[port].attached_device.fun) {
-			const int ret =
-			    usb_hub_port_fini(&hub->ports[port], hub);
-			if (ret != EOK)
-				return ret;
-		}
+		const int ret = usb_hub_port_fini(&hub->ports[port], hub);
+		if (ret != EOK)
+			return ret;
 	}
 	free(hub->ports);
