Index: uspace/drv/usbhub/usbhub.c
===================================================================
--- uspace/drv/usbhub/usbhub.c	(revision b495a9356dcb0da34a18b3521c710e2fba5ac2a3)
+++ uspace/drv/usbhub/usbhub.c	(revision a83e13883877f964a89a8cd86d9de531489cb4fa)
@@ -233,4 +233,5 @@
 	result->port_count = -1;
 	result->device = device;
+	result->is_default_address_used = false;
 
 	//result->usb_device = usb_new(usb_hcd_attached_device_info_t);
@@ -377,4 +378,22 @@
 
 /**
+ * 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
+ */
+static 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",opResult);
+		return opResult;
+	}
+	hub->is_default_address_used = false;
+	return EOK;
+}
+
+/**
  * Reset the port with new device and reserve the default address.
  * @param hc
@@ -384,4 +403,7 @@
 static void usb_hub_init_add_device(usb_hub_info_t * hub, uint16_t port,
 		bool isLowSpeed) {
+	//if this hub already uses default address, it cannot request it once more
+	if(hub->is_default_address_used) return;
+
 	usb_device_request_setup_packet_t request;
 	int opResult;
@@ -397,4 +419,5 @@
 		return;
 	}
+	hub->is_default_address_used = true;
 	//reset port
 	usb_hub_set_reset_port_request(&request, port);
@@ -407,5 +430,5 @@
 		usb_log_error("something went wrong when reseting a port %d",opResult);
 		//usb_hub_release_default_address(hc);
-		usb_hc_release_default_address(&hub->connection);
+		usb_hub_release_default_address(hub);
 	}
 }
@@ -427,5 +450,5 @@
 	if (opResult != EOK) {
 		usb_log_error("failed to clear port reset feature");
-		usb_hc_release_default_address(&hub->connection);
+		usb_hub_release_default_address(hub);
 		return;
 	}
@@ -453,5 +476,5 @@
 		usb_log_error("failed to get free USB address");
 		opResult = new_device_address;
-		usb_hc_release_default_address(&hub->connection);
+		usb_hub_release_default_address(hub);
 		return;
 	}
@@ -464,5 +487,5 @@
 	if (opResult != EOK) {
 		usb_log_error("could not set address for new device %d",opResult);
-		usb_hc_release_default_address(&hub->connection);
+		usb_hub_release_default_address(hub);
 		return;
 	}
@@ -470,5 +493,5 @@
 
 	//opResult = usb_hub_release_default_address(hc);
-	opResult = usb_hc_release_default_address(&hub->connection);
+	opResult = usb_hub_release_default_address(hub);
 	if(opResult!=EOK){
 		return;
@@ -529,6 +552,5 @@
 		usb_log_warning("this is strange, disconnected device had no address");
 		//device was disconnected before it`s port was reset - return default address
-		//usb_drv_release_default_address(hc);
-		usb_hc_release_default_address(&hub->connection);
+		usb_hub_release_default_address(hub);
 	}
 }
Index: uspace/drv/usbhub/usbhub.h
===================================================================
--- uspace/drv/usbhub/usbhub.h	(revision b495a9356dcb0da34a18b3521c710e2fba5ac2a3)
+++ uspace/drv/usbhub/usbhub.h	(revision a83e13883877f964a89a8cd86d9de531489cb4fa)
@@ -71,4 +71,6 @@
 	/** hub endpoints */
 	usb_hub_endpoints_t endpoints;
+
+	bool is_default_address_used;
 } usb_hub_info_t;
 
