Index: uspace/lib/usbdev/include/usb/dev/hub.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/hub.h	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
+++ uspace/lib/usbdev/include/usb/dev/hub.h	(revision 67f55e7b2dfcb0148220fbd9ab6a82e92e67d3b6)
@@ -59,5 +59,6 @@
 } usb_hub_attached_device_t;
 
-usb_address_t usb_hc_request_address(usb_hc_connection_t *, usb_speed_t);
+usb_address_t usb_hc_request_address(usb_hc_connection_t *, usb_address_t,
+    bool, usb_speed_t);
 int usb_hc_register_device(usb_hc_connection_t *,
     const usb_hub_attached_device_t *);
Index: uspace/lib/usbdev/src/hub.c
===================================================================
--- uspace/lib/usbdev/src/hub.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
+++ uspace/lib/usbdev/src/hub.c	(revision 67f55e7b2dfcb0148220fbd9ab6a82e92e67d3b6)
@@ -66,4 +66,6 @@
  *
  * @param connection Opened connection to host controller.
+ * @param preferred Preferred SUB address.
+ * @param strict Fail if the preferred address is not avialable.
  * @param speed Speed of the new device (device that will be assigned
  *    the returned address).
@@ -71,5 +73,5 @@
  */
 usb_address_t usb_hc_request_address(usb_hc_connection_t *connection,
-    usb_speed_t speed)
+    usb_address_t preferred, bool strict, usb_speed_t speed)
 {
 	CHECK_CONNECTION(connection);
@@ -78,7 +80,6 @@
 	
 	sysarg_t address;
-	int rc = async_req_2_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
-	    IPC_M_USBHC_REQUEST_ADDRESS, speed,
-	    &address);
+	int rc = async_req_4_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
+	    IPC_M_USBHC_REQUEST_ADDRESS, preferred, strict, speed, &address);
 	
 	async_exchange_end(exch);
@@ -223,5 +224,6 @@
 	 * Request new address.
 	 */
-	usb_address_t dev_addr = usb_hc_request_address(&hc_conn, dev_speed);
+	usb_address_t dev_addr =
+	    usb_hc_request_address(&hc_conn, 1, false, dev_speed);
 	if (dev_addr < 0) {
 		rc = EADDRNOTAVAIL;
