Index: uspace/srv/fs/devfs/devfs.c
===================================================================
--- uspace/srv/fs/devfs/devfs.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/devfs/devfs.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -41,5 +41,5 @@
 #include <stdio.h>
 #include <ipc/services.h>
-#include <ipc/ns.h>
+#include <ns.h>
 #include <async.h>
 #include <errno.h>
@@ -68,7 +68,8 @@
 		ipc_callid_t callid = async_get_call(&call);
 		
-		switch  (IPC_GET_IMETHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
+		if (!IPC_GET_IMETHOD(call))
 			return;
+		
+		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_OUT_MOUNTED:
 			devfs_mounted(callid, &call);
@@ -119,25 +120,26 @@
 int main(int argc, char *argv[])
 {
-	printf(NAME ": HelenOS Device Filesystem\n");
+	printf("%s: HelenOS Device Filesystem\n", NAME);
 	
 	if (!devfs_init()) {
-		printf(NAME ": failed to initialize devfs\n");
+		printf("%s: failed to initialize devfs\n", NAME);
 		return -1;
 	}
 	
-	int vfs_phone = service_connect_blocking(SERVICE_VFS, 0, 0);
-	if (vfs_phone < EOK) {
-		printf(NAME ": Unable to connect to VFS\n");
+	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
+	    SERVICE_VFS, 0, 0);
+	if (!vfs_sess) {
+		printf("%s: Unable to connect to VFS\n", NAME);
 		return -1;
 	}
 	
-	int rc = fs_register(vfs_phone, &devfs_reg, &devfs_vfs_info,
+	int rc = fs_register(vfs_sess, &devfs_reg, &devfs_vfs_info,
 	    devfs_connection);
 	if (rc != EOK) {
-		printf(NAME ": Failed to register file system (%d)\n", rc);
+		printf("%s: Failed to register file system (%d)\n", NAME, rc);
 		return rc;
 	}
 	
-	printf(NAME ": Accepting connections\n");
+	printf("%s: Accepting connections\n", NAME);
 	task_retval(0);
 	async_manager();
Index: uspace/srv/fs/devfs/devfs_ops.c
===================================================================
--- uspace/srv/fs/devfs/devfs_ops.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/devfs/devfs_ops.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -59,8 +59,8 @@
 typedef struct {
 	devmap_handle_t handle;
-	int phone;		/**< When < 0, the structure is incomplete. */
+	async_sess_t *sess;       /**< If NULL, the structure is incomplete. */
 	size_t refcount;
 	link_t link;
-	fibril_condvar_t cv;	/**< Broadcast when completed. */
+	fibril_condvar_t cv;      /**< Broadcast when completed. */
 } device_t;
 
@@ -232,5 +232,5 @@
 		};
 		link_t *lnk;
-
+		
 		fibril_mutex_lock(&devices_mutex);
 restart:
@@ -244,8 +244,10 @@
 			
 			dev->handle = node->handle;
-			dev->phone = -1;	/* mark as incomplete */
+			
+			/* Mark as incomplete */
+			dev->sess = NULL;
 			dev->refcount = 1;
 			fibril_condvar_initialize(&dev->cv);
-
+			
 			/*
 			 * Insert the incomplete device structure so that other
@@ -254,14 +256,15 @@
 			 */
 			hash_table_insert(&devices, key, &dev->link);
-
+			
 			/*
 			 * Drop the mutex to allow recursive devfs requests.
 			 */
 			fibril_mutex_unlock(&devices_mutex);
-
-			int phone = devmap_device_connect(node->handle, 0);
-
+			
+			async_sess_t *sess = devmap_device_connect(EXCHANGE_SERIALIZE,
+			    node->handle, 0);
+			
 			fibril_mutex_lock(&devices_mutex);
-
+			
 			/*
 			 * Notify possible waiters about this device structure
@@ -269,6 +272,6 @@
 			 */
 			fibril_condvar_broadcast(&dev->cv);
-
-			if (phone < 0) {
+			
+			if (!sess) {
 				/*
 				 * Connecting failed, need to remove the
@@ -277,14 +280,14 @@
 				hash_table_remove(&devices, key, DEVICES_KEYS);
 				fibril_mutex_unlock(&devices_mutex);
-
+				
 				return ENOENT;
 			}
 			
-			/* Set the correct phone. */
-			dev->phone = phone;
+			/* Set the correct session. */
+			dev->sess = sess;
 		} else {
 			device_t *dev = hash_table_get_instance(lnk, device_t, link);
-
-			if (dev->phone < 0) {
+			
+			if (!dev->sess) {
 				/*
 				 * Wait until the device structure is completed
@@ -608,5 +611,5 @@
 		
 		device_t *dev = hash_table_get_instance(lnk, device_t, link);
-		assert(dev->phone >= 0);
+		assert(dev->sess);
 		
 		ipc_callid_t callid;
@@ -619,11 +622,16 @@
 		
 		/* Make a request at the driver */
+		async_exch_t *exch = async_exchange_begin(dev->sess);
+		
 		ipc_call_t answer;
-		aid_t msg = async_send_3(dev->phone, IPC_GET_IMETHOD(*request),
+		aid_t msg = async_send_3(exch, IPC_GET_IMETHOD(*request),
 		    IPC_GET_ARG1(*request), IPC_GET_ARG2(*request),
 		    IPC_GET_ARG3(*request), &answer);
 		
 		/* Forward the IPC_M_DATA_READ request to the driver */
-		async_forward_fast(callid, dev->phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		
+		async_exchange_end(exch);
+		
 		fibril_mutex_unlock(&devices_mutex);
 		
@@ -672,5 +680,5 @@
 		
 		device_t *dev = hash_table_get_instance(lnk, device_t, link);
-		assert(dev->phone >= 0);
+		assert(dev->sess);
 		
 		ipc_callid_t callid;
@@ -683,11 +691,15 @@
 		
 		/* Make a request at the driver */
+		async_exch_t *exch = async_exchange_begin(dev->sess);
+		
 		ipc_call_t answer;
-		aid_t msg = async_send_3(dev->phone, IPC_GET_IMETHOD(*request),
+		aid_t msg = async_send_3(exch, IPC_GET_IMETHOD(*request),
 		    IPC_GET_ARG1(*request), IPC_GET_ARG2(*request),
 		    IPC_GET_ARG3(*request), &answer);
 		
 		/* Forward the IPC_M_DATA_WRITE request to the driver */
-		async_forward_fast(callid, dev->phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		
+		async_exchange_end(exch);
 		
 		fibril_mutex_unlock(&devices_mutex);
@@ -742,9 +754,9 @@
 		
 		device_t *dev = hash_table_get_instance(lnk, device_t, link);
-		assert(dev->phone >= 0);
+		assert(dev->sess);
 		dev->refcount--;
 		
 		if (dev->refcount == 0) {
-			async_hangup(dev->phone);
+			async_hangup(dev->sess);
 			hash_table_remove(&devices, key, DEVICES_KEYS);
 		}
@@ -790,10 +802,14 @@
 		
 		device_t *dev = hash_table_get_instance(lnk, device_t, link);
-		assert(dev->phone >= 0);
+		assert(dev->sess);
 		
 		/* Make a request at the driver */
+		async_exch_t *exch = async_exchange_begin(dev->sess);
+		
 		ipc_call_t answer;
-		aid_t msg = async_send_2(dev->phone, IPC_GET_IMETHOD(*request),
+		aid_t msg = async_send_2(exch, IPC_GET_IMETHOD(*request),
 		    IPC_GET_ARG1(*request), IPC_GET_ARG2(*request), &answer);
+		
+		async_exchange_end(exch);
 		
 		fibril_mutex_unlock(&devices_mutex);
Index: uspace/srv/fs/ext2fs/ext2fs.c
===================================================================
--- uspace/srv/fs/ext2fs/ext2fs.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/ext2fs/ext2fs.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -40,5 +40,5 @@
 #include "ext2fs.h"
 #include <ipc/services.h>
-#include <ipc/ns.h>
+#include <ns.h>
 #include <async.h>
 #include <errno.h>
@@ -87,12 +87,12 @@
 	
 	dprintf(NAME ": connection opened\n");
-	while (1) {
-		ipc_callid_t callid;
+	while (true) {
 		ipc_call_t call;
-	
-		callid = async_get_call(&call);
-		switch  (IPC_GET_IMETHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
+		ipc_callid_t callid = async_get_call(&call);
+		
+		if (!IPC_GET_IMETHOD(call))
 			return;
+		
+		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_OUT_MOUNTED:
 			ext2fs_mounted(callid, &call);
@@ -143,16 +143,14 @@
 int main(int argc, char **argv)
 {
-	int vfs_phone;
-	int rc;
-
 	printf(NAME ": HelenOS EXT2 file system server\n");
-
-	vfs_phone = service_connect_blocking(SERVICE_VFS, 0, 0);
-	if (vfs_phone < EOK) {
+	
+	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
+	    SERVICE_VFS, 0, 0);
+	if (!vfs_sess) {
 		printf(NAME ": failed to connect to VFS\n");
 		return -1;
 	}
 
-	rc = ext2fs_global_init();
+	int rc = ext2fs_global_init();
 	if (rc != EOK) {
 		printf(NAME ": Failed global initialization\n");
@@ -160,5 +158,5 @@
 	}	
 		
-	rc = fs_register(vfs_phone, &ext2fs_reg, &ext2fs_vfs_info, ext2fs_connection);
+	rc = fs_register(vfs_sess, &ext2fs_reg, &ext2fs_vfs_info, ext2fs_connection);
 	if (rc != EOK) {
 		fprintf(stdout, NAME ": Failed to register fs (%d)\n", rc);
Index: uspace/srv/fs/fat/fat.c
===================================================================
--- uspace/srv/fs/fat/fat.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/fat/fat.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -39,5 +39,5 @@
 #include "fat.h"
 #include <ipc/services.h>
-#include <ipc/ns.h>
+#include <ns.h>
 #include <async.h>
 #include <errno.h>
@@ -88,12 +88,13 @@
 	
 	dprintf(NAME ": connection opened\n");
-	while (1) {
-		ipc_callid_t callid;
+	
+	while (true) {
 		ipc_call_t call;
-	
-		callid = async_get_call(&call);
-		switch  (IPC_GET_IMETHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
+		ipc_callid_t callid = async_get_call(&call);
+		
+		if (!IPC_GET_IMETHOD(call))
 			return;
+		
+		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_OUT_MOUNTED:
 			fat_mounted(callid, &call);
@@ -144,20 +145,18 @@
 int main(int argc, char **argv)
 {
-	int vfs_phone;
-	int rc;
-
 	printf(NAME ": HelenOS FAT file system server\n");
-
-	rc = fat_idx_init();
+	
+	int rc = fat_idx_init();
 	if (rc != EOK)
 		goto err;
-
-	vfs_phone = service_connect_blocking(SERVICE_VFS, 0, 0);
-	if (vfs_phone < EOK) {
+	
+	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
+	    SERVICE_VFS, 0, 0);
+	if (!vfs_sess) {
 		printf(NAME ": failed to connect to VFS\n");
 		return -1;
 	}
 	
-	rc = fs_register(vfs_phone, &fat_reg, &fat_vfs_info, fat_connection);
+	rc = fs_register(vfs_sess, &fat_reg, &fat_vfs_info, fat_connection);
 	if (rc != EOK) {
 		fat_idx_fini();
@@ -168,7 +167,8 @@
 	task_retval(0);
 	async_manager();
-	/* not reached */
+	
+	/* Not reached */
 	return 0;
-
+	
 err:
 	printf(NAME ": Failed to register file system (%d)\n", rc);
@@ -178,3 +178,3 @@
 /**
  * @}
- */ 
+ */
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -970,5 +970,5 @@
 
 	/* initialize libblock */
-	rc = block_init(devmap_handle, BS_SIZE);
+	rc = block_init(EXCHANGE_SERIALIZE, devmap_handle, BS_SIZE);
 	if (rc != EOK) {
 		async_answer_0(rid, rc);
Index: uspace/srv/fs/tmpfs/tmpfs.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/tmpfs/tmpfs.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -30,5 +30,5 @@
 /** @addtogroup fs
  * @{
- */ 
+ */
 
 /**
@@ -43,5 +43,5 @@
 #include "tmpfs.h"
 #include <ipc/services.h>
-#include <ipc/ns.h>
+#include <ns.h>
 #include <async.h>
 #include <errno.h>
@@ -94,12 +94,13 @@
 	
 	dprintf(NAME ": connection opened\n");
-	while (1) {
-		ipc_callid_t callid;
+	
+	while (true) {
 		ipc_call_t call;
-	
-		callid = async_get_call(&call);
-		switch  (IPC_GET_IMETHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
+		ipc_callid_t callid = async_get_call(&call);
+		
+		if (!IPC_GET_IMETHOD(call))
 			return;
+		
+		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_OUT_MOUNTED:
 			tmpfs_mounted(callid, &call);
@@ -151,17 +152,18 @@
 {
 	printf(NAME ": HelenOS TMPFS file system server\n");
-
+	
 	if (!tmpfs_init()) {
 		printf(NAME ": failed to initialize TMPFS\n");
 		return -1;
 	}
-
-	int vfs_phone = service_connect_blocking(SERVICE_VFS, 0, 0);
-	if (vfs_phone < EOK) {
+	
+	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
+	    SERVICE_VFS, 0, 0);
+	if (!vfs_sess) {
 		printf(NAME ": Unable to connect to VFS\n");
 		return -1;
 	}
-
-	int rc = fs_register(vfs_phone, &tmpfs_reg, &tmpfs_vfs_info,
+	
+	int rc = fs_register(vfs_sess, &tmpfs_reg, &tmpfs_vfs_info,
 	    tmpfs_connection);
 	if (rc != EOK) {
@@ -169,9 +171,10 @@
 		return rc;
 	}
-
+	
 	printf(NAME ": Accepting connections\n");
 	task_retval(0);
 	async_manager();
-	/* not reached */
+	
+	/* Not reached */
 	return 0;
 }
@@ -179,3 +182,3 @@
 /**
  * @}
- */ 
+ */
Index: uspace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision ff4f073d5adbd648eab87d17baed332691dc2131)
+++ uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -167,5 +167,5 @@
 	int rc;
 
-	rc = block_init(dev, TMPFS_COMM_SIZE);
+	rc = block_init(EXCHANGE_SERIALIZE, dev, TMPFS_COMM_SIZE);
 	if (rc != EOK)
 		return false; 
