Index: uspace/lib/usb/src/ddfiface.c
===================================================================
--- uspace/lib/usb/src/ddfiface.c	(revision e8f826b3c79eec54dedbbc97e3d25b05e5c2c8a2)
+++ uspace/lib/usb/src/ddfiface.c	(revision 79a141a1d398510dededba42ea38c1e569fd6933)
@@ -78,23 +78,24 @@
 {
 	assert(fun != NULL);
-
-	int parent_phone = devman_parent_device_connect(fun->handle,
+	
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle,
 	    IPC_FLAG_BLOCKING);
-	if (parent_phone < 0) {
-		return parent_phone;
-	}
-
+	if (!parent_sess)
+		return ENOMEM;
+	
+	async_exch_t *exch = async_exchange_begin(parent_sess);
+	
 	sysarg_t hc_handle;
-	int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
+	int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
 	    IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &hc_handle);
-
-	async_hangup(parent_phone);
-
-	if (rc != EOK) {
+	
+	async_exchange_end(exch);
+	async_hangup(parent_sess);
+	
+	if (rc != EOK)
 		return rc;
-	}
-
+	
 	*handle = hc_handle;
-
 	return EOK;
 }
@@ -128,24 +129,26 @@
 {
 	assert(fun);
-	int parent_phone = devman_parent_device_connect(fun->handle,
+	
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle,
 	    IPC_FLAG_BLOCKING);
-	if (parent_phone < 0) {
-		return parent_phone;
-	}
-
+	if (!parent_sess)
+		return ENOMEM;
+	
+	async_exch_t *exch = async_exchange_begin(parent_sess);
+	
 	sysarg_t addr;
-	int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
+	int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
 	    IPC_M_USB_GET_ADDRESS, handle, &addr);
-
-	async_hangup(parent_phone);
-
-	if (rc != EOK) {
+	
+	async_exchange_end(exch);
+	async_hangup(parent_sess);
+	
+	if (rc != EOK)
 		return rc;
-	}
-
-	if (address != NULL) {
+	
+	if (address != NULL)
 		*address = (usb_address_t) addr;
-	}
-
+	
 	return EOK;
 }
Index: uspace/lib/usb/src/hc.c
===================================================================
--- uspace/lib/usb/src/hc.c	(revision e8f826b3c79eec54dedbbc97e3d25b05e5c2c8a2)
+++ uspace/lib/usb/src/hc.c	(revision 79a141a1d398510dededba42ea38c1e569fd6933)
@@ -81,5 +81,5 @@
 
 	connection->hc_handle = hc_handle;
-	connection->hc_phone = -1;
+	connection->hc_sess = NULL;
 
 	return EOK;
@@ -94,16 +94,14 @@
 {
 	assert(connection);
-
-	if (usb_hc_connection_is_opened(connection)) {
+	
+	if (usb_hc_connection_is_opened(connection))
 		return EBUSY;
-	}
-
-	int phone = devman_device_connect(connection->hc_handle, 0);
-	if (phone < 0) {
-		return phone;
-	}
-
-	connection->hc_phone = phone;
-
+	
+	async_sess_t *sess = devman_device_connect(EXCHANGE_SERIALIZE,
+	    connection->hc_handle, 0);
+	if (!sess)
+		return ENOMEM;
+	
+	connection->hc_sess = sess;
 	return EOK;
 }
@@ -117,6 +115,5 @@
 {
 	assert(connection);
-
-	return (connection->hc_phone >= 0);
+	return (connection->hc_sess != NULL);
 }
 
@@ -134,10 +131,10 @@
 	}
 
-	int rc = async_hangup(connection->hc_phone);
+	int rc = async_hangup(connection->hc_sess);
 	if (rc != EOK) {
 		return rc;
 	}
 
-	connection->hc_phone = -1;
+	connection->hc_sess = NULL;
 
 	return EOK;
@@ -154,17 +151,19 @@
     usb_address_t address, devman_handle_t *handle)
 {
-	if (!usb_hc_connection_is_opened(connection)) {
+	if (!usb_hc_connection_is_opened(connection))
 		return ENOENT;
-	}
-
+	
+	async_exch_t *exch = async_exchange_begin(connection->hc_sess);
+	
 	sysarg_t tmp;
-	int rc = async_req_2_1(connection->hc_phone,
-	    DEV_IFACE_ID(USBHC_DEV_IFACE),
+	int rc = async_req_2_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
 	    IPC_M_USBHC_GET_HANDLE_BY_ADDRESS,
 	    address, &tmp);
-	if ((rc == EOK) && (handle != NULL)) {
+	
+	async_exchange_end(exch);
+	
+	if ((rc == EOK) && (handle != NULL))
 		*handle = tmp;
-	}
-
+	
 	return rc;
 }
@@ -177,22 +176,23 @@
 usb_address_t usb_hc_get_address_by_handle(devman_handle_t dev_handle)
 {
-	int parent_phone = devman_parent_device_connect(dev_handle,
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE, dev_handle,
 	    IPC_FLAG_BLOCKING);
-	if (parent_phone < 0) {
-		return parent_phone;
-	}
-
+	if (!parent_sess)
+		return ENOMEM;
+	
+	async_exch_t *exch = async_exchange_begin(parent_sess);
+	
 	sysarg_t address;
-
-	int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
+	int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
 	    IPC_M_USB_GET_ADDRESS,
 	    dev_handle, &address);
-
-	if (rc != EOK) {
-		return rc;
-	}
-
-	async_hangup(parent_phone);
-
+	
+	async_exchange_end(exch);
+	async_hangup(parent_sess);
+	
+	if (rc != EOK)
+		return rc;
+	
 	return (usb_address_t) address;
 }
@@ -240,24 +240,25 @@
 int usb_hc_find(devman_handle_t device_handle, devman_handle_t *hc_handle)
 {
-	int parent_phone = devman_parent_device_connect(device_handle,
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE, device_handle,
 	    IPC_FLAG_BLOCKING);
-	if (parent_phone < 0) {
-		return parent_phone;
-	}
-
+	if (!parent_sess)
+		return ENOMEM;
+	
+	async_exch_t *exch = async_exchange_begin(parent_sess);
+	
 	devman_handle_t h;
-	int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
+	int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
 	    IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h);
-
-	async_hangup(parent_phone);
-
-	if (rc != EOK) {
-		return rc;
-	}
-
-	if (hc_handle != NULL) {
+	
+	async_exchange_end(exch);
+	async_hangup(parent_sess);
+	
+	if (rc != EOK)
+		return rc;
+	
+	if (hc_handle != NULL)
 		*hc_handle = h;
-	}
-
+	
 	return EOK;
 }
