Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision e40b9f002b37ebf3adcba15bb001197218bf047f)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 6427cf67e61dac03ff95a479691282c98e8bd5f3)
@@ -163,6 +163,8 @@
 		return;
 	}
-
-	int rc = usb_iface->reserve_default_address(device);
+	
+	bool full_speed = DEV_IPC_GET_ARG1(*call);
+	
+	int rc = usb_iface->reserve_default_address(device, full_speed);
 
 	async_answer_0(callid, rc);
@@ -193,7 +195,9 @@
 		return;
 	}
+	
+	bool full_speed = DEV_IPC_GET_ARG1(*call);
 
 	usb_address_t address;
-	int rc = usb_iface->request_address(device, &address);
+	int rc = usb_iface->request_address(device, full_speed, &address);
 	if (rc != EOK) {
 		async_answer_0(callid, rc);
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision e40b9f002b37ebf3adcba15bb001197218bf047f)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision 6427cf67e61dac03ff95a479691282c98e8bd5f3)
@@ -40,4 +40,5 @@
 #include "driver.h"
 #include <usb/usb.h>
+#include <bool.h>
 
 
@@ -231,7 +232,7 @@
 	int (*tell_address)(device_t *, devman_handle_t, usb_address_t *);
 
-	int (*reserve_default_address)(device_t *);
+	int (*reserve_default_address)(device_t *, bool);
 	int (*release_default_address)(device_t *);
-	int (*request_address)(device_t *, usb_address_t *);
+	int (*request_address)(device_t *, bool, usb_address_t *);
 	int (*bind_address)(device_t *, usb_address_t, devman_handle_t);
 	int (*release_address)(device_t *, usb_address_t);
Index: uspace/lib/usb/include/usb/hub.h
===================================================================
--- uspace/lib/usb/include/usb/hub.h	(revision e40b9f002b37ebf3adcba15bb001197218bf047f)
+++ uspace/lib/usb/include/usb/hub.h	(revision 6427cf67e61dac03ff95a479691282c98e8bd5f3)
@@ -52,8 +52,8 @@
 } usb_hc_attached_device_t;
 
-int usb_hc_reserve_default_address(usb_hc_connection_t *);
+int usb_hc_reserve_default_address(usb_hc_connection_t *, bool);
 int usb_hc_release_default_address(usb_hc_connection_t *);
 
-usb_address_t usb_hc_request_address(usb_hc_connection_t *);
+usb_address_t usb_hc_request_address(usb_hc_connection_t *, bool);
 int usb_hc_register_device(usb_hc_connection_t *,
     const usb_hc_attached_device_t *);
Index: uspace/lib/usb/src/hub.c
===================================================================
--- uspace/lib/usb/src/hub.c	(revision e40b9f002b37ebf3adcba15bb001197218bf047f)
+++ uspace/lib/usb/src/hub.c	(revision 6427cf67e61dac03ff95a479691282c98e8bd5f3)
@@ -55,11 +55,12 @@
  * @return Error code.
  */
-int usb_hc_reserve_default_address(usb_hc_connection_t *connection)
+int usb_hc_reserve_default_address(usb_hc_connection_t *connection,
+    bool full_speed)
 {
 	CHECK_CONNECTION(connection);
 
-	return async_req_1_0(connection->hc_phone,
+	return async_req_2_0(connection->hc_phone,
 	    DEV_IFACE_ID(USBHC_DEV_IFACE),
-	    IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS);
+	    IPC_M_USBHC_RESERVE_DEFAULT_ADDRESS, full_speed);
 }
 
@@ -83,12 +84,14 @@
  * @return Assigned USB address or negative error code.
  */
-usb_address_t usb_hc_request_address(usb_hc_connection_t *connection)
+usb_address_t usb_hc_request_address(usb_hc_connection_t *connection,
+    bool full_speed)
 {
 	CHECK_CONNECTION(connection);
 
 	sysarg_t address;
-	int rc = async_req_1_1(connection->hc_phone,
+	int rc = async_req_2_1(connection->hc_phone,
 	    DEV_IFACE_ID(USBHC_DEV_IFACE),
-	    IPC_M_USBHC_REQUEST_ADDRESS, &address);
+	    IPC_M_USBHC_REQUEST_ADDRESS, full_speed,
+	    &address);
 	if (rc != EOK) {
 		return (usb_address_t) rc;
