Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision 9ff99e84ceb43ab4c2a41ccfce682c462117c5cf)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision 957ea3a5214cbbd5b086171e4b7e8cd700bae8c8)
@@ -389,4 +389,6 @@
 	assert(params);
 
+	bool release_default_address = false;
+
 	int ret = EOK;
 	usb_hub_dev_t *hub = params->hub;
@@ -410,49 +412,38 @@
 	}
 	if (ret != EOK) {
-		usb_log_error("(%p-%u): Failed to reserve default address: %s",
-		    hub, port->port_number, str_error(ret));
+		usb_log_error("(%p-%u): Failed to reserve default address: %s", hub, port->port_number, str_error(ret));
 		goto out;
 	}
-
-	usb_log_debug("(%p-%u): Got default address reseting port.", hub,
-	    port->port_number);
+	release_default_address = true;
+
+	usb_log_debug("(%p-%u): Got default address. Reseting port.", hub, port->port_number);
+
 	/* Reset port */
-	ret = port_enable(port, hub, true);
-	if (ret != EOK) {
-		usb_log_error("(%p-%u): Failed to reset port.", hub,
-		    port->port_number);
-		if (usbhc_release_default_address(exch) != EOK)
-			usb_log_warning("(%p-%u): Failed to release default "
-			    "address.", hub, port->port_number);
+	if ((ret = port_enable(port, hub, true))) {
+		usb_log_error("(%p-%u): Failed to reset port.", hub, port->port_number);
 		ret = EIO;
-		goto out;
-	}
-	usb_log_debug("(%p-%u): Port reset, enumerating device", hub,
-	    port->port_number);
-
-	ret = usbhc_device_enumerate(exch, port->port_number);
-	if (ret != EOK) {
-		usb_log_error("(%p-%u): Failed to enumerate device: %s", hub,
-		    port->port_number, str_error(ret));
-		const int ret = port_enable(port, hub, false);
-		if (ret != EOK) {
-			usb_log_warning("(%p-%u)Failed to disable port (%s), "
-			    "NOT releasing default address.", hub,
-			    port->port_number, str_error(ret));
-		} else {
-			const int ret = usbhc_release_default_address(exch);
-			if (ret != EOK)
-				usb_log_warning("(%p-%u): Failed to release "
-				    "default address: %s", hub,
-				    port->port_number, str_error(ret));
-		}
-	} else {
-		usb_log_debug("(%p-%u): Device enumerated", hub,
-		    port->port_number);
-		port->device_attached = true;
-		if (usbhc_release_default_address(exch) != EOK)
-			usb_log_warning("(%p-%u): Failed to release default "
-			    "address", hub, port->port_number);
-	}
+		goto out_address;
+	}
+
+	usb_log_debug("(%p-%u): Port reset, enumerating device", hub, port->port_number);
+
+	if ((ret = usbhc_device_enumerate(exch, port->port_number))) {
+		usb_log_error("(%p-%u): Failed to enumerate device: %s", hub, port->port_number, str_error(ret));
+		goto out_port;
+	}
+
+	usb_log_debug("(%p-%u): Device enumerated", hub, port->port_number);
+	port->device_attached = true;
+
+out_port:
+	if (!port->device_attached && (ret = port_enable(port, hub, false))) {
+		usb_log_warning("(%p-%u)Failed to disable port (%s), NOT releasing default address.", hub, port->port_number, str_error(ret));
+		release_default_address = false;
+	}
+
+out_address:
+	if (release_default_address && (ret = usbhc_release_default_address(exch)))
+		usb_log_warning("(%p-%u): Failed to release default address: %s", hub, port->port_number, str_error(ret));
+
 out:
 	usb_device_bus_exchange_end(exch);
