Index: uspace/lib/usbhost/src/bus.c
===================================================================
--- uspace/lib/usbhost/src/bus.c	(revision 56257bacb801bcdf1177e596773f80cf4e253e5d)
+++ uspace/lib/usbhost/src/bus.c	(revision 5e2b1ae6fe35b358dd5e76f6cedd1d7991973fe2)
@@ -54,4 +54,5 @@
 	fibril_mutex_initialize(&bus->guard);
 	bus->device_size = device_size;
+	bus->default_address_speed = USB_SPEED_MAX;
 }
 
@@ -239,26 +240,19 @@
 	assert(bus);
 
-	const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, reserve_default_address);
-	if (!ops)
-		return ENOTSUP;
-
 	fibril_mutex_lock(&bus->guard);
-	const int r = ops->reserve_default_address(bus, speed);
-	fibril_mutex_unlock(&bus->guard);
-	return r;
-}
-
-int bus_release_default_address(bus_t *bus)
+	if (bus->default_address_speed != USB_SPEED_MAX) {
+		fibril_mutex_unlock(&bus->guard);
+		return EAGAIN;
+	} else {
+		bus->default_address_speed = speed;
+		fibril_mutex_unlock(&bus->guard);
+		return EOK;
+	}
+}
+
+void bus_release_default_address(bus_t *bus)
 {
 	assert(bus);
-
-	const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, release_default_address);
-	if (!ops)
-		return ENOTSUP;
-
-	fibril_mutex_lock(&bus->guard);
-	const int r = ops->release_default_address(bus);
-	fibril_mutex_unlock(&bus->guard);
-	return r;
+	bus->default_address_speed = USB_SPEED_MAX;
 }
 
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 56257bacb801bcdf1177e596773f80cf4e253e5d)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 5e2b1ae6fe35b358dd5e76f6cedd1d7991973fe2)
@@ -137,5 +137,7 @@
 
 	usb_log_debug("Device %d released default address\n", dev->address);
-	return bus_release_default_address(hcd->bus);
+	bus_release_default_address(hcd->bus);
+
+	return EOK;
 }
 
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision 56257bacb801bcdf1177e596773f80cf4e253e5d)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision 5e2b1ae6fe35b358dd5e76f6cedd1d7991973fe2)
@@ -100,9 +100,8 @@
  * @param bus usb_device_manager
  * @param addr Pointer to requested address value, place to store new address
- * @parma strict Fail if the requested address is not available.
  * @return Error code.
  * @note Default address is only available in strict mode.
  */
-static int request_address(usb2_bus_t *bus, usb_address_t *addr, bool strict)
+static int request_address(usb2_bus_t *bus, usb_address_t *addr)
 {
 	int err;
@@ -114,20 +113,10 @@
 		return EINVAL;
 
-	/* Only grant default address to strict requests */
-	if ((*addr == USB_ADDRESS_DEFAULT) && !strict) {
-		if ((err = get_free_address(bus, addr)))
-			return err;
-	}
-	else if (bus->address_occupied[*addr]) {
-		if (strict) {
-			return ENOENT;
-		}
-		if ((err = get_free_address(bus, addr)))
-			return err;
-	}
+	if ((err = get_free_address(bus, addr)))
+		return err;
 
 	assert(usb_address_is_valid(*addr));
 	assert(bus->address_occupied[*addr] == false);
-	assert(*addr != USB_ADDRESS_DEFAULT || strict);
+	assert(*addr != USB_ADDRESS_DEFAULT);
 
 	bus->address_occupied[*addr] = true;
@@ -152,5 +141,5 @@
 	/** Reserve address early, we want pretty log messages */
 	usb_address_t address = USB_ADDRESS_DEFAULT;
-	if ((err = request_address(bus, &address, false))) {
+	if ((err = request_address(bus, &address))) {
 		usb_log_error("Failed to reserve new address: %s.",
 		    str_error(err));
@@ -231,5 +220,5 @@
 	 * default address.
 	 */
-	dev->speed = bus->default_address_speed;
+	dev->speed = bus->base.default_address_speed;
 	usb_log_debug("Found new %s speed USB device.", usb_str_speed(dev->speed));
 
@@ -301,24 +290,5 @@
 }
 
-static int usb2_bus_register_default_address(bus_t *bus_base, usb_speed_t speed)
-{
-	usb2_bus_t *bus = bus_to_usb2_bus(bus_base);
-	usb_address_t addr = USB_ADDRESS_DEFAULT;
-	const int err = request_address(bus, &addr, true);
-	if (err)
-		return err;
-	bus->default_address_speed = speed;
-	return EOK;
-}
-
-static int usb2_bus_release_default_address(bus_t *bus_base)
-{
-	usb2_bus_t *bus = bus_to_usb2_bus(bus_base);
-	return release_address(bus, USB_ADDRESS_DEFAULT);
-}
-
 const bus_ops_t usb2_bus_ops = {
-	.reserve_default_address = usb2_bus_register_default_address,
-	.release_default_address = usb2_bus_release_default_address,
 	.device_enumerate = usb2_bus_device_enumerate,
 	.endpoint_create = usb2_bus_create_ep,
@@ -334,5 +304,5 @@
  * @return Error code.
  */
-int usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth)
+void usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth)
 {
 	assert(bus);
@@ -342,6 +312,4 @@
 
 	bus->free_bw = available_bandwidth;
-
-	return EOK;
 }
 /**
