Index: uspace/lib/usbhost/include/usb/host/usb_device_manager.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_device_manager.h	(revision 57e06ef438456990c2fdcdff3e56ebd1b0fa0c97)
+++ uspace/lib/usbhost/include/usb/host/usb_device_manager.h	(revision 2fd1f0c6600551879c294c9568c0922247784fad)
@@ -69,8 +69,8 @@
     usb_device_manager_t *instance, usb_speed_t speed);
 
-void usb_device_manager_bind(usb_device_manager_t *instance,
+int usb_device_manager_bind(usb_device_manager_t *instance,
     usb_address_t address, devman_handle_t handle);
 
-void usb_device_manager_release(usb_device_manager_t *instance,
+int usb_device_manager_release(usb_device_manager_t *instance,
     usb_address_t address);
 
Index: uspace/lib/usbhost/src/iface.c
===================================================================
--- uspace/lib/usbhost/src/iface.c	(revision 57e06ef438456990c2fdcdff3e56ebd1b0fa0c97)
+++ uspace/lib/usbhost/src/iface.c	(revision 2fd1f0c6600551879c294c9568c0922247784fad)
@@ -128,6 +128,5 @@
 
 	usb_log_debug("Address bind %d-%" PRIun ".\n", address, handle);
-	usb_device_manager_bind(&hcd->dev_manager, address, handle);
-	return EOK;
+	return usb_device_manager_bind(&hcd->dev_manager, address, handle);
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/lib/usbhost/src/usb_device_manager.c
===================================================================
--- uspace/lib/usbhost/src/usb_device_manager.c	(revision 57e06ef438456990c2fdcdff3e56ebd1b0fa0c97)
+++ uspace/lib/usbhost/src/usb_device_manager.c	(revision 2fd1f0c6600551879c294c9568c0922247784fad)
@@ -47,6 +47,5 @@
 {
 	assert(instance);
-	unsigned i = 0;
-	for (; i < USB_ADDRESS_COUNT; ++i) {
+	for (unsigned i = 0; i < USB_ADDRESS_COUNT; ++i) {
 		instance->devices[i].occupied = false;
 		instance->devices[i].handle = 0;
@@ -101,17 +100,28 @@
  * @param[in] address Device address
  * @param[in] handle Devman handle of the device.
- */
-void usb_device_manager_bind(usb_device_manager_t *instance,
+ * @return Error code.
+ */
+int usb_device_manager_bind(usb_device_manager_t *instance,
     usb_address_t address, devman_handle_t handle)
 {
-	assert(instance);
-	fibril_mutex_lock(&instance->guard);
-
-	assert(address > 0);
-	assert(address <= USB11_ADDRESS_MAX);
-	assert(instance->devices[address].occupied);
-
+	if ((address <= 0) || (address >= USB_ADDRESS_COUNT)) {
+		return EINVAL;
+	}
+	assert(instance);
+
+	fibril_mutex_lock(&instance->guard);
+	/* Not reserved */
+	if (!instance->devices[address].occupied) {
+		fibril_mutex_unlock(&instance->guard);
+		return ENOENT;
+	}
+	/* Already bound */
+	if (instance->devices[address].handle != 0) {
+		fibril_mutex_unlock(&instance->guard);
+		return EEXISTS;
+	}
 	instance->devices[address].handle = handle;
 	fibril_mutex_unlock(&instance->guard);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -120,18 +130,24 @@
  * @param[in] instance Device manager structure to use.
  * @param[in] address Device address
- */
-void usb_device_manager_release(
+ * @return Error code.
+ */
+int usb_device_manager_release(
     usb_device_manager_t *instance, usb_address_t address)
 {
-	assert(instance);
-	assert(address > 0);
-	assert(address <= USB11_ADDRESS_MAX);
-
-	fibril_mutex_lock(&instance->guard);
-	assert(instance->devices[address].occupied);
+	if ((address <= 0) || (address >= USB_ADDRESS_COUNT)) {
+		return EINVAL;
+	}
+	assert(instance);
+
+	fibril_mutex_lock(&instance->guard);
+	if (!instance->devices[address].occupied) {
+		fibril_mutex_unlock(&instance->guard);
+		return ENOENT;
+	}
 
 	instance->devices[address].occupied = false;
 	instance->devices[address].handle = 0;
 	fibril_mutex_unlock(&instance->guard);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -147,6 +163,6 @@
 	assert(instance);
 	fibril_mutex_lock(&instance->guard);
-	usb_address_t address = 1;
-	while (address <= USB11_ADDRESS_MAX) {
+	for (usb_address_t address = 1; address <= USB11_ADDRESS_MAX; ++address)
+	{
 		if (instance->devices[address].handle == handle) {
 			assert(instance->devices[address].occupied);
@@ -154,5 +170,4 @@
 			return address;
 		}
-		++address;
 	}
 	fibril_mutex_unlock(&instance->guard);
