Index: uspace/drv/usbhub/ports.c
===================================================================
--- uspace/drv/usbhub/ports.c	(revision b79c31f91eff5817406e917fc32db7c34f6c24ac)
+++ uspace/drv/usbhub/ports.c	(revision 46e078a088fe8c3ab8b11e525495ff063c8d7aca)
@@ -181,9 +181,18 @@
 		 */
 	} else {
-		usb_log_warning("this is strange, disconnected device had "
-			"no address\n");
-		//device was disconnected before it`s port was reset -
-		//return default address
-		usb_hub_release_default_address(hub);
+		// TODO: is this really reason to print a warning?
+		usb_log_warning("Device removed before being registered.\n");
+
+		/*
+		 * Device was removed before port reset completed.
+		 * We will announce a failed port reset to unblock the
+		 * port reset callback from new device wrapper.
+		 */
+		usb_hub_port_t *the_port = hub->ports + port;
+		fibril_mutex_lock(&the_port->reset_mutex);
+		the_port->reset_completed = true;
+		the_port->reset_okay = false;
+		fibril_condvar_broadcast(&the_port->reset_cv);
+		fibril_mutex_unlock(&the_port->reset_mutex);
 	}
 }
@@ -207,4 +216,5 @@
 		fibril_mutex_lock(&the_port->reset_mutex);
 		the_port->reset_completed = true;
+		the_port->reset_okay = true;
 		fibril_condvar_broadcast(&the_port->reset_cv);
 		fibril_mutex_unlock(&the_port->reset_mutex);
@@ -319,5 +329,9 @@
 	}
 
-	return EOK;
+	if (my_port->reset_okay) {
+		return EOK;
+	} else {
+		return ESTALL;
+	}
 }
 
Index: uspace/drv/usbhub/ports.h
===================================================================
--- uspace/drv/usbhub/ports.h	(revision b79c31f91eff5817406e917fc32db7c34f6c24ac)
+++ uspace/drv/usbhub/ports.h	(revision 46e078a088fe8c3ab8b11e525495ff063c8d7aca)
@@ -51,4 +51,6 @@
 	 */
 	bool reset_completed;
+	/** Whether to announce the port reset as successful. */
+	bool reset_okay;
 
 	/** Information about attached device. */
Index: uspace/drv/usbhub/usbhub.c
===================================================================
--- uspace/drv/usbhub/usbhub.c	(revision b79c31f91eff5817406e917fc32db7c34f6c24ac)
+++ uspace/drv/usbhub/usbhub.c	(revision 46e078a088fe8c3ab8b11e525495ff063c8d7aca)
@@ -177,23 +177,4 @@
 
 	return true;
-}
-
-/**
- * release default address used by given hub
- *
- * Also unsets hub->is_default_address_used. Convenience wrapper function.
- * @note hub->connection MUST be open for communication
- * @param hub hub representation
- * @return error code
- */
-int usb_hub_release_default_address(usb_hub_info_t * hub) {
-	int opResult = usb_hc_release_default_address(&hub->connection);
-	if (opResult != EOK) {
-		usb_log_error("could not release default address, errno %d\n",
-		    opResult);
-		return opResult;
-	}
-	hub->is_default_address_used = false;
-	return EOK;
 }
 
Index: uspace/drv/usbhub/usbhub.h
===================================================================
--- uspace/drv/usbhub/usbhub.h	(revision b79c31f91eff5817406e917fc32db7c34f6c24ac)
+++ uspace/drv/usbhub/usbhub.h	(revision 46e078a088fe8c3ab8b11e525495ff063c8d7aca)
@@ -98,6 +98,4 @@
     uint8_t *change_bitmap, size_t change_bitmap_size, void *arg);
 
-int usb_hub_release_default_address(usb_hub_info_t * hub);
-
 #endif
 /**
