Index: uspace/drv/bus/usb/uhcirh/port.c
===================================================================
--- uspace/drv/bus/usb/uhcirh/port.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/drv/bus/usb/uhcirh/port.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -313,6 +313,6 @@
 
 	/* Driver stopped, free used address */
-	ret = usb_hc_unregister_device(&port->hc_connection,
-	    port->attached_device.address);
+	ret = usb_hub_unregister_device(&port->hc_connection,
+	    &port->attached_device);
 	if (ret != EOK) {
 		usb_log_error("%s: Failed to unregister address of removed "
Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -288,6 +288,6 @@
 	port->attached_device.fun = NULL;
 
-	ret = usb_hc_unregister_device(&hub->usb_device->hc_conn,
-	    port->attached_device.address);
+	ret = usb_hub_unregister_device(&hub->usb_device->hc_conn,
+	    &port->attached_device);
 	if (ret != EOK) {
 		usb_log_warning("Failed to unregister address of the "
Index: uspace/lib/usbdev/include/usb/dev/hub.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/hub.h	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/include/usb/dev/hub.h	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -40,4 +40,5 @@
 #include <ddf/driver.h>
 #include <sys/types.h>
+#include <errno.h>
 #include <usb/hc.h>
 
@@ -59,9 +60,15 @@
 } usb_hub_attached_device_t;
 
-usb_address_t usb_hc_request_address(usb_hc_connection_t *, usb_address_t,
-    bool, usb_speed_t);
-int usb_hc_register_device(usb_hc_connection_t *,
+int usb_hub_register_device(usb_hc_connection_t *,
     const usb_hub_attached_device_t *);
-int usb_hc_unregister_device(usb_hc_connection_t *, usb_address_t);
+
+static inline int usb_hub_unregister_device(usb_hc_connection_t *conn,
+    const usb_hub_attached_device_t *attached_device)
+{
+	assert(conn);
+	if (attached_device == NULL)
+		return EBADMEM;
+	return usb_hc_release_address(conn, attached_device->address);
+}
 
 #endif
Index: uspace/lib/usbdev/include/usb/dev/poll.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/poll.h	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/include/usb/dev/poll.h	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -39,4 +39,5 @@
 #include <time.h>
 
+/** Parameters and callbacks for automated polling. */
 typedef struct {
 	/** Level of debugging messages from auto polling.
Index: uspace/lib/usbdev/include/usb/dev/usb_device_connection.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/usb_device_connection.h	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/include/usb/dev/usb_device_connection.h	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -52,9 +52,15 @@
 } usb_device_connection_t;
 
+/** Initialize device connection. Set address and hc connection.
+ * @param instance Structure to initialize.
+ * @param hc_connection. Host controller connection to use.
+ * @param address USB address.
+ * @return Error code.
+ */
 static inline int usb_device_connection_initialize(
-    usb_device_connection_t *connection, usb_hc_connection_t *hc_connection,
+    usb_device_connection_t *instance, usb_hc_connection_t *hc_connection,
     usb_address_t address)
 {
-	assert(connection);
+	assert(instance);
 	if (hc_connection == NULL)
 		return EBADMEM;
@@ -62,44 +68,77 @@
 		return EINVAL;
 
-	connection->hc_connection = hc_connection;
-	connection->address = address;
+	instance->hc_connection = hc_connection;
+	instance->address = address;
 	return EOK;
 }
 /*----------------------------------------------------------------------------*/
-static inline int usb_device_register_endpoint(usb_device_connection_t *conn,
-    usb_endpoint_t ep, usb_transfer_type_t type, usb_direction_t direction,
+/** Register endpoint on the device.
+ * @param instance device connection structure to use.
+ * @param ep USB endpoint number.
+ * @param type Communication type of the endpoint.
+ * @param direction Communication direction.
+ * @param packet_size Maximum packet size for the endpoint.
+ * @param interval Preferrred interval between communication.
+ * @return Error code.
+ */
+static inline int usb_device_register_endpoint(
+    usb_device_connection_t *instance, usb_endpoint_t ep,
+    usb_transfer_type_t type, usb_direction_t direction,
     size_t packet_size, unsigned interval)
 {
-	assert(conn);
-	return usb_hc_register_endpoint(conn->hc_connection,
-	    conn->address, ep, type, direction, packet_size, interval);
+	assert(instance);
+	return usb_hc_register_endpoint(instance->hc_connection,
+	    instance->address, ep, type, direction, packet_size, interval);
 }
 /*----------------------------------------------------------------------------*/
-static inline int usb_device_unregister_endpoint(usb_device_connection_t *conn,
-    usb_endpoint_t ep, usb_direction_t direction)
+/** Unregister endpoint on the device.
+ * @param instance device connection structure
+ * @param ep Endpoint number.
+ * @param dir Communication direction.
+ * @return Error code.
+ */
+static inline int usb_device_unregister_endpoint(
+    usb_device_connection_t *instance, usb_endpoint_t ep, usb_direction_t dir)
 {
-	assert(conn);
-	return usb_hc_unregister_endpoint(conn->hc_connection,
-	    conn->address, ep, direction);
+	assert(instance);
+	return usb_hc_unregister_endpoint(instance->hc_connection,
+	    instance->address, ep, dir);
 }
 /*----------------------------------------------------------------------------*/
-static inline int usb_device_control_read(usb_device_connection_t *conn,
+/** Get data from the device.
+ * @param[in] instance device connection structure to use.
+ * @param[in] ep target endpoint's number.
+ * @param[in] setup Setup stage data (control transfers).
+ * @param[in] data data buffer.
+ * @param[in] size size of the data buffer.
+ * @param[out] rsize bytes actually copied to the buffer.
+ * @return Error code.
+ */
+static inline int usb_device_control_read(usb_device_connection_t *instance,
     usb_endpoint_t ep, uint64_t setup, void *data, size_t size, size_t *rsize)
 {
-	assert(conn);
-	return usb_hc_read(conn->hc_connection,
-	    conn->address, ep, setup, data, size, rsize);
+	assert(instance);
+	return usb_hc_read(instance->hc_connection,
+	    instance->address, ep, setup, data, size, rsize);
 }
 /*----------------------------------------------------------------------------*/
-static inline int usb_device_control_write(usb_device_connection_t *conn,
+/** Send data to the device.
+ * @param instance device connection structure to use.
+ * @param ep target endpoint's number.
+ * @param setup Setup stage data (control transfers).
+ * @param data data buffer.
+ * @param size size of the data buffer.
+ * @return Error code.
+ */
+static inline int usb_device_control_write(usb_device_connection_t *instance,
     usb_endpoint_t ep, uint64_t setup, const void *data, size_t size)
 {
-	assert(conn);
-	return usb_hc_write(conn->hc_connection,
-	    conn->address, ep, setup, data, size);
+	assert(instance);
+	return usb_hc_write(instance->hc_connection,
+	    instance->address, ep, setup, data, size);
 }
 /*----------------------------------------------------------------------------*/
 /** Wrapper for read calls with no setup stage.
- * @param[in] connection hc connection to use.
+ * @param[in] instance device connection structure.
  * @param[in] address USB device address.
  * @param[in] endpoint USB device endpoint.
@@ -109,12 +148,12 @@
  * @return Error code.
  */
-static inline int usb_device_read(usb_device_connection_t *conn,
+static inline int usb_device_read(usb_device_connection_t *instance,
     usb_endpoint_t ep, void *data, size_t size, size_t *real_size)
 {
-	return usb_device_control_read(conn, ep, 0, data, size, real_size);
+	return usb_device_control_read(instance, ep, 0, data, size, real_size);
 }
 /*----------------------------------------------------------------------------*/
 /** Wrapper for write calls with no setup stage.
- * @param connection hc connection to use.
+ * @param instance device connection structure.
  * @param address USB device address.
  * @param endpoint USB device endpoint.
@@ -123,8 +162,8 @@
  * @return Error code.
  */
-static inline int usb_device_write(usb_device_connection_t *conn,
+static inline int usb_device_write(usb_device_connection_t *instance,
     usb_endpoint_t ep, const void *data, size_t size)
 {
-	return usb_device_control_write(conn, ep, 0, data, size);
+	return usb_device_control_write(instance, ep, 0, data, size);
 }
 #endif
Index: uspace/lib/usbdev/src/altiface.c
===================================================================
--- uspace/lib/usbdev/src/altiface.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/src/altiface.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -167,9 +167,13 @@
 }
 
-void usb_alternate_interfaces_deinit(usb_alternate_interfaces_t *alternate)
+/** Clean initialized structure.
+ * @param instance structure do deinitialize.
+ */
+void usb_alternate_interfaces_deinit(usb_alternate_interfaces_t *instance)
 {
-	if (!alternate)
+	if (!instance)
 		return;
-	free(alternate->alternatives);
+	free(instance->alternatives);
+	instance->alternatives = NULL;
 }
 /**
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -516,4 +516,5 @@
 	}
 
+	/* Open hc connection for pipe registration. */
 	rc = usb_hc_connection_open(&usb_dev->hc_conn);
 	if (rc != EOK) {
@@ -575,4 +576,9 @@
 }
 
+/** Allocate driver specific data.
+ * @param usb_dev usb_device structure.
+ * @param size requested data size.
+ * @return Pointer to the newly allocated space, NULL on failure.
+ */
 void * usb_device_data_alloc(usb_device_t *usb_dev, size_t size)
 {
Index: uspace/lib/usbdev/src/devpoll.c
===================================================================
--- uspace/lib/usbdev/src/devpoll.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/src/devpoll.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -46,10 +46,16 @@
 /** Data needed for polling. */
 typedef struct {
+	/** Parameters for automated polling. */
 	usb_device_auto_polling_t auto_polling;
 
+	/** USB device to poll. */
 	usb_device_t *dev;
+	/** Device pipe to use for polling. */
 	size_t pipe_index;
+	/** Size of the recieved data. */
 	size_t request_size;
+	/** Data buffer. */
 	uint8_t *buffer;
+	/** Argument to pass to callbacks. */
 	void *custom_arg;
 } polling_data_t;
Index: uspace/lib/usbdev/src/hub.c
===================================================================
--- uspace/lib/usbdev/src/hub.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/src/hub.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -38,5 +38,4 @@
 #include <usb/dev/recognise.h>
 #include <usb/debug.h>
-#include <usbhc_iface.h>
 #include <errno.h>
 #include <assert.h>
@@ -45,22 +44,8 @@
 #include <async.h>
 
-/** How much time to wait between attempts to register endpoint 0:0.
+/** How much time to wait between attempts to get the default address.
  * The value is based on typical value for port reset + some overhead.
  */
-#define ENDPOINT_0_0_REGISTER_ATTEMPT_DELAY_USEC (1000 * (10 + 2))
-
-/** Check that HC connection is alright.
- *
- * @param conn Connection to be checked.
- */
-#define CHECK_CONNECTION(conn) \
-	do { \
-		assert((conn)); \
-		if (!usb_hc_connection_is_opened((conn))) { \
-			usb_log_error("Connection not open.\n"); \
-			return ENOTCONN; \
-		} \
-	} while (false)
-
+#define DEFAULT_ADDRESS_ATTEMPT_DELAY_USEC (1000 * (10 + 2))
 
 /** Inform host controller about new device.
@@ -70,39 +55,12 @@
  * @return Error code.
  */
-int usb_hc_register_device(usb_hc_connection_t *connection,
+int usb_hub_register_device(usb_hc_connection_t *connection,
     const usb_hub_attached_device_t *attached_device)
 {
-//	CHECK_CONNECTION(connection);
+	assert(connection);
 	if (attached_device == NULL || attached_device->fun == NULL)
-		return EINVAL;
-
-	async_exch_t *exch = async_exchange_begin(connection->hc_sess);
-	if (!exch)
-		return ENOMEM;
-	const int ret = usbhc_bind_address(exch,
+		return EBADMEM;
+	return usb_hc_bind_address(connection,
 	    attached_device->address, attached_device->fun->handle);
-	async_exchange_end(exch);
-
-	return ret;
-}
-
-/** Inform host controller about device removal.
- *
- * @param connection Opened connection to host controller.
- * @param address Address of the device that is being removed.
- * @return Error code.
- */
-int usb_hc_unregister_device(usb_hc_connection_t *connection,
-    usb_address_t address)
-{
-//	CHECK_CONNECTION(connection);
-
-	async_exch_t *exch = async_exchange_begin(connection->hc_sess);
-	if (!exch)
-		return ENOMEM;
-	const int ret = usbhc_release_address(exch, address);
-	async_exchange_end(exch);
-
-	return ret;
 }
 
@@ -144,8 +102,7 @@
 		    "Failed to unregister the old pipe on address change.\n");
 	}
-	/* Address changed. We can release the default, thus
-	 * allowing other to access the default address. */
-	usb_hc_unregister_device(pipe->wire->hc_connection,
-	    pipe->wire->address);
+	/* Address changed. We can release the old one, thus
+	 * allowing other to us it. */
+	usb_hc_release_address(pipe->wire->hc_connection, pipe->wire->address);
 
 	/* The address is already changed so set it in the wire */
@@ -256,5 +213,5 @@
 		if (rc == ENOENT) {
 			/* Do not overheat the CPU ;-). */
-			async_usleep(ENDPOINT_0_0_REGISTER_ATTEMPT_DELAY_USEC);
+			async_usleep(DEFAULT_ADDRESS_ATTEMPT_DELAY_USEC);
 		}
 	} while (rc == ENOENT);
@@ -328,5 +285,5 @@
 
 	/* Inform the host controller about the handle. */
-	rc = usb_hc_register_device(hc_conn, &new_device);
+	rc = usb_hub_register_device(hc_conn, &new_device);
 	if (rc != EOK) {
 		/* We know nothing about that data. */
@@ -353,6 +310,6 @@
 	 */
 leave_release_default_address:
-	if (usb_hc_unregister_device(hc_conn, USB_ADDRESS_DEFAULT) != EOK)
-		usb_log_warning("%s: Failed to unregister defaut device.\n",
+	if (usb_hc_release_address(hc_conn, USB_ADDRESS_DEFAULT) != EOK)
+		usb_log_warning("%s: Failed to release defaut address.\n",
 		    __FUNCTION__);
 
@@ -363,7 +320,7 @@
 		    __FUNCTION__);
 
-	if (usb_hc_unregister_device(hc_conn, dev_addr) != EOK)
-		usb_log_warning("%s: Failed to unregister device.\n",
-		    __FUNCTION__);
+	if (usb_hc_release_address(hc_conn, dev_addr) != EOK)
+		usb_log_warning("%s: Failed to release address: %d.\n",
+		    __FUNCTION__, dev_addr);
 
 close_connection:
Index: uspace/lib/usbdev/src/recognise.c
===================================================================
--- uspace/lib/usbdev/src/recognise.c	(revision 22ecbde9e8df22c7cad4263622c73f87d711ae3f)
+++ uspace/lib/usbdev/src/recognise.c	(revision 6e3c00597c8370c902914c8528e2d7eebd7aa5c6)
@@ -324,5 +324,4 @@
 	}
 
-
 	/** Index to append after device name for uniqueness. */
 	static atomic_t device_name_index = {0};
