Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision b688fd884822ca3ea5bb45f1b6b2ca18b04efbcc)
+++ uspace/lib/drv/generic/driver.c	(revision df138361db097bfad037b09eb2abbae6e0931ac3)
@@ -53,6 +53,4 @@
 #include <devman.h>
 
-#include <ipc/driver.h>
-
 #include "dev_iface.h"
 #include "ddf/driver.h"
@@ -130,5 +128,10 @@
 	
 	char *dev_name = NULL;
-	async_data_write_accept((void **) &dev_name, true, 0, 0, 0, 0);
+	int rc = async_data_write_accept((void **) &dev_name, true, 0, 0, 0, 0);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
 	dev->name = dev_name;
 	
@@ -278,5 +281,6 @@
 }
 
-static void driver_connection_devman(ipc_callid_t iid, ipc_call_t *icall)
+static void driver_connection_devman(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/* Accept connection */
@@ -436,45 +440,14 @@
 }
 
-static void driver_connection_driver(ipc_callid_t iid, ipc_call_t *icall)
+static void driver_connection_driver(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	driver_connection_gen(iid, icall, true);
 }
 
-static void driver_connection_client(ipc_callid_t iid, ipc_call_t *icall)
+static void driver_connection_client(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	driver_connection_gen(iid, icall, false);
-}
-
-/** Function for handling connections to device driver. */
-static void driver_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
-{
-	sysarg_t conn_type;
-
-	if (iid == 0) {
-		/* Callback connection from devman */
-		/* XXX Use separate handler for this type of connection */
-		conn_type = DRIVER_DEVMAN;
-	} else {
-		conn_type = IPC_GET_ARG1(*icall);
-	}
-
-	/* Select interface */
-	switch (conn_type) {
-	case DRIVER_DEVMAN:
-		/* Handle request from device manager */
-		driver_connection_devman(iid, icall);
-		break;
-	case DRIVER_DRIVER:
-		/* Handle request from drivers of child devices */
-		driver_connection_driver(iid, icall);
-		break;
-	case DRIVER_CLIENT:
-		/* Handle request from client applications */
-		driver_connection_client(iid, icall);
-		break;
-	default:
-		/* No such interface */
-		async_answer_0(iid, ENOENT);
-	}
 }
 
@@ -620,12 +593,13 @@
  * The session will be automatically closed when @a dev is destroyed.
  *
- * @param dev	Device
- * @param mgmt	Exchange management style
- * @return	New session or NULL if session could not be created
- */
-async_sess_t *ddf_dev_parent_sess_create(ddf_dev_t *dev, exch_mgmt_t mgmt)
+ * @param dev Device
+ *
+ * @return New session or NULL if session could not be created
+ *
+ */
+async_sess_t *ddf_dev_parent_sess_create(ddf_dev_t *dev)
 {
 	assert(dev->parent_sess == NULL);
-	dev->parent_sess = devman_parent_device_connect(mgmt, dev->handle,
+	dev->parent_sess = devman_parent_device_connect(dev->handle,
 	    IPC_FLAG_BLOCKING);
 
@@ -955,6 +929,18 @@
 	 * incoming connections.
 	 */
-	async_set_fallback_port_handler(driver_connection, NULL);
-	int rc = devman_driver_register(driver->name);
+	port_id_t port;
+	int rc = async_create_port(INTERFACE_DDF_DRIVER, driver_connection_driver,
+	    NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_DDF_DEVMAN, driver_connection_devman,
+	    NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	async_set_fallback_port_handler(driver_connection_client, NULL);
+	
+	rc = devman_driver_register(driver->name);
 	if (rc != EOK) {
 		printf("Error: Failed to register driver with device manager "
Index: uspace/lib/drv/generic/remote_ahci.c
===================================================================
--- uspace/lib/drv/generic/remote_ahci.c	(revision b688fd884822ca3ea5bb45f1b6b2ca18b04efbcc)
+++ uspace/lib/drv/generic/remote_ahci.c	(revision df138361db097bfad037b09eb2abbae6e0931ac3)
@@ -72,6 +72,5 @@
 	
 	if ((devn_size > 5) && (str_lcmp(devn, "ahci_", 5) == 0)) {
-		async_sess_t *sess = devman_device_connect(EXCHANGE_PARALLEL,
-		    funh, IPC_FLAG_BLOCKING);
+		async_sess_t *sess = devman_device_connect(funh, IPC_FLAG_BLOCKING);
 		
 		if (sess) {
Index: uspace/lib/drv/generic/remote_audio_pcm.c
===================================================================
--- uspace/lib/drv/generic/remote_audio_pcm.c	(revision b688fd884822ca3ea5bb45f1b6b2ca18b04efbcc)
+++ uspace/lib/drv/generic/remote_audio_pcm.c	(revision df138361db097bfad037b09eb2abbae6e0931ac3)
@@ -146,6 +146,5 @@
 	if (ret != EOK)
 		return NULL;
-	return devman_device_connect(EXCHANGE_SERIALIZE, device_handle,
-	    IPC_FLAG_BLOCKING);
+	return devman_device_connect(device_handle, IPC_FLAG_BLOCKING);
 }
 
@@ -158,5 +157,5 @@
 audio_pcm_sess_t *audio_pcm_open_service(service_id_t id)
 {
-	return loc_service_connect(EXCHANGE_SERIALIZE, id, IPC_FLAG_BLOCKING);
+	return loc_service_connect(id, INTERFACE_DDF, IPC_FLAG_BLOCKING);
 }
 
@@ -322,9 +321,13 @@
 
 	async_exch_t *exch = async_exchange_begin(sess);
+	
 	int ret = async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
 	    IPC_M_AUDIO_PCM_REGISTER_EVENTS);
 	if (ret == EOK) {
-		ret = async_connect_to_me(exch, 0, 0, 0, event_callback, arg);
-	}
+		port_id_t port;
+		ret = async_create_callback_port(exch, INTERFACE_AUDIO_PCM_CB, 0, 0,
+		    event_callback, arg, &port);
+	}
+	
 	async_exchange_end(exch);
 	return ret;
Index: uspace/lib/drv/generic/remote_nic.c
===================================================================
--- uspace/lib/drv/generic/remote_nic.c	(revision b688fd884822ca3ea5bb45f1b6b2ca18b04efbcc)
+++ uspace/lib/drv/generic/remote_nic.c	(revision df138361db097bfad037b09eb2abbae6e0931ac3)
@@ -137,5 +137,7 @@
 	    NIC_CALLBACK_CREATE, &answer);
 	
-	rc = async_connect_to_me(exch, 0, 0, 0, cfun, carg);
+	port_id_t port;
+	rc = async_create_callback_port(exch, INTERFACE_NIC_CB, 0, 0,
+	    cfun, carg, &port);
 	if (rc != EOK) {
 		async_forget(req);
