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 4603b35bfff3d939df56b8ba944e6aba6c14b3a6)
@@ -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 4603b35bfff3d939df56b8ba944e6aba6c14b3a6)
@@ -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);
Index: uspace/lib/usbhost/src/bus.c
===================================================================
--- uspace/lib/usbhost/src/bus.c	(revision eeca8a6576e862d2b94e31531749315d4d938507)
+++ uspace/lib/usbhost/src/bus.c	(revision 4603b35bfff3d939df56b8ba944e6aba6c14b3a6)
@@ -519,5 +519,6 @@
 	fibril_mutex_lock(&bus->guard);
 	if (bus->default_address_owner != dev) {
-		usb_log_error("Device %d tried to release address, which is not reserved for it.", dev->address);
+		usb_log_error("Device %d tried to release default address, "
+		    "which is not reserved for it.", dev->address);
 	} else {
 		bus->default_address_owner = NULL;
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision eeca8a6576e862d2b94e31531749315d4d938507)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 4603b35bfff3d939df56b8ba944e6aba6c14b3a6)
@@ -114,9 +114,9 @@
 
 /**
- * DDF usbhc_iface callback. Calls the bus operation directly.
+ * DDF usbhc_iface callback. Calls the respective bus operation directly.
  *
  * @param fun DDF function of the device (hub) requesting the address.
  */
-static int reserve_default_address(ddf_fun_t *fun)
+static int default_address_reservation(ddf_fun_t *fun, bool reserve)
 {
 	assert(fun);
@@ -127,26 +127,11 @@
 	assert(dev);
 
-	usb_log_debug("Device %d requested default address", dev->address);
-	return bus_reserve_default_address(hcd->bus, dev);
-}
-
-/**
- * DDF usbhc_iface callback. Calls the bus operation directly.
- *
- * @param fun DDF function of the device (hub) releasing the address.
- */
-static int release_default_address(ddf_fun_t *fun)
-{
-	assert(fun);
-	hc_device_t *hcd = dev_to_hcd(ddf_fun_get_dev(fun));
-	device_t *dev = ddf_fun_data_get(fun);
-	assert(hcd);
-	assert(hcd->bus);
-	assert(dev);
-
-	usb_log_debug("Device %d released default address", dev->address);
-	bus_release_default_address(hcd->bus, dev);
-
-	return EOK;
+	usb_log_debug("Device %d %s default address", dev->address, reserve ? "requested" : "releasing");
+	if (reserve) {
+		return bus_reserve_default_address(hcd->bus, dev);
+	} else {
+		bus_release_default_address(hcd->bus, dev);
+		return EOK;
+	}
 }
 
@@ -169,5 +154,5 @@
 	int err;
 
-	usb_log_debug("Hub %d reported a new %s device on port: %u",
+	usb_log_debug("Hub %d reported a new %s speed device on port: %u",
 	    hub->address, usb_str_speed(speed), port);
 
@@ -310,6 +295,5 @@
 /** USB host controller interface */
 static usbhc_iface_t usbhc_iface = {
-	.reserve_default_address = reserve_default_address,
-	.release_default_address = release_default_address,
+	.default_address_reservation = default_address_reservation,
 
 	.device_enumerate = device_enumerate,
