Index: uspace/lib/usb/include/usb/hc.h
===================================================================
--- uspace/lib/usb/include/usb/hc.h	(revision 6a2187756caab77b286ddbfe813ebd3a703224f4)
+++ uspace/lib/usb/include/usb/hc.h	(revision cbd568be9b1b625974039b24a0ae1c8f7dc2ec3e)
@@ -31,5 +31,5 @@
  */
 /** @file
- * General communication with host controller driver.
+ * General communication with host controller.
  */
 #ifndef LIBUSB_HC_H_
@@ -42,5 +42,11 @@
 #include <usb/usb.h>
 
-/** Connection to the host controller driver. */
+/** Connection to the host controller driver.
+ *
+ * This is a high level IPC communication wrapper. After the structure has been
+ * initialized using devman handle of an USB host controller, it
+ * will manage all communication to that host controller, including session
+ * creation/destruction and proper IPC protocol.
+ */
 typedef struct {
 	/** Devman handle of the host controller. */
@@ -88,7 +94,7 @@
     usb_endpoint_t, usb_direction_t);
 
-int usb_hc_control_read(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
+int usb_hc_read(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
     uint64_t, void *, size_t, size_t *);
-int usb_hc_control_write(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
+int usb_hc_write(usb_hc_connection_t *, usb_address_t, usb_endpoint_t,
     uint64_t, const void *, size_t);
 
Index: uspace/lib/usb/src/hc.c
===================================================================
--- uspace/lib/usb/src/hc.c	(revision 6a2187756caab77b286ddbfe813ebd3a703224f4)
+++ uspace/lib/usb/src/hc.c	(revision cbd568be9b1b625974039b24a0ae1c8f7dc2ec3e)
@@ -64,4 +64,10 @@
 	assert(connection);
 	fibril_mutex_lock(&connection->guard);
+	if (connection->ref_count == 0) {
+		/* Closing already closed connection... */
+		assert(connection->hc_sess = NULL);
+		fibril_mutex_unlock(&connection->guard);
+		return EOK;
+	}
 	--connection->ref_count;
 	int ret = EOK;
@@ -232,5 +238,5 @@
 }
 /*----------------------------------------------------------------------------*/
-int usb_hc_control_read(usb_hc_connection_t *connection, usb_address_t address,
+int usb_hc_read(usb_hc_connection_t *connection, usb_address_t address,
     usb_endpoint_t endpoint, uint64_t setup, void *data, size_t size,
     size_t *real_size)
@@ -246,5 +252,5 @@
 }
 /*----------------------------------------------------------------------------*/
-int usb_hc_control_write(usb_hc_connection_t *connection, usb_address_t address,
+int usb_hc_write(usb_hc_connection_t *connection, usb_address_t address,
     usb_endpoint_t endpoint, uint64_t setup, const void *data, size_t size)
 {
