Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision eeca8a6576e862d2b94e31531749315d4d938507)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 740dafcdd0499e1f3387b2bd26ce4b4d7e9f1bae)
@@ -45,6 +45,5 @@
 
 typedef enum {
-	IPC_M_USB_RESERVE_DEFAULT_ADDRESS,
-	IPC_M_USB_RELEASE_DEFAULT_ADDRESS,
+	IPC_M_USB_DEFAULT_ADDRESS_RESERVATION,
 	IPC_M_USB_DEVICE_ENUMERATE,
 	IPC_M_USB_DEVICE_REMOVE,
@@ -63,5 +62,5 @@
 	if (!exch)
 		return EBADMEM;
-	return async_req_1_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USB_RESERVE_DEFAULT_ADDRESS);
+	return async_req_2_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USB_DEFAULT_ADDRESS_RESERVATION, true);
 }
 
@@ -76,5 +75,5 @@
 	if (!exch)
 		return EBADMEM;
-	return async_req_1_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USB_RELEASE_DEFAULT_ADDRESS);
+	return async_req_2_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE), IPC_M_USB_DEFAULT_ADDRESS_RESERVATION, false);
 }
 
@@ -263,6 +262,5 @@
 }
 
-static void remote_usbhc_reserve_default_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_release_default_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbhc_default_address_reservation(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_device_enumerate(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_device_remove(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
@@ -274,6 +272,5 @@
 /** Remote USB interface operations. */
 static const remote_iface_func_ptr_t remote_usbhc_iface_ops [] = {
-	[IPC_M_USB_RESERVE_DEFAULT_ADDRESS] = remote_usbhc_reserve_default_address,
-	[IPC_M_USB_RELEASE_DEFAULT_ADDRESS] = remote_usbhc_release_default_address,
+	[IPC_M_USB_DEFAULT_ADDRESS_RESERVATION] = remote_usbhc_default_address_reservation,
 	[IPC_M_USB_DEVICE_ENUMERATE] = remote_usbhc_device_enumerate,
 	[IPC_M_USB_DEVICE_REMOVE] = remote_usbhc_device_remove,
@@ -297,31 +294,19 @@
 } async_transaction_t;
 
-void remote_usbhc_reserve_default_address(ddf_fun_t *fun, void *iface,
+void remote_usbhc_default_address_reservation(ddf_fun_t *fun, void *iface,
     ipc_callid_t callid, ipc_call_t *call)
 {
 	const usbhc_iface_t *usbhc_iface = (usbhc_iface_t *) iface;
 
-	if (usbhc_iface->reserve_default_address == NULL) {
-		async_answer_0(callid, ENOTSUP);
-		return;
-	}
-
-	const int ret = usbhc_iface->reserve_default_address(fun);
+	if (usbhc_iface->default_address_reservation == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	const bool reserve = IPC_GET_ARG2(*call);
+	const int ret = usbhc_iface->default_address_reservation(fun, reserve);
 	async_answer_0(callid, ret);
 }
 
-void remote_usbhc_release_default_address(ddf_fun_t *fun, void *iface,
-    ipc_callid_t callid, ipc_call_t *call)
-{
-	const usbhc_iface_t *usbhc_iface = (usbhc_iface_t *) iface;
-
-	if (usbhc_iface->release_default_address == NULL) {
-		async_answer_0(callid, ENOTSUP);
-		return;
-	}
-
-	const int ret = usbhc_iface->release_default_address(fun);
-	async_answer_0(callid, ret);
-}
 
 static void remote_usbhc_device_enumerate(ddf_fun_t *fun, void *iface,
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision eeca8a6576e862d2b94e31531749315d4d938507)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision 740dafcdd0499e1f3387b2bd26ce4b4d7e9f1bae)
@@ -99,6 +99,5 @@
 /** USB device communication interface. */
 typedef struct {
-	int (*reserve_default_address)(ddf_fun_t *);
-	int (*release_default_address)(ddf_fun_t *);
+	int (*default_address_reservation)(ddf_fun_t *, bool);
 
 	int (*device_enumerate)(ddf_fun_t *, unsigned, usb_speed_t);
