Index: uspace/srv/audio/hound/audio_sink.c
===================================================================
--- uspace/srv/audio/hound/audio_sink.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/audio/hound/audio_sink.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -103,5 +103,5 @@
 	if (!pcm_format_is_any(&sink->format)) {
 		log_debug("Sink %s already has a format", sink->name);
-		return EEXISTS;
+		return EEXIST;
 	}
 	const pcm_format_t old_format = sink->format;
Index: uspace/srv/audio/hound/hound.c
===================================================================
--- uspace/srv/audio/hound/hound.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/audio/hound/hound.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -267,5 +267,5 @@
 		if (dev->id == id) {
 			log_debug("Device with id %zu is already present", id);
-			return EEXISTS;
+			return EEXIST;
 		}
 	}
@@ -274,5 +274,5 @@
 	if (dev) {
 		log_debug("Device with name %s is already present", name);
-		return EEXISTS;
+		return EEXIST;
 	}
 
@@ -341,5 +341,5 @@
 		log_debug("Source by that name already exists");
 		fibril_mutex_unlock(&hound->list_guard);
-		return EEXISTS;
+		return EEXIST;
 	}
 	list_append(&source->link, &hound->sources);
@@ -365,5 +365,5 @@
 		log_debug("Sink by that name already exists");
 		fibril_mutex_unlock(&hound->list_guard);
-		return EEXISTS;
+		return EEXIST;
 	}
 	list_append(&sink->link, &hound->sinks);
@@ -420,5 +420,5 @@
 
 	fibril_mutex_lock(&hound->list_guard);
-	const size_t count = list_count(&hound->sources);
+	const unsigned long count = list_count(&hound->sources);
 	if (count == 0) {
 		*list = NULL;
@@ -429,5 +429,5 @@
 	const char **names = calloc(count, sizeof(char *));
 	int ret = names ? EOK : ENOMEM;
-	for (size_t i = 0; i < count && ret == EOK; ++i) {
+	for (unsigned long i = 0; i < count && ret == EOK; ++i) {
 		link_t *slink = list_nth(&hound->sources, i);
 		audio_source_t *source = audio_source_list_instance(slink);
Index: uspace/srv/audio/hound/hound_ctx.c
===================================================================
--- uspace/srv/audio/hound/hound_ctx.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/audio/hound/hound_ctx.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -403,5 +403,5 @@
 		return ENOMEM;
 	}
-	log_verbose("CTX: %p: Mixing %u streams", ctx,
+	log_verbose("CTX: %p: Mixing %lu streams", ctx,
 	    list_count(&ctx->streams));
 	pcm_format_silence(buffer, size, &source->format);
@@ -413,5 +413,5 @@
 			log_warning("Not enough data in stream buffer");
 	}
-	log_verbose("CTX: %p. Pushing audio to %u connections", ctx,
+	log_verbose("CTX: %p. Pushing audio to %lu connections", ctx,
 	    list_count(&source->connections));
 	list_foreach(source->connections, source_link, connection_t, conn) {
Index: uspace/srv/audio/hound/main.c
===================================================================
--- uspace/srv/audio/hound/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/audio/hound/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -85,5 +85,5 @@
 	hound_iface.server = &hound;
 	hound_service_set_server_iface(&hound_iface);
-	async_set_client_connection(hound_connection_handler);
+	async_set_fallback_port_handler(hound_connection_handler, NULL);
 
 	service_id_t id = 0;
Index: uspace/srv/bd/file_bd/file_bd.c
===================================================================
--- uspace/srv/bd/file_bd/file_bd.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/file_bd/file_bd.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -157,5 +157,5 @@
 	bd_srvs.ops = &file_bd_ops;
 	
-	async_set_client_connection(file_bd_connection);
+	async_set_fallback_port_handler(file_bd_connection, NULL);
 	int rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/bd/part/guid_part/guid_part.c
===================================================================
--- uspace/srv/bd/part/guid_part/guid_part.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/part/guid_part/guid_part.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -160,5 +160,5 @@
 	}
 
-	rc = block_init(EXCHANGE_SERIALIZE, indev_sid, 2048);
+	rc = block_init(indev_sid, 2048);
 	if (rc != EOK)  {
 		printf(NAME ": could not init libblock.\n");
@@ -185,5 +185,5 @@
 
 	/* Register server with location service. */
-	async_set_client_connection(gpt_connection);
+	async_set_fallback_port_handler(gpt_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc != EOK) {
@@ -339,7 +339,7 @@
 
 	/* Get the device handle. */
-	dh = IPC_GET_ARG1(*icall);
-
-	/* 
+	dh = IPC_GET_ARG2(*icall);
+
+	/*
 	 * Determine which partition device is the client connecting to.
 	 * A linear search is not terribly fast, but we only do this
Index: uspace/srv/bd/part/mbr_part/mbr_part.c
===================================================================
--- uspace/srv/bd/part/mbr_part/mbr_part.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/part/mbr_part/mbr_part.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -210,5 +210,5 @@
 	}
 
-	rc = block_init(EXCHANGE_SERIALIZE, indev_sid, 2048);
+	rc = block_init(indev_sid, 2048);
 	if (rc != EOK)  {
 		printf(NAME ": could not init libblock.\n");
@@ -235,5 +235,5 @@
 
 	/* Register server with location service. */
-	async_set_client_connection(mbr_connection);
+	async_set_fallback_port_handler(mbr_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc != EOK) {
@@ -416,7 +416,7 @@
 
 	/* Get the device handle. */
-	dh = IPC_GET_ARG1(*icall);
-
-	/* 
+	dh = IPC_GET_ARG2(*icall);
+
+	/*
 	 * Determine which partition device is the client connecting to.
 	 * A linear search is not terribly fast, but we only do this
Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/rd/rd.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -178,5 +178,5 @@
 	bd_srvs.ops = &rd_bd_ops;
 	
-	async_set_client_connection(rd_client_conn);
+	async_set_fallback_port_handler(rd_client_conn, NULL);
 	ret = loc_server_register(NAME);
 	if (ret != EOK) {
Index: uspace/srv/bd/sata_bd/sata_bd.c
===================================================================
--- uspace/srv/bd/sata_bd/sata_bd.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/sata_bd/sata_bd.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -172,5 +172,5 @@
 
 	/* Get the device service ID. */
-	dsid = IPC_GET_ARG1(*icall);
+	dsid = IPC_GET_ARG2(*icall);
 
 	/* Determine which disk device is the client connecting to. */
@@ -247,5 +247,5 @@
 	int rc;
 	
-	async_set_client_connection(sata_bd_connection);
+	async_set_fallback_port_handler(sata_bd_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc < 0) {
Index: uspace/srv/bd/vbd/disk.c
===================================================================
--- uspace/srv/bd/vbd/disk.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/vbd/disk.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -360,5 +360,5 @@
 	rc = vbds_disk_by_svcid(sid, &disk);
 	if (rc == EOK)
-		return EEXISTS;
+		return EEXIST;
 
 	disk = calloc(1, sizeof(vbds_disk_t));
@@ -374,5 +374,5 @@
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "block_init(%zu)", sid);
-	rc = block_init(EXCHANGE_SERIALIZE, sid, 2048);
+	rc = block_init(sid, 2048);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed opening block device %s.",
@@ -872,5 +872,5 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_bd_conn()");
 
-	svcid = IPC_GET_ARG1(*icall);
+	svcid = IPC_GET_ARG2(*icall);
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_bd_conn() - svcid=%zu", svcid);
Index: uspace/srv/bd/vbd/vbd.c
===================================================================
--- uspace/srv/bd/vbd/vbd.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/bd/vbd/vbd.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -64,5 +64,5 @@
 		return rc;
 
-	async_set_client_connection(vbds_client_conn);
+	async_set_fallback_port_handler(vbds_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
@@ -415,5 +415,5 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_client_conn()");
 
-	sid = (service_id_t)IPC_GET_ARG1(*icall);
+	sid = (service_id_t)IPC_GET_ARG2(*icall);
 
 	if (sid == ctl_sid)
Index: uspace/srv/clipboard/clipboard.c
===================================================================
--- uspace/srv/clipboard/clipboard.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/clipboard/clipboard.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -180,5 +180,5 @@
 	printf("%s: HelenOS clipboard service\n", NAME);
 	
-	async_set_client_connection(clip_connection);
+	async_set_fallback_port_handler(clip_connection, NULL);
 	int rc = service_register(SERVICE_CLIPBOARD);
 	if (rc != EOK)
Index: uspace/srv/devman/client_conn.c
===================================================================
--- uspace/srv/devman/client_conn.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/client_conn.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -726,5 +726,5 @@
 
 /** Function for handling connections from a client to the device manager. */
-void devman_connection_client(ipc_callid_t iid, ipc_call_t *icall)
+void devman_connection_client(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Accept connection. */
Index: uspace/srv/devman/client_conn.h
===================================================================
--- uspace/srv/devman/client_conn.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/client_conn.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -36,5 +36,5 @@
 #include "devman.h"
 
-extern void devman_connection_client(ipc_callid_t, ipc_call_t *);
+extern void devman_connection_client(ipc_callid_t, ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/devman/driver.c
===================================================================
--- uspace/srv/devman/driver.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/driver.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -36,5 +36,4 @@
 #include <sys/stat.h>
 #include <io/log.h>
-#include <ipc/driver.h>
 #include <loc.h>
 #include <str_error.h>
@@ -143,5 +142,5 @@
 	/* Check whether the driver's binary exists. */
 	struct stat s;
-	if (stat(drv->binary_path, &s) == ENOENT) { /* FIXME!! */
+	if (stat(drv->binary_path, &s) != 0) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Driver not found at path `%s'.",
 		    drv->binary_path);
@@ -573,11 +572,11 @@
 	
 	if (rc != EOK) {
-		/* TODO handle error */
-	}
-
-	/* Wait for answer from the driver. */
-	async_wait_for(req, &rc);
-
-	switch(rc) {
+		async_forget(req);
+	} else {
+		/* Wait for answer from the driver. */
+		async_wait_for(req, &rc);
+	}
+
+	switch (rc) {
 	case EOK:
 		dev->state = DEVICE_USABLE;
@@ -592,6 +591,4 @@
 	
 	dev->passed_to_driver = true;
-
-	return;
 }
 
Index: uspace/srv/devman/drv_conn.c
===================================================================
--- uspace/srv/devman/drv_conn.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/drv_conn.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -49,5 +49,4 @@
 #include <io/log.h>
 #include <ipc/devman.h>
-#include <ipc/driver.h>
 #include <loc.h>
 
@@ -102,5 +101,5 @@
 		    driver->name);
 		fibril_mutex_unlock(&driver->driver_mutex);
-		async_answer_0(callid, EEXISTS);
+		async_answer_0(callid, EEXIST);
 		return NULL;
 	}
@@ -131,5 +130,5 @@
 	}
 	/* FIXME: Work around problem with callback sessions */
-	async_sess_args_set(driver->sess, DRIVER_DEVMAN, 0, 0);
+	async_sess_args_set(driver->sess, INTERFACE_DDF_DEVMAN, 0, 0);
 	
 	log_msg(LOG_DEFAULT, LVL_NOTE,
@@ -279,5 +278,5 @@
 		fibril_rwlock_write_unlock(&tree->rwlock);
 		dev_del_ref(pdev);
-		async_answer_0(callid, EEXISTS);
+		async_answer_0(callid, EEXIST);
 		printf(NAME ": Warning, driver tried to register `%s' twice.\n",
 		    fun_name);
@@ -587,5 +586,5 @@
 
 /** Function for handling connections from a driver to the device manager. */
-void devman_connection_driver(ipc_callid_t iid, ipc_call_t *icall)
+void devman_connection_driver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	client_t *client;
Index: uspace/srv/devman/drv_conn.h
===================================================================
--- uspace/srv/devman/drv_conn.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/drv_conn.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -37,5 +37,5 @@
 #include "devman.h"
 
-extern void devman_connection_driver(ipc_callid_t, ipc_call_t *);
+extern void devman_connection_driver(ipc_callid_t, ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/devman/loc.c
===================================================================
--- uspace/srv/devman/loc.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/loc.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -59,6 +59,5 @@
 	}
 	
-	loc_service_register_with_iface(loc_pathname,
-	    &fun->service_id, DEVMAN_CONNECT_FROM_LOC);
+	loc_service_register(loc_pathname, &fun->service_id);
 	
 	tree_add_loc_function(tree, fun);
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -49,5 +49,4 @@
 #include <io/log.h>
 #include <ipc/devman.h>
-#include <ipc/driver.h>
 #include <loc.h>
 
@@ -66,23 +65,23 @@
 dev_tree_t device_tree;
 
-static void devman_forward(ipc_callid_t iid, ipc_call_t *icall,
-    bool drv_to_parent)
+static void devman_connection_device(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	devman_handle_t handle = IPC_GET_ARG2(*icall);
-	devman_handle_t fwd_h;
-	fun_node_t *fun = NULL;
 	dev_node_t *dev = NULL;
 	
-	fun = find_fun_node(&device_tree, handle);
-	if (fun == NULL)
+	fun_node_t *fun = find_fun_node(&device_tree, handle);
+	if (fun == NULL) {
 		dev = find_dev_node(&device_tree, handle);
-	else {
+	} else {
 		fibril_rwlock_read_lock(&device_tree.rwlock);
+		
 		dev = fun->dev;
 		if (dev != NULL)
 			dev_add_ref(dev);
+		
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
 	}
-
+	
 	/*
 	 * For a valid function to connect to we need a device. The root
@@ -97,6 +96,6 @@
 		goto cleanup;
 	}
-
-	if (fun == NULL && !drv_to_parent) {
+	
+	if (fun == NULL) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, NAME ": devman_forward error - cannot "
 		    "connect to handle %" PRIun ", refers to a device.",
@@ -106,19 +105,8 @@
 	}
 	
-	driver_t *driver = NULL;
-	
 	fibril_rwlock_read_lock(&device_tree.rwlock);
 	
-	if (drv_to_parent) {
-		/* Connect to parent function of a device (or device function). */
-		if (dev->pfun->dev != NULL)
-			driver = dev->pfun->dev->drv;
-		
-		fwd_h = dev->pfun->handle;
-	} else {
-		/* Connect to the specified function */
-		driver = dev->drv;
-		fwd_h = handle;
-	}
+	/* Connect to the specified function */
+	driver_t *driver = dev->drv;
 	
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -130,10 +118,4 @@
 		goto cleanup;
 	}
-	
-	int method;
-	if (drv_to_parent)
-		method = DRIVER_DRIVER;
-	else
-		method = DRIVER_CLIENT;
 	
 	if (!driver->sess) {
@@ -143,5 +125,5 @@
 		goto cleanup;
 	}
-
+	
 	if (fun != NULL) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG,
@@ -155,5 +137,5 @@
 	
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(iid, exch, method, fwd_h, 0, IPC_FF_NONE);
+	async_forward_fast(iid, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 	
@@ -166,20 +148,95 @@
 }
 
-/** Function for handling connections from a client forwarded by the location
- * service to the device manager. */
-static void devman_connection_loc(ipc_callid_t iid, ipc_call_t *icall)
-{
+static void devman_connection_parent(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
+{
+	devman_handle_t handle = IPC_GET_ARG2(*icall);
+	dev_node_t *dev = NULL;
+	
+	fun_node_t *fun = find_fun_node(&device_tree, handle);
+	if (fun == NULL) {
+		dev = find_dev_node(&device_tree, handle);
+	} else {
+		fibril_rwlock_read_lock(&device_tree.rwlock);
+		
+		dev = fun->dev;
+		if (dev != NULL)
+			dev_add_ref(dev);
+		
+		fibril_rwlock_read_unlock(&device_tree.rwlock);
+	}
+	
+	/*
+	 * For a valid function to connect to we need a device. The root
+	 * function, for example, has no device and cannot be connected to.
+	 * This means @c dev needs to be valid regardless whether we are
+	 * connecting to a device or to a function.
+	 */
+	if (dev == NULL) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding failed - no device or "
+		    "function with handle %" PRIun " was found.", handle);
+		async_answer_0(iid, ENOENT);
+		goto cleanup;
+	}
+	
+	driver_t *driver = NULL;
+	
+	fibril_rwlock_read_lock(&device_tree.rwlock);
+	
+	/* Connect to parent function of a device (or device function). */
+	if (dev->pfun->dev != NULL)
+		driver = dev->pfun->dev->drv;
+	
+	devman_handle_t fun_handle = dev->pfun->handle;
+	
+	fibril_rwlock_read_unlock(&device_tree.rwlock);
+	
+	if (driver == NULL) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding refused - " \
+		    "the device %" PRIun " is not in usable state.", handle);
+		async_answer_0(iid, ENOENT);
+		goto cleanup;
+	}
+	
+	if (!driver->sess) {
+		log_msg(LOG_DEFAULT, LVL_ERROR,
+		    "Could not forward to driver `%s'.", driver->name);
+		async_answer_0(iid, EINVAL);
+		goto cleanup;
+	}
+	
+	if (fun != NULL) {
+		log_msg(LOG_DEFAULT, LVL_DEBUG,
+		    "Forwarding request for `%s' function to driver `%s'.",
+		    fun->pathname, driver->name);
+	} else {
+		log_msg(LOG_DEFAULT, LVL_DEBUG,
+		    "Forwarding request for `%s' device to driver `%s'.",
+		    dev->pfun->pathname, driver->name);
+	}
+	
+	async_exch_t *exch = async_exchange_begin(driver->sess);
+	async_forward_fast(iid, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE);
+	async_exchange_end(exch);
+	
+cleanup:
+	if (dev != NULL)
+		dev_del_ref(dev);
+	
+	if (fun != NULL)
+		fun_del_ref(fun);
+}
+
+static void devman_forward(ipc_callid_t iid, ipc_call_t *icall, void *arg)
+{
+	iface_t iface = IPC_GET_ARG1(*icall);
 	service_id_t service_id = IPC_GET_ARG2(*icall);
-	fun_node_t *fun;
-	dev_node_t *dev;
-	devman_handle_t handle;
-	driver_t *driver;
-
-	fun = find_loc_tree_function(&device_tree, service_id);
+	
+	fun_node_t *fun = find_loc_tree_function(&device_tree, service_id);
 	
 	fibril_rwlock_read_lock(&device_tree.rwlock);
 	
-	if (fun == NULL || fun->dev == NULL || fun->dev->drv == NULL) {
-		log_msg(LOG_DEFAULT, LVL_WARN, "devman_connection_loc(): function "
+	if ((fun == NULL) || (fun->dev == NULL) || (fun->dev->drv == NULL)) {
+		log_msg(LOG_DEFAULT, LVL_WARN, "devman_forward(): function "
 		    "not found.\n");
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -188,49 +245,19 @@
 	}
 	
-	dev = fun->dev;
-	driver = dev->drv;
-	handle = fun->handle;
+	dev_node_t *dev = fun->dev;
+	driver_t *driver = dev->drv;
+	devman_handle_t handle = fun->handle;
 	
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
 	
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(iid, exch, DRIVER_CLIENT, handle, 0,
-	    IPC_FF_NONE);
+	async_forward_fast(iid, exch, iface, handle, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 	
 	log_msg(LOG_DEFAULT, LVL_DEBUG,
-	    "Forwarding loc service request for `%s' function to driver `%s'.",
+	    "Forwarding service request for `%s' function to driver `%s'.",
 	    fun->pathname, driver->name);
-
+	
 	fun_del_ref(fun);
-}
-
-/** Function for handling connections to device manager. */
-static void devman_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
-{
-	/* Select port. */
-	switch ((sysarg_t) (IPC_GET_ARG1(*icall))) {
-	case DEVMAN_DRIVER:
-		devman_connection_driver(iid, icall);
-		break;
-	case DEVMAN_CLIENT:
-		devman_connection_client(iid, icall);
-		break;
-	case DEVMAN_CONNECT_TO_DEVICE:
-		/* Connect client to selected device. */
-		devman_forward(iid, icall, false);
-		break;
-	case DEVMAN_CONNECT_FROM_LOC:
-		/* Someone connected through loc node. */
-		devman_connection_loc(iid, icall);
-		break;
-	case DEVMAN_CONNECT_TO_PARENTS_DEVICE:
-		/* Connect client to selected device. */
-		devman_forward(iid, icall, true);
-		break;
-	default:
-		/* No such interface */
-		async_answer_0(iid, ENOENT);
-	}
 }
 
@@ -298,5 +325,27 @@
 	async_set_client_data_constructor(devman_client_data_create);
 	async_set_client_data_destructor(devman_client_data_destroy);
-	async_set_client_connection(devman_connection);
+	
+	port_id_t port;
+	rc = async_create_port(INTERFACE_DDF_DRIVER,
+	    devman_connection_driver, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_DDF_CLIENT,
+	    devman_connection_client, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_DEVMAN_DEVICE,
+	    devman_connection_device, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_DEVMAN_PARENT,
+	    devman_connection_parent, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	async_set_fallback_port_handler(devman_forward, NULL);
 	
 	if (!devman_init()) {
Index: uspace/srv/devman/match.c
===================================================================
--- uspace/srv/devman/match.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/devman/match.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -31,4 +31,5 @@
  */
 
+#include <errno.h>
 #include <fcntl.h>
 #include <io/log.h>
@@ -197,5 +198,5 @@
 	if (fd < 0) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Unable to open `%s' for reading: %s.",
-		    conf_path, str_error(fd));
+		    conf_path, str_error(errno));
 		goto cleanup;
 	}
@@ -217,8 +218,8 @@
 	}
 	
-	ssize_t read_bytes = read_all(fd, buf, len);
+	ssize_t read_bytes = read(fd, buf, len);
 	if (read_bytes <= 0) {
-		log_msg(LOG_DEFAULT, LVL_ERROR, "Unable to read file '%s' (%zd).", conf_path,
-		    read_bytes);
+		log_msg(LOG_DEFAULT, LVL_ERROR, "Unable to read file '%s' (%d).", conf_path,
+		    errno);
 		goto cleanup;
 	}
Index: uspace/srv/fs/cdfs/cdfs.c
===================================================================
--- uspace/srv/fs/cdfs/cdfs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/cdfs/cdfs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -73,6 +73,6 @@
 	}
 	
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf("%s: Unable to connect to VFS\n", NAME);
Index: uspace/srv/fs/cdfs/cdfs_ops.c
===================================================================
--- uspace/srv/fs/cdfs/cdfs_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/cdfs/cdfs_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -1025,5 +1025,5 @@
 {
 	/* Initialize the block layer */
-	int rc = block_init(EXCHANGE_SERIALIZE, service_id, BLOCK_SIZE);
+	int rc = block_init(service_id, BLOCK_SIZE);
 	if (rc != EOK)
 		return rc;
Index: uspace/srv/fs/exfat/exfat.c
===================================================================
--- uspace/srv/fs/exfat/exfat.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/exfat/exfat.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -75,6 +75,6 @@
 		goto err;
 
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf(NAME ": failed to connect to VFS\n");
Index: uspace/srv/fs/exfat/exfat_ops.c
===================================================================
--- uspace/srv/fs/exfat/exfat_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/exfat/exfat_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -1067,5 +1067,5 @@
 
 	/* initialize libblock */
-	rc = block_init(EXCHANGE_SERIALIZE, service_id, BS_SIZE);
+	rc = block_init(service_id, BS_SIZE);
 	if (rc != EOK)
 		return rc;
Index: uspace/srv/fs/ext4fs/Makefile
===================================================================
--- uspace/srv/fs/ext4fs/Makefile	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/ext4fs/Makefile	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -28,6 +28,7 @@
 
 USPACE_PREFIX = ../../..
-LIBS = $(LIBBLOCK_PREFIX)/libblock.a $(LIBFS_PREFIX)/libfs.a $(LIBEXT4_PREFIX)/libext4.a
-EXTRA_CFLAGS += -I$(LIBBLOCK_PREFIX) -I$(LIBFS_PREFIX) -I$(LIBEXT4_PREFIX)
+LIBS = $(LIBBLOCK_PREFIX)/libblock.a $(LIBFS_PREFIX)/libfs.a \
+    $(LIBEXT4_PREFIX)/libext4.a $(LIBCRYPTO_PREFIX)/libcrypto.a
+EXTRA_CFLAGS += -I$(LIBBLOCK_PREFIX) -I$(LIBFS_PREFIX) -I$(LIBEXT4_PREFIX) -I$(LIBCRYPTO_PREFIX)
 BINARY = ext4fs
 STATIC_NEEDED = y
Index: uspace/srv/fs/ext4fs/ext4fs.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/ext4fs/ext4fs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -65,6 +65,6 @@
 	}
 	
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf("%s: Failed to connect to VFS\n", NAME);
Index: uspace/srv/fs/fat/fat.c
===================================================================
--- uspace/srv/fs/fat/fat.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/fat/fat.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -75,6 +75,6 @@
 		goto err;
 	
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf(NAME ": failed to connect to VFS\n");
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/fat/fat_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -939,5 +939,5 @@
 
 	/* initialize libblock */
-	rc = block_init(EXCHANGE_SERIALIZE, service_id, BS_SIZE);
+	rc = block_init(service_id, BS_SIZE);
 	if (rc != EOK) {
 		free(instance);
Index: uspace/srv/fs/locfs/locfs.c
===================================================================
--- uspace/srv/fs/locfs/locfs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/locfs/locfs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -77,6 +77,6 @@
 	}
 	
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf("%s: Unable to connect to VFS\n", NAME);
Index: uspace/srv/fs/locfs/locfs_ops.c
===================================================================
--- uspace/srv/fs/locfs/locfs_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/locfs/locfs_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -264,6 +264,6 @@
 			fibril_mutex_unlock(&services_mutex);
 			
-			async_sess_t *sess = loc_service_connect(
-			    EXCHANGE_SERIALIZE, node->service_id, 0);
+			async_sess_t *sess = loc_service_connect(node->service_id,
+			    INTERFACE_FS, 0);
 			
 			fibril_mutex_lock(&services_mutex);
Index: uspace/srv/fs/mfs/mfs.c
===================================================================
--- uspace/srv/fs/mfs/mfs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/mfs/mfs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -73,6 +73,6 @@
 	}
 
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 
 	if (!vfs_sess) {
Index: uspace/srv/fs/mfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/mfs/mfs_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/mfs/mfs_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -161,5 +161,5 @@
 
 	/* initialize libblock */
-	rc = block_init(EXCHANGE_SERIALIZE, service_id, 4096);
+	rc = block_init(service_id, 4096);
 	if (rc != EOK)
 		return rc;
Index: uspace/srv/fs/tmpfs/tmpfs.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/tmpfs/tmpfs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -80,6 +80,6 @@
 	}
 	
-	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_VFS, 0, 0);
+	async_sess_t *vfs_sess = service_connect_blocking(SERVICE_VFS,
+	    INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		printf(NAME ": Unable to connect to VFS\n");
Index: uspace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -169,5 +169,5 @@
 	int rc;
 
-	rc = block_init(EXCHANGE_SERIALIZE, dsid, TMPFS_COMM_SIZE);
+	rc = block_init(dsid, TMPFS_COMM_SIZE);
 	if (rc != EOK)
 		return false; 
Index: uspace/srv/fs/udf/udf.c
===================================================================
--- uspace/srv/fs/udf/udf.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/udf/udf.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -74,5 +74,5 @@
 	
 	async_sess_t *vfs_sess =
-	    service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_VFS, 0, 0);
+	    service_connect_blocking(SERVICE_VFS, INTERFACE_VFS_DRIVER, 0);
 	if (!vfs_sess) {
 		log_msg(LOG_DEFAULT, LVL_FATAL, "Failed to connect to VFS");
Index: uspace/srv/fs/udf/udf_ops.c
===================================================================
--- uspace/srv/fs/udf/udf_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/fs/udf/udf_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -325,5 +325,5 @@
 	
 	/* initialize block cache */
-	int rc = block_init(EXCHANGE_SERIALIZE, service_id, MAX_SIZE);
+	int rc = block_init(service_id, MAX_SIZE);
 	if (rc != EOK)
 		return rc;
Index: uspace/srv/hid/compositor/compositor.c
===================================================================
--- uspace/srv/hid/compositor/compositor.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/compositor/compositor.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -896,5 +896,5 @@
 	ipc_call_t call;
 	ipc_callid_t callid;
-	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*icall);
+	service_id_t service_id = (service_id_t) IPC_GET_ARG2(*icall);
 
 	/* Allocate resources for new window and register it to the location service. */
@@ -1175,5 +1175,5 @@
 	async_sess_t *sess;
 
-	sess = loc_service_connect(EXCHANGE_SERIALIZE, sid, 0);
+	sess = loc_service_connect(sid, INTERFACE_DDF, 0);
 	if (sess == NULL) {
 		printf("%s: Unable to connect to visualizer %s\n", NAME, svc);
@@ -1182,5 +1182,9 @@
 
 	async_exch_t *exch = async_exchange_begin(sess);
-	rc = async_connect_to_me(exch, sid, 0, 0, vsl_notifications, NULL);
+	
+	port_id_t port;
+	rc = async_create_callback_port(exch, INTERFACE_VISUALIZER_CB, 0, 0,
+	    vsl_notifications, NULL, &port);
+	
 	async_exchange_end(exch);
 
@@ -2145,5 +2149,5 @@
 	}
 
-	sess = loc_service_connect(EXCHANGE_ATOMIC, dsid, 0);
+	sess = loc_service_connect(dsid, INTERFACE_INPUT, 0);
 	if (sess == NULL) {
 		printf("%s: Unable to connect to input service %s\n", NAME,
@@ -2240,5 +2244,5 @@
 	
 	/* Register compositor server. */
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 	
 	int rc = loc_server_register(NAME);
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/console/console.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -508,5 +508,5 @@
 	
 	for (size_t i = 0; i < CONSOLE_COUNT; i++) {
-		if (consoles[i].dsid == (service_id_t) IPC_GET_ARG1(*icall)) {
+		if (consoles[i].dsid == (service_id_t) IPC_GET_ARG2(*icall)) {
 			cons = &consoles[i];
 			break;
@@ -536,5 +536,5 @@
 	}
 
-	sess = loc_service_connect(EXCHANGE_ATOMIC, dsid, 0);
+	sess = loc_service_connect(dsid, INTERFACE_INPUT, 0);
 	if (sess == NULL) {
 		printf("%s: Unable to connect to input service %s\n", NAME,
@@ -561,5 +561,5 @@
 	int rc = loc_service_get_id(svc, &dsid, 0);
 	if (rc == EOK) {
-		sess = loc_service_connect(EXCHANGE_SERIALIZE, dsid, 0);
+		sess = loc_service_connect(dsid, INTERFACE_OUTPUT, 0);
 		if (sess == NULL) {
 			printf("%s: Unable to connect to output service %s\n",
@@ -586,5 +586,5 @@
 	
 	/* Register server */
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hid/input/ctl/kbdev.c
===================================================================
--- uspace/srv/hid/input/ctl/kbdev.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/ctl/kbdev.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -94,6 +94,6 @@
 static int kbdev_ctl_init(kbd_dev_t *kdev)
 {
-	async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE,
-	    kdev->svc_id, 0);
+	async_sess_t *sess = loc_service_connect(kdev->svc_id,
+	    INTERFACE_DDF, 0);
 	if (sess == NULL) {
 		printf("%s: Failed starting session with '%s.'\n", NAME,
@@ -120,5 +120,8 @@
 	}
 	
-	int rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev);
+	port_id_t port;
+	int rc = async_create_callback_port(exch, INTERFACE_KBD_CB, 0, 0,
+	    kbdev_callback_conn, kbdev, &port);
+	
 	if (rc != EOK) {
 		printf("%s: Failed creating callback connection from '%s'.\n",
Index: uspace/srv/hid/input/input.c
===================================================================
--- uspace/srv/hid/input/input.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/input.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -745,6 +745,6 @@
 	if (irc_service) {
 		while (irc_sess == NULL)
-			irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-			    SERVICE_IRC, 0, 0);
+			irc_sess = service_connect_blocking(SERVICE_IRC,
+			    INTERFACE_IRC, 0);
 	}
 	
@@ -758,5 +758,5 @@
 	async_set_client_data_constructor(client_data_create);
 	async_set_client_data_destructor(client_data_destroy);
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 	
 	int rc = loc_server_register(NAME);
Index: uspace/srv/hid/input/port/adb.c
===================================================================
--- uspace/srv/hid/input/port/adb.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/port/adb.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -69,5 +69,5 @@
 		return rc;
 	
-	dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0);
+	dev_sess = loc_service_connect(service_id, INTERFACE_DDF, 0);
 	if (dev_sess == NULL) {
 		printf("%s: Failed to connect to device\n", NAME);
@@ -82,5 +82,8 @@
 	}
 	
-	rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL);
+	port_id_t port;
+	rc = async_create_callback_port(exch, INTERFACE_ADB_CB, 0, 0,
+	    kbd_port_events, NULL, &port);
+	
 	async_exchange_end(exch);
 	if (rc != EOK) {
Index: uspace/srv/hid/input/port/adb_mouse.c
===================================================================
--- uspace/srv/hid/input/port/adb_mouse.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/port/adb_mouse.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -84,5 +84,5 @@
 		return rc;
 	
-	dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0);
+	dev_sess = loc_service_connect(service_id, INTERFACE_DDF, 0);
 	if (dev_sess == NULL) {
 		printf("%s: Failed to connect to device\n", NAME);
@@ -98,5 +98,8 @@
 	
 	/* NB: The callback connection is slotted for removal */
-	rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL);
+	port_id_t port;
+	rc = async_create_callback_port(exch, INTERFACE_ADB_CB, 0, 0,
+	    mouse_port_events, NULL, &port);
+	
 	async_exchange_end(exch);
 	if (rc != EOK) {
Index: uspace/srv/hid/input/port/chardev.c
===================================================================
--- uspace/srv/hid/input/port/chardev.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/port/chardev.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -84,5 +84,5 @@
 	}
 	
-	dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id,
+	dev_sess = loc_service_connect(service_id, INTERFACE_DDF,
 	    IPC_FLAG_BLOCKING);
 	if (dev_sess == NULL) {
@@ -98,6 +98,8 @@
 	}
 	
-	/* NB: The callback connection is slotted for removal */
-	rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL);
+	port_id_t port;
+	rc = async_create_callback_port(exch, INTERFACE_CHAR_CB, 0, 0,
+	    kbd_port_events, NULL, &port);
+	
 	async_exchange_end(exch);
 	
Index: uspace/srv/hid/input/proto/mousedev.c
===================================================================
--- uspace/srv/hid/input/proto/mousedev.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/input/proto/mousedev.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -118,6 +118,5 @@
 static int mousedev_proto_init(mouse_dev_t *mdev)
 {
-	async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE,
-	    mdev->svc_id, 0);
+	async_sess_t *sess = loc_service_connect(mdev->svc_id, INTERFACE_DDF, 0);
 	if (sess == NULL) {
 		printf("%s: Failed starting session with '%s'\n", NAME,
@@ -143,5 +142,8 @@
 	}
 	
-	int rc = async_connect_to_me(exch, 0, 0, 0, mousedev_callback_conn, mousedev);
+	port_id_t port;
+	int rc = async_create_callback_port(exch, INTERFACE_MOUSE_CB, 0, 0,
+	    mousedev_callback_conn, mousedev, &port);
+	
 	async_exchange_end(exch);
 	async_hangup(sess);
Index: uspace/srv/hid/isdv4_tablet/main.c
===================================================================
--- uspace/srv/hid/isdv4_tablet/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/isdv4_tablet/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -69,8 +69,10 @@
 	async_sess_t *sess =
 	    async_callback_receive(EXCHANGE_SERIALIZE);
+	
 	fibril_mutex_lock(&client_mutex);
-		if (client_sess == NULL) {
-			client_sess = sess;
-		}
+	
+	if (client_sess == NULL)
+		client_sess = sess;
+	
 	fibril_mutex_unlock(&client_mutex);
 
@@ -262,5 +264,5 @@
 	printf(NAME ": Using serial port %s\n", serial_port_name);
 
-	async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE, svc_id,
+	async_sess_t *sess = loc_service_connect(svc_id, INTERFACE_DDF,
 	    IPC_FLAG_BLOCKING);
 	if (!sess) {
@@ -306,5 +308,5 @@
 	fibril_add_ready(fibril);
 
-	async_set_client_connection(mouse_connection);
+	async_set_fallback_port_handler(mouse_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hid/output/output.c
===================================================================
--- uspace/srv/hid/output/output.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/output/output.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -460,5 +460,5 @@
 	
 	/* Register server */
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 	int rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hid/remcons/remcons.c
===================================================================
--- uspace/srv/hid/remcons/remcons.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/remcons/remcons.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -217,5 +217,5 @@
 {
 	/* Find the user. */
-	telnet_user_t *user = telnet_user_get_for_client_connection(IPC_GET_ARG1(*icall));
+	telnet_user_t *user = telnet_user_get_for_client_connection(IPC_GET_ARG2(*icall));
 	if (user == NULL) {
 		async_answer_0(iid, ENOENT);
@@ -348,5 +348,5 @@
 	inet_ep_t ep;
 
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hid/rfb/main.c
===================================================================
--- uspace/srv/hid/rfb/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/rfb/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -215,5 +215,5 @@
 	vis->dev_ctx = NULL;
 
-	async_set_client_connection(client_connection);
+	async_set_fallback_port_handler(client_connection, NULL);
 
 	int rc = loc_server_register(NAME);
Index: uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
===================================================================
--- uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -85,5 +85,5 @@
 	printf("%s: S3C24xx touchscreen driver\n", NAME);
 	
-	async_set_client_connection(s3c24xx_ts_connection);
+	async_set_fallback_port_handler(s3c24xx_ts_connection, NULL);
 	int rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hw/bus/cuda_adb/cuda_adb.c
===================================================================
--- uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -169,5 +169,5 @@
 	}
 
-	async_set_client_connection(cuda_connection);
+	async_set_fallback_port_handler(cuda_connection, NULL);
 	rc = loc_server_register(NAME);
 	if (rc < 0) {
@@ -214,5 +214,5 @@
 
 	/* Get the device handle. */
-	dsid = IPC_GET_ARG1(*icall);
+	dsid = IPC_GET_ARG2(*icall);
 
 	/* Determine which disk device is the client connecting to. */
Index: uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -77,5 +77,5 @@
 	printf("%s: S3C24xx on-chip UART driver\n", NAME);
 	
-	async_set_client_connection(s3c24xx_uart_connection);
+	async_set_fallback_port_handler(s3c24xx_uart_connection, NULL);
 	int rc = loc_server_register(NAME);
 	if (rc != EOK) {
Index: uspace/srv/hw/irc/apic/apic.c
===================================================================
--- uspace/srv/hw/irc/apic/apic.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/irc/apic/apic.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -215,5 +215,5 @@
 	}
 	
-	async_set_client_connection(apic_connection);
+	async_set_fallback_port_handler(apic_connection, NULL);
 	service_register(SERVICE_IRC);
 	
Index: uspace/srv/hw/irc/i8259/i8259.c
===================================================================
--- uspace/srv/hw/irc/i8259/i8259.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/irc/i8259/i8259.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -153,5 +153,5 @@
 	}
 	
-	async_set_client_connection(i8259_connection);
+	async_set_fallback_port_handler(i8259_connection, NULL);
 	service_register(SERVICE_IRC);
 	
Index: uspace/srv/hw/irc/icp-ic/icp-ic.c
===================================================================
--- uspace/srv/hw/irc/icp-ic/icp-ic.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/irc/icp-ic/icp-ic.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -150,5 +150,5 @@
 	icpic_regs = (icpic_regs_t *)regs;
 
-	async_set_client_connection(icpic_connection);
+	async_set_fallback_port_handler(icpic_connection, NULL);
 	service_register(SERVICE_IRC);
 
Index: uspace/srv/hw/irc/obio/obio.c
===================================================================
--- uspace/srv/hw/irc/obio/obio.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/hw/irc/obio/obio.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -137,5 +137,5 @@
 	printf("%s: OBIO registers with base at %zu\n", NAME, base_phys);
 	
-	async_set_client_connection(obio_connection);
+	async_set_fallback_port_handler(obio_connection, NULL);
 	service_register(SERVICE_IRC);
 	
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/loader/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -249,5 +249,5 @@
 		}
 		async_state_change_finalize(callid, vfs_exch);
-		fd = fd_wait();
+		fd = vfs_fd_wait();
 		assert(fd == (int) filc);
 	}
@@ -443,6 +443,5 @@
 int main(int argc, char *argv[])
 {
-	/* Set a handler of incomming connections. */
-	async_set_client_connection(ldr_connection);
+	async_set_fallback_port_handler(ldr_connection, NULL);
 	
 	/* Introduce this task to the NS (give it our task ID). */
@@ -452,9 +451,15 @@
 		return rc;
 	
-	/* Register at naming service. */
-	rc = service_register(SERVICE_LOAD);
+	/* Create port */
+	port_id_t port;
+	rc = async_create_port(INTERFACE_LOADER, ldr_connection, NULL, &port);
 	if (rc != EOK)
 		return rc;
 	
+	/* Register at naming service. */
+	rc = service_register(SERVICE_LOADER);
+	if (rc != EOK)
+		return rc;
+	
 	async_manager();
 	
Index: uspace/srv/locsrv/locsrv.c
===================================================================
--- uspace/srv/locsrv/locsrv.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/locsrv/locsrv.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -412,5 +412,5 @@
 {
 	if (server == NULL)
-		return EEXISTS;
+		return EEXIST;
 	
 	fibril_mutex_lock(&servers_list_mutex);
@@ -467,7 +467,4 @@
 	}
 	
-	/* Set the interface, if any. */
-	service->forward_interface = IPC_GET_ARG1(*icall);
-
 	/* Get fqsn */
 	char *fqsn;
@@ -514,5 +511,5 @@
 		free(service->name);
 		free(service);
-		async_answer_0(iid, EEXISTS);
+		async_answer_0(iid, EEXIST);
 		return;
 	}
@@ -702,5 +699,5 @@
  *
  */
-static void loc_forward(ipc_callid_t callid, ipc_call_t *call)
+static void loc_forward(ipc_callid_t callid, ipc_call_t *call, void *arg)
 {
 	fibril_mutex_lock(&services_list_mutex);
@@ -709,4 +706,5 @@
 	 * Get ID from request
 	 */
+	iface_t iface = IPC_GET_ARG1(*call);
 	service_id_t id = IPC_GET_ARG2(*call);
 	loc_service_t *svc = loc_service_find_id(id);
@@ -719,11 +717,5 @@
 	
 	async_exch_t *exch = async_exchange_begin(svc->server->sess);
-	
-	if (svc->forward_interface == 0)
-		async_forward_fast(callid, exch, svc->id, 0, 0, IPC_FF_NONE);
-	else
-		async_forward_fast(callid, exch, svc->forward_interface,
-		    svc->id, 0, IPC_FF_NONE);
-	
+	async_forward_fast(callid, exch, iface, svc->id, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 	
@@ -959,5 +951,5 @@
 	    loc_namespace_find_id(IPC_GET_ARG1(*icall));
 	if (namespace == NULL)
-		async_answer_0(iid, EEXISTS);
+		async_answer_0(iid, EEXIST);
 	else
 		async_answer_1(iid, EOK, namespace->refcnt);
@@ -1382,5 +1374,5 @@
  *
  */
-static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall)
+static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
@@ -1440,5 +1432,5 @@
  *
  */
-static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall)
+static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
@@ -1507,27 +1499,4 @@
 }
 
-/** Function for handling connections to location service
- *
- */
-static void loc_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
-{
-	/* Select interface */
-	switch ((sysarg_t) (IPC_GET_ARG1(*icall))) {
-	case LOC_PORT_SUPPLIER:
-		loc_connection_supplier(iid, icall);
-		break;
-	case LOC_PORT_CONSUMER:
-		loc_connection_consumer(iid, icall);
-		break;
-	case LOC_CONNECT_TO_SERVICE:
-		/* Connect client to selected service */
-		loc_forward(iid, icall);
-		break;
-	default:
-		/* No such interface */
-		async_answer_0(iid, ENOENT);
-	}
-}
-
 /**
  *
@@ -1542,12 +1511,23 @@
 	}
 	
-	/* Set a handler of incomming connections */
-	async_set_client_connection(loc_connection);
-	
-	/* Register location service at naming service */
-	int rc = service_register(SERVICE_LOC);
+	port_id_t port;
+	int rc = async_create_port(INTERFACE_LOC_SUPPLIER,
+	    loc_connection_supplier, NULL, &port);
 	if (rc != EOK)
 		return rc;
 	
+	rc = async_create_port(INTERFACE_LOC_CONSUMER,
+	    loc_connection_consumer, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	/* Set a handler of incomming connections */
+	async_set_fallback_port_handler(loc_forward, NULL);
+	
+	/* Register location service at naming service */
+	rc = service_register(SERVICE_LOC);
+	if (rc != EOK)
+		return rc;
+	
 	printf("%s: Accepting connections\n", NAME);
 	async_manager();
Index: uspace/srv/locsrv/locsrv.h
===================================================================
--- uspace/srv/locsrv/locsrv.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/locsrv/locsrv.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -107,7 +107,4 @@
 	/** Supplier of this service */
 	loc_server_t *server;
-	
-	/** Use this interface when forwarding to server. */
-	sysarg_t forward_interface;
 } loc_service_t;
 
Index: uspace/srv/logger/main.c
===================================================================
--- uspace/srv/logger/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/logger/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -48,19 +48,14 @@
 #include "logger.h"
 
-static void connection_handler(ipc_callid_t iid, ipc_call_t *icall, void *arg)
+static void connection_handler_control(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
-	logger_interface_t iface = IPC_GET_ARG1(*icall);
+	logger_connection_handler_control(iid);
+}
 
-	switch (iface) {
-	case LOGGER_INTERFACE_CONTROL:
-		logger_connection_handler_control(iid);
-		break;
-	case LOGGER_INTERFACE_WRITER:
-		logger_connection_handler_writer(iid);
-		break;
-	default:
-		async_answer_0(iid, EINVAL);
-		break;
-	}
+static void connection_handler_writer(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
+{
+	logger_connection_handler_writer(iid);
 }
 
@@ -73,8 +68,17 @@
 		parse_level_settings(argv[i]);
 	}
-
-	async_set_client_connection(connection_handler);
 	
-	int rc = service_register(SERVICE_LOGGER);
+	port_id_t port;
+	int rc = async_create_port(INTERFACE_LOGGER_CONTROL,
+	    connection_handler_control, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_LOGGER_WRITER,
+	    connection_handler_writer, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = service_register(SERVICE_LOGGER);
 	if (rc != EOK) {
 		printf(NAME ": failed to register: %s.\n", str_error(rc));
Index: uspace/srv/net/dhcp/main.c
===================================================================
--- uspace/srv/net/dhcp/main.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/dhcp/main.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -65,5 +65,5 @@
 	}
 
-	async_set_client_connection(dhcp_client_conn);
+	async_set_fallback_port_handler(dhcp_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
Index: uspace/srv/net/dnsrsrv/dnsrsrv.c
===================================================================
--- uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -64,5 +64,5 @@
 	}
 
-	async_set_client_connection(dnsr_client_conn);
+	async_set_fallback_port_handler(dnsr_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
Index: uspace/srv/net/ethip/ethip.c
===================================================================
--- uspace/srv/net/ethip/ethip.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/ethip/ethip.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -79,5 +79,5 @@
 static int ethip_init(void)
 {
-	async_set_client_connection(ethip_client_conn);
+	async_set_fallback_port_handler(ethip_client_conn, NULL);
 	
 	int rc = loc_server_register(NAME);
@@ -147,5 +147,5 @@
 	service_id_t sid;
 
-	sid = (service_id_t)IPC_GET_ARG1(*icall);
+	sid = (service_id_t) IPC_GET_ARG2(*icall);
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_client_conn(%u)", (unsigned)sid);
 	nic = ethip_nic_find_by_iplink_sid(sid);
Index: uspace/srv/net/ethip/ethip_nic.c
===================================================================
--- uspace/srv/net/ethip/ethip_nic.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/ethip/ethip_nic.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -162,5 +162,5 @@
 	}
 	
-	nic->sess = loc_service_connect(EXCHANGE_SERIALIZE, sid, 0);
+	nic->sess = loc_service_connect(sid, INTERFACE_DDF, 0);
 	if (nic->sess == NULL) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed connecting '%s'", nic->svc_name);
Index: uspace/srv/net/inetsrv/addrobj.c
===================================================================
--- uspace/srv/net/inetsrv/addrobj.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/inetsrv/addrobj.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -87,5 +87,5 @@
 		/* Duplicate address name */
 		fibril_mutex_unlock(&addr_list_lock);
-		return EEXISTS;
+		return EEXIST;
 	}
 
Index: uspace/srv/net/inetsrv/inet_link.c
===================================================================
--- uspace/srv/net/inetsrv/inet_link.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/inetsrv/inet_link.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -177,5 +177,5 @@
 	}
 
-	ilink->sess = loc_service_connect(EXCHANGE_SERIALIZE, sid, 0);
+	ilink->sess = loc_service_connect(sid, INTERFACE_IPLINK, 0);
 	if (ilink->sess == NULL) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed connecting '%s'", ilink->svc_name);
Index: uspace/srv/net/inetsrv/inetsrv.c
===================================================================
--- uspace/srv/net/inetsrv/inetsrv.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/inetsrv/inetsrv.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -77,16 +77,30 @@
 };
 
-static void inet_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg);
-
 static FIBRIL_MUTEX_INITIALIZE(client_list_lock);
 static LIST_INITIALIZE(client_list);
 
+static void inet_default_conn(ipc_callid_t, ipc_call_t *, void *);
+
 static int inet_init(void)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_init()");
 	
-	async_set_client_connection(inet_client_conn);
-	
-	int rc = loc_server_register(NAME);
+	port_id_t port;
+	int rc = async_create_port(INTERFACE_INET,
+	    inet_default_conn, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_INETCFG,
+	    inet_cfg_conn, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = async_create_port(INTERFACE_INETPING,
+	    inetping_conn, NULL, &port);
+	if (rc != EOK)
+		return rc;
+	
+	rc = loc_server_register(NAME);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server (%d).", rc);
@@ -95,20 +109,5 @@
 	
 	service_id_t sid;
-	rc = loc_service_register_with_iface(SERVICE_NAME_INET, &sid,
-	    INET_PORT_DEFAULT);
-	if (rc != EOK) {
-		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service (%d).", rc);
-		return EEXIST;
-	}
-	
-	rc = loc_service_register_with_iface(SERVICE_NAME_INETCFG, &sid,
-	    INET_PORT_CFG);
-	if (rc != EOK) {
-		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service (%d).", rc);
-		return EEXIST;
-	}
-	
-	rc = loc_service_register_with_iface(SERVICE_NAME_INETPING, &sid,
-	    INET_PORT_PING);
+	rc = loc_service_register(SERVICE_NAME_INET, &sid);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service (%d).", rc);
@@ -429,26 +428,4 @@
 }
 
-static void inet_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
-{
-	sysarg_t port;
-
-	port = IPC_GET_ARG1(*icall);
-
-	switch (port) {
-	case INET_PORT_DEFAULT:
-		inet_default_conn(iid, icall, arg);
-		break;
-	case INET_PORT_CFG:
-		inet_cfg_conn(iid, icall, arg);
-		break;
-	case INET_PORT_PING:
-		inetping_conn(iid, icall, arg);
-		break;
-	default:
-		async_answer_0(iid, ENOTSUP);
-		break;
-	}
-}
-
 static inet_client_t *inet_client_find(uint8_t proto)
 {
Index: uspace/srv/net/loopip/loopip.c
===================================================================
--- uspace/srv/net/loopip/loopip.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/loopip/loopip.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -100,5 +100,5 @@
 static int loopip_init(void)
 {
-	async_set_client_connection(loopip_client_conn);
+	async_set_fallback_port_handler(loopip_client_conn, NULL);
 	
 	int rc = loc_server_register(NAME);
Index: uspace/srv/net/nconfsrv/nconfsrv.c
===================================================================
--- uspace/srv/net/nconfsrv/nconfsrv.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/nconfsrv/nconfsrv.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -77,5 +77,5 @@
 	}
 
-	async_set_client_connection(ncs_client_conn);
+	async_set_fallback_port_handler(ncs_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
Index: uspace/srv/net/slip/slip.c
===================================================================
--- uspace/srv/net/slip/slip.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/slip/slip.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -300,5 +300,5 @@
 	slip_iplink.ops = &slip_iplink_ops;
 
-	async_set_client_connection(slip_client_conn);
+	async_set_fallback_port_handler(slip_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
@@ -328,5 +328,5 @@
 	 * char_dev at the same time.
 	 */
-	sess_out = loc_service_connect(EXCHANGE_SERIALIZE, svcid, 0);
+	sess_out = loc_service_connect(svcid, INTERFACE_DDF, 0);
 	if (!sess_out) {
 		log_msg(LOG_DEFAULT, LVL_ERROR,
@@ -337,5 +337,5 @@
 	slip_iplink.arg = sess_out;
 
-	sess_in = loc_service_connect(EXCHANGE_SERIALIZE, svcid, 0);
+	sess_in = loc_service_connect(svcid, INTERFACE_DDF, 0);
 	if (!sess_in) {
 		log_msg(LOG_DEFAULT, LVL_ERROR,
Index: uspace/srv/net/tcp/conn.c
===================================================================
--- uspace/srv/net/tcp/conn.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/tcp/conn.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -1223,5 +1223,5 @@
 		rc = amap_insert(amap, &conn->ident, conn, af_allow_system, &aepp);
 		if (rc != EOK) {
-			assert(rc != EEXISTS);
+			assert(rc != EEXIST);
 			assert(rc == ENOMEM);
 			log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory.");
Index: uspace/srv/net/tcp/service.c
===================================================================
--- uspace/srv/net/tcp/service.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/tcp/service.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup udp
+/** @addtogroup tcp
  * @{
  */
@@ -44,4 +44,5 @@
 #include <loc.h>
 #include <macros.h>
+#include <mem.h>
 #include <stdlib.h>
 
@@ -53,4 +54,5 @@
 #define NAME "tcp"
 
+/** Maximum amount of data transferred in one send call */
 #define MAX_MSG_SIZE DATA_XFER_LIMIT
 
@@ -67,4 +69,5 @@
 static int tcp_cconn_create(tcp_client_t *, tcp_conn_t *, tcp_cconn_t **);
 
+/** Connection callbacks to tie us to lower layer */
 static tcp_cb_t tcp_service_cb = {
 	.cstate_change = tcp_service_cstate_change,
@@ -72,4 +75,5 @@
 };
 
+/** Sentinel connection callbacks to tie us to lower layer */
 static tcp_cb_t tcp_service_lst_cb = {
 	.cstate_change = tcp_service_lst_cstate_change,
@@ -77,4 +81,10 @@
 };
 
+/** Connection state has changed.
+ *
+ * @param conn      Connection
+ * @param arg       Argument (not used)
+ * @param old_state Previous connection state
+ */
 static void tcp_service_cstate_change(tcp_conn_t *conn, void *arg,
     tcp_cstate_t old_state)
@@ -108,4 +118,10 @@
 }
 
+/** Sentinel connection state has changed.
+ *
+ * @param conn      Connection
+ * @param arg       Argument (not used)
+ * @param old_state Previous connection state
+ */
 static void tcp_service_lst_cstate_change(tcp_conn_t *conn, void *arg,
     tcp_cstate_t old_state)
@@ -169,4 +185,9 @@
 }
 
+/** Received data became available on connection.
+ *
+ * @param conn Connection
+ * @param arg  Client connection
+ */
 static void tcp_service_recv_data(tcp_conn_t *conn, void *arg)
 {
@@ -176,4 +197,8 @@
 }
 
+/** Send 'data' event to client.
+ *
+ * @param cconn Client connection
+ */
 static void tcp_ev_data(tcp_cconn_t *cconn)
 {
@@ -192,4 +217,8 @@
 }
 
+/** Send 'connected' event to client.
+ *
+ * @param cconn Client connection
+ */
 static void tcp_ev_connected(tcp_cconn_t *cconn)
 {
@@ -205,4 +234,8 @@
 }
 
+/** Send 'conn_failed' event to client.
+ *
+ * @param cconn Client connection
+ */
 static void tcp_ev_conn_failed(tcp_cconn_t *cconn)
 {
@@ -218,4 +251,8 @@
 }
 
+/** Send 'conn_reset' event to client.
+ *
+ * @param cconn Client connection
+ */
 static void tcp_ev_conn_reset(tcp_cconn_t *cconn)
 {
@@ -231,5 +268,9 @@
 }
 
-/** New incoming connection */
+/** Send 'new_conn' event to client.
+ *
+ * @param clst Client listener that received the connection
+ * @param cconn New client connection
+ */
 static void tcp_ev_new_conn(tcp_clst_t *clst, tcp_cconn_t *cconn)
 {
@@ -246,4 +287,14 @@
 }
 
+/** Create client connection.
+ *
+ * This effectively adds a connection into a client's namespace.
+ *
+ * @param client TCP client
+ * @param conn   Connection
+ * @param rcconn Place to store pointer to new client connection
+ *
+ * @return EOK on success or ENOMEM if out of memory
+ */
 static int tcp_cconn_create(tcp_client_t *client, tcp_conn_t *conn,
     tcp_cconn_t **rcconn)
@@ -272,4 +323,8 @@
 }
 
+/** Destroy client connection.
+ *
+ * @param cconn Client connection
+ */
 static void tcp_cconn_destroy(tcp_cconn_t *cconn)
 {
@@ -278,4 +333,15 @@
 }
 
+/** Create client listener.
+ *
+ * Create client listener based on sentinel connection.
+ * XXX Implement actual listener in protocol core
+ *
+ * @param client TCP client
+ * @param conn   Sentinel connection
+ * @param rclst  Place to store pointer to new client listener
+ *
+ * @return EOK on success or ENOMEM if out of memory
+ */
 static int tcp_clistener_create(tcp_client_t *client, tcp_conn_t *conn,
     tcp_clst_t **rclst)
@@ -304,4 +370,8 @@
 }
 
+/** Destroy client listener.
+ *
+ * @param clst Client listener
+ */
 static void tcp_clistener_destroy(tcp_clst_t *clst)
 {
@@ -310,4 +380,13 @@
 }
 
+/** Get client connection by ID.
+ *
+ * @param client Client
+ * @param id     Client connection ID
+ * @param rcconn Place to store pointer to client connection
+ *
+ * @return EOK on success, ENOENT if no client connection with the given ID
+ *         is found.
+ */
 static int tcp_cconn_get(tcp_client_t *client, sysarg_t id,
     tcp_cconn_t **rcconn)
@@ -323,4 +402,13 @@
 }
 
+/** Get client listener by ID.
+ *
+ * @param client Client
+ * @param id     Client connection ID
+ * @param rclst  Place to store pointer to client listener
+ *
+ * @return EOK on success, ENOENT if no client listener with the given ID
+ *         is found.
+ */
 static int tcp_clistener_get(tcp_client_t *client, sysarg_t id,
     tcp_clst_t **rclst)
@@ -336,5 +424,14 @@
 }
 
-
+/** Create connection.
+ *
+ * Handle client request to create connection (with parameters unmarshalled).
+ *
+ * @param client   TCP client
+ * @param epp      Endpoint pair
+ * @param rconn_id Place to store ID of new connection
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_create_impl(tcp_client_t *client, inet_ep2_t *epp,
     sysarg_t *rconn_id)
@@ -376,4 +473,12 @@
 }
 
+/** Destroy connection.
+ *
+ * Handle client request to destroy connection (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ * @return EOK on success, ENOENT if no such connection is found
+ */
 static int tcp_conn_destroy_impl(tcp_client_t *client, sysarg_t conn_id)
 {
@@ -393,4 +498,14 @@
 }
 
+/** Create listener.
+ *
+ * Handle client request to create listener (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param ep      Endpoint
+ * @param rlst_id Place to store ID of new listener
+ *
+ * @return EOK on success or negative error code
+*/
 static int tcp_listener_create_impl(tcp_client_t *client, inet_ep_t *ep,
     sysarg_t *rlst_id)
@@ -430,4 +545,13 @@
 }
 
+/** Destroy listener.
+ *
+ * Handle client request to destroy listener (with parameters unmarshalled).
+ *
+ * @param client TCP client
+ * @param lst_id Listener ID
+ *
+ * @return EOK on success, ENOENT if no such listener is found
+ */
 static int tcp_listener_destroy_impl(tcp_client_t *client, sysarg_t lst_id)
 {
@@ -446,4 +570,13 @@
 }
 
+/** Send FIN.
+ *
+ * Handle client request to send FIN (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_send_fin_impl(tcp_client_t *client, sysarg_t conn_id)
 {
@@ -462,4 +595,13 @@
 }
 
+/** Push connection.
+ *
+ * Handle client request to push connection (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_push_impl(tcp_client_t *client, sysarg_t conn_id)
 {
@@ -478,4 +620,13 @@
 }
 
+/** Reset connection.
+ *
+ * Handle client request to reset connection (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_reset_impl(tcp_client_t *client, sysarg_t conn_id)
 {
@@ -493,4 +644,15 @@
 }
 
+/** Send data over connection..
+ *
+ * Handle client request to send data (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ * @param data    Data buffer
+ * @param size    Data size in bytes
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_send_impl(tcp_client_t *client, sysarg_t conn_id,
     void *data, size_t size)
@@ -510,4 +672,16 @@
 }
 
+/** Receive data from connection.
+ *
+ * Handle client request to receive data (with parameters unmarshalled).
+ *
+ * @param client  TCP client
+ * @param conn_id Connection ID
+ * @param data    Data buffer
+ * @param size    Buffer size in bytes
+ * @param nrecv   Place to store actual number of bytes received
+ *
+ * @return EOK on success or negative error code
+ */
 static int tcp_conn_recv_impl(tcp_client_t *client, sysarg_t conn_id,
     void *data, size_t size, size_t *nrecv)
@@ -540,4 +714,12 @@
 }
 
+/** Create client callback session.
+ *
+ * Handle client request to create callback session.
+ *
+ * @param client  TCP client
+ * @param iid     Async request ID
+ * @param icall   Async request data
+ */
 static void tcp_callback_create_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -555,4 +737,12 @@
 }
 
+/** Create connection.
+ *
+ * Handle client request to create connection.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_create_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -594,4 +784,12 @@
 }
 
+/** Destroy connection.
+ *
+ * Handle client request to destroy connection.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_destroy_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -607,4 +805,12 @@
 }
 
+/** Create listener.
+ *
+ * Handle client request to create listener.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_listener_create_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -646,4 +852,12 @@
 }
 
+/** Destroy listener.
+ *
+ * Handle client request to destroy listener.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_listener_destroy_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -659,4 +873,12 @@
 }
 
+/** Send FIN.
+ *
+ * Handle client request to send FIN.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_send_fin_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -672,4 +894,12 @@
 }
 
+/** Push connection.
+ *
+ * Handle client request to push connection.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_push_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -685,4 +915,12 @@
 }
 
+/** Reset connection.
+ *
+ * Handle client request to reset connection.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_reset_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -698,4 +936,12 @@
 }
 
+/** Send data via connection..
+ *
+ * Handle client request to send data via connection.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_send_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -750,4 +996,12 @@
 }
 
+/** Read received data from connection without blocking.
+ *
+ * Handle client request to read received data via connection without blocking.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_recv_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -798,4 +1052,12 @@
 }
 
+/** Read received data from connection with blocking.
+ *
+ * Handle client request to read received data via connection with blocking.
+ *
+ * @param client   TCP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void tcp_conn_recv_wait_srv(tcp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -851,6 +1113,8 @@
 }
 
-#include <mem.h>
-
+/** Initialize TCP client structure.
+ *
+ * @param client TCP client
+ */
 static void tcp_client_init(tcp_client_t *client)
 {
@@ -861,12 +1125,16 @@
 }
 
+/** Finalize TCP client structure.
+ *
+ * @param client TCP client
+ */
 static void tcp_client_fini(tcp_client_t *client)
 {
 	tcp_cconn_t *cconn;
-	size_t n;
+	unsigned long n;
 
 	n = list_count(&client->cconn);
 	if (n != 0) {
-		log_msg(LOG_DEFAULT, LVL_WARN, "Client with %zu active "
+		log_msg(LOG_DEFAULT, LVL_WARN, "Client with %lu active "
 		    "connections closed session", n);
 
@@ -882,5 +1150,5 @@
 	n = list_count(&client->clst);
 	if (n != 0) {
-		log_msg(LOG_DEFAULT, LVL_WARN, "Client with %zu active "
+		log_msg(LOG_DEFAULT, LVL_WARN, "Client with %lu active "
 		    "listeners closed session", n);
 		/* XXX Destroy listeners */
@@ -891,4 +1159,10 @@
 }
 
+/** Handle TCP client connection.
+ *
+ * @param iid   Connect call ID
+ * @param icall Connect call data
+ * @param arg   Connection argument
+ */
 static void tcp_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
@@ -961,4 +1235,8 @@
 }
 
+/** Initialize TCP service.
+ *
+ * @return EOK on success or negative error code.
+ */
 int tcp_service_init(void)
 {
@@ -966,5 +1244,5 @@
 	service_id_t sid;
 
-	async_set_client_connection(tcp_client_conn);
+	async_set_fallback_port_handler(tcp_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
Index: uspace/srv/net/tcp/tcp_type.h
===================================================================
--- uspace/srv/net/tcp/tcp_type.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/tcp/tcp_type.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -47,4 +47,5 @@
 struct tcp_conn;
 
+/** Connection state */
 typedef enum {
 	/** Listen */
@@ -101,4 +102,5 @@
 } tcp_error_t;
 
+/** Transfer flags */
 typedef enum {
 	XF_PUSH		= 0x1,
@@ -106,4 +108,8 @@
 } xflags_t;
 
+/** Control message bits
+ *
+ * Note this is not the actual on-the-wire encoding
+ */
 typedef enum {
 	CTL_SYN		= 0x1,
@@ -128,4 +134,5 @@
 } tcp_tqueue_t;
 
+/** Active or passive connection */
 typedef enum {
 	ap_active,
@@ -133,4 +140,5 @@
 } acpass_t;
 
+/** Flags for TCP open operation */
 typedef enum {
 	tcp_open_nonblock = 1
@@ -264,5 +272,5 @@
 } tcp_segment_t;
 
-
+/** Receive queue entry */
 typedef struct {
 	link_t link;
@@ -279,4 +287,5 @@
 } tcp_squeue_entry_t;
 
+/** Incoming queue entry */
 typedef struct {
 	link_t link;
@@ -291,4 +300,9 @@
 } tcp_tqueue_entry_t;
 
+/** Continuation of processing.
+ *
+ * When processing incoming segment, are we done or should we continue
+ * processing it?
+ */
 typedef enum {
 	cp_continue,
Index: uspace/srv/net/udp/service.c
===================================================================
--- uspace/srv/net/udp/service.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/udp/service.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -52,12 +52,22 @@
 #define NAME "udp"
 
+/** Maximum message size */
 #define MAX_MSG_SIZE DATA_XFER_LIMIT
 
 static void udp_cassoc_recv_msg(void *, inet_ep2_t *, udp_msg_t *);
 
+/** Callbacks to tie us to association layer */
 static udp_assoc_cb_t udp_cassoc_cb = {
 	.recv_msg = udp_cassoc_recv_msg
 };
 
+/** Add message to client receive queue.
+ *
+ * @param cassoc Client association
+ * @param epp    Endpoint pair on which message was received
+ * @param msg    Message
+ *
+ * @return EOK on success, ENOMEM if out of memory
+ */
 static int udp_cassoc_queue_msg(udp_cassoc_t *cassoc, inet_ep2_t *epp,
     udp_msg_t *msg)
@@ -86,4 +96,8 @@
 }
 
+/** Send 'data' event to client.
+ *
+ * @param client Client
+ */
 static void udp_ev_data(udp_client_t *client)
 {
@@ -99,4 +113,14 @@
 }
 
+/** Create client association.
+ *
+ * This effectively adds an association into a client's namespace.
+ *
+ * @param client  Client
+ * @param assoc   Association
+ * @param rcassoc Place to store pointer to new client association
+ *
+ * @return EOK on soccess, ENOMEM if out of memory
+ */
 static int udp_cassoc_create(udp_client_t *client, udp_assoc_t *assoc,
     udp_cassoc_t **rcassoc)
@@ -125,4 +149,8 @@
 }
 
+/** Destroy client association.
+ *
+ * @param cassoc Client association
+ */
 static void udp_cassoc_destroy(udp_cassoc_t *cassoc)
 {
@@ -131,4 +159,13 @@
 }
 
+/** Get client association by ID.
+ *
+ * @param client  Client
+ * @param id      Client association ID
+ * @param rcassoc Place to store pointer to client association
+ *
+ * @return EOK on success, ENOENT if no client association with the given ID
+ *         is found.
+ */
 static int udp_cassoc_get(udp_client_t *client, sysarg_t id,
     udp_cassoc_t **rcassoc)
@@ -144,4 +181,12 @@
 }
 
+/** Message received on client association.
+ *
+ * Used as udp_assoc_cb.recv_msg callback.
+ *
+ * @param arg Callback argument, client association
+ * @param epp Endpoint pair where message was received
+ * @param msg Message
+ */
 static void udp_cassoc_recv_msg(void *arg, inet_ep2_t *epp, udp_msg_t *msg)
 {
@@ -152,4 +197,14 @@
 }
 
+/** Create association.
+ *
+ * Handle client request to create association (with parameters unmarshalled).
+ *
+ * @param client    UDP client
+ * @param epp       Endpoint pair
+ * @param rassoc_id Place to store ID of new association
+ *
+ * @return EOK on success or negative error code
+ */
 static int udp_assoc_create_impl(udp_client_t *client, inet_ep2_t *epp,
     sysarg_t *rassoc_id)
@@ -189,4 +244,12 @@
 }
 
+/** Destroy association.
+ *
+ * Handle client request to destroy association (with parameters unmarshalled).
+ *
+ * @param client   UDP client
+ * @param assoc_id Association ID
+ * @return EOK on success, ENOENT if no such association is found
+ */
 static int udp_assoc_destroy_impl(udp_client_t *client, sysarg_t assoc_id)
 {
@@ -207,4 +270,17 @@
 }
 
+/** Send message via association.
+ *
+ * Handle client request to send message (with parameters unmarshalled).
+ *
+ * @param client   UDP client
+ * @param assoc_id Association ID
+ * @param dest     Destination endpoint or @c NULL to use the default from
+ *                 association
+ * @param data     Message data
+ * @param size     Message size
+ *
+ * @return EOK on success or negative error code
+ */
 static int udp_assoc_send_msg_impl(udp_client_t *client, sysarg_t assoc_id,
     inet_ep_t *dest, void *data, size_t size)
@@ -227,4 +303,12 @@
 }
 
+/** Create callback session.
+ *
+ * Handle client request to create callback session.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_callback_create_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -242,4 +326,12 @@
 }
 
+/** Create association.
+ *
+ * Handle client request to create association.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_assoc_create_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -281,4 +373,12 @@
 }
 
+/** Destroy association.
+ *
+ * Handle client request to destroy association.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_assoc_destroy_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -294,4 +394,12 @@
 }
 
+/** Send message via association.
+ *
+ * Handle client request to send message.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_assoc_send_msg_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -368,4 +476,9 @@
 }
 
+/** Get next received message.
+ *
+ * @param client UDP Client
+ * @return Pointer to queue entry for next received message
+ */
 static udp_crcv_queue_entry_t *udp_rmsg_get_next(udp_client_t *client)
 {
@@ -379,4 +492,12 @@
 }
 
+/** Get info on first received message.
+ *
+ * Handle client request to get information on received message.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_rmsg_info_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -418,4 +539,12 @@
 }
 
+/** Read data from first received message.
+ *
+ * Handle client request to read data from first received message.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_rmsg_read_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -460,4 +589,13 @@
 }
 
+/** Discard first received message.
+ *
+ * Handle client request to discard first received message, advancing
+ * to the next one.
+ *
+ * @param client   UDP client
+ * @param iid      Async request ID
+ * @param icall    Async request data
+ */
 static void udp_rmsg_discard_srv(udp_client_t *client, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -480,8 +618,14 @@
 }
 
+/** Handle UDP client connection.
+ *
+ * @param iid   Connect call ID
+ * @param icall Connect call data
+ * @param arg   Connection argument
+ */
 static void udp_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	udp_client_t client;
-	size_t n;
+	unsigned long n;
 
 	/* Accept the connection */
@@ -541,5 +685,5 @@
 	if (n != 0) {
 		log_msg(LOG_DEFAULT, LVL_WARN, "udp_client_conn: "
-		    "Client with %zu active associations closed session.", n);
+		    "Client with %lu active associations closed session.", n);
 		/* XXX Clean up */
 	}
@@ -551,4 +695,8 @@
 }
 
+/** Initialize UDP service.
+ *
+ * @return EOK on success or negative error code.
+ */
 int udp_service_init(void)
 {
@@ -556,5 +704,5 @@
 	service_id_t sid;
 
-	async_set_client_connection(udp_client_conn);
+	async_set_fallback_port_handler(udp_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
Index: uspace/srv/net/udp/udp_type.h
===================================================================
--- uspace/srv/net/udp/udp_type.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/net/udp/udp_type.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -46,4 +46,5 @@
 #define UDP_FRAGMENT_SIZE 65535
 
+/** UDP error codes */
 typedef enum {
 	UDP_EOK,
@@ -84,5 +85,7 @@
 } udp_pdu_t;
 
+/** Association callbacks */
 typedef struct {
+	/** Message received */
 	void (*recv_msg)(void *, inet_ep2_t *, udp_msg_t *);
 } udp_assoc_cb_t;
@@ -124,4 +127,5 @@
 } udp_assoc_status_t;
 
+/** UDP receive queue entry */
 typedef struct {
 	/** Link to receive queue */
@@ -133,4 +137,8 @@
 } udp_rcv_queue_entry_t;
 
+/** UDP client association.
+ *
+ * Ties a UDP association into the namespace of a client
+ */
 typedef struct udp_cassoc {
 	/** Association */
@@ -143,4 +151,5 @@
 } udp_cassoc_t;
 
+/** UDP client receive queue entry */
 typedef struct {
 	/** Link to receive queue */
@@ -154,4 +163,5 @@
 } udp_crcv_queue_entry_t;
 
+/** UDP client */
 typedef struct udp_client {
 	/** Client callback session */
Index: uspace/srv/ns/clonable.c
===================================================================
--- uspace/srv/ns/clonable.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/clonable.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -46,7 +46,8 @@
 typedef struct {
 	link_t link;
-	sysarg_t service;
-	ipc_call_t call;
+	service_t service;
+	iface_t iface;
 	ipc_callid_t callid;
+	sysarg_t arg3;
 } cs_req_t;
 
@@ -61,7 +62,7 @@
 
 /** Return true if @a service is clonable. */
-bool service_clonable(int service)
+bool service_clonable(service_t service)
 {
-	return (service == SERVICE_LOAD);
+	return (service == SERVICE_LOADER);
 }
 
@@ -73,10 +74,8 @@
  *
  */
-void register_clonable(sysarg_t service, sysarg_t phone, ipc_call_t *call,
+void register_clonable(service_t service, sysarg_t phone, ipc_call_t *call,
     ipc_callid_t callid)
 {
-	link_t *req_link;
-
-	req_link = list_first(&cs_req);
+	link_t *req_link = list_first(&cs_req);
 	if (req_link == NULL) {
 		/* There was no pending connection request. */
@@ -90,10 +89,10 @@
 	
 	/* Currently we can only handle a single type of clonable service. */
-	assert(csr->service == SERVICE_LOAD);
+	assert(csr->service == SERVICE_LOADER);
 	
 	ipc_answer_0(callid, EOK);
 	
-	ipc_forward_fast(csr->callid, phone, IPC_GET_ARG2(csr->call),
-	    IPC_GET_ARG3(csr->call), 0, IPC_FF_NONE);
+	ipc_forward_fast(csr->callid, phone, csr->iface, csr->arg3, 0,
+	    IPC_FF_NONE);
 	
 	free(csr);
@@ -104,4 +103,5 @@
  *
  * @param service Service to be connected to.
+ * @param iface   Interface to be connected to.
  * @param call    Pointer to call structure.
  * @param callid  Call ID of the request.
@@ -110,8 +110,8 @@
  *
  */
-void connect_to_clonable(sysarg_t service, ipc_call_t *call,
+void connect_to_clonable(service_t service, iface_t iface, ipc_call_t *call,
     ipc_callid_t callid)
 {
-	assert(service == SERVICE_LOAD);
+	assert(service == SERVICE_LOADER);
 	
 	cs_req_t *csr = malloc(sizeof(cs_req_t));
@@ -132,6 +132,7 @@
 	link_initialize(&csr->link);
 	csr->service = service;
-	csr->call = *call;
+	csr->iface = iface;
 	csr->callid = callid;
+	csr->arg3 = IPC_GET_ARG3(*call);
 	
 	/*
Index: uspace/srv/ns/clonable.h
===================================================================
--- uspace/srv/ns/clonable.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/clonable.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -36,11 +36,14 @@
 #include <ipc/common.h>
 #include <sys/types.h>
+#include <ipc/services.h>
+#include <abi/ipc/interfaces.h>
 #include <stdbool.h>
 
 extern int clonable_init(void);
 
-extern bool service_clonable(int);
-extern void register_clonable(sysarg_t, sysarg_t, ipc_call_t *, ipc_callid_t);
-extern void connect_to_clonable(sysarg_t, ipc_call_t *, ipc_callid_t);
+extern bool service_clonable(service_t);
+extern void register_clonable(service_t, sysarg_t, ipc_call_t *,
+    ipc_callid_t);
+extern void connect_to_clonable(service_t, iface_t, ipc_call_t *, ipc_callid_t);
 
 #endif
Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/ns.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -38,4 +38,6 @@
 #include <ipc/ipc.h>
 #include <ipc/ns.h>
+#include <ipc/services.h>
+#include <abi/ipc/interfaces.h>
 #include <stdio.h>
 #include <errno.h>
@@ -73,4 +75,8 @@
 		sysarg_t retval;
 		
+		iface_t iface;
+		service_t service;
+		sysarg_t phone;
+		
 		switch (IPC_GET_IMETHOD(call)) {
 		case IPC_M_PHONE_HUNGUP:
@@ -78,27 +84,29 @@
 			break;
 		case IPC_M_CONNECT_TO_ME:
+			service = IPC_GET_ARG2(call);
+			phone = IPC_GET_ARG5(call);
+			
 			/*
 			 * Server requests service registration.
 			 */
-			if (service_clonable(IPC_GET_ARG1(call))) {
-				register_clonable(IPC_GET_ARG1(call),
-				    IPC_GET_ARG5(call), &call, callid);
+			if (service_clonable(service)) {
+				register_clonable(service, phone, &call, callid);
 				continue;
-			} else {
-				retval = register_service(IPC_GET_ARG1(call),
-				    IPC_GET_ARG5(call), &call);
-			}
+			} else
+				retval = register_service(service, phone, &call);
+			
 			break;
 		case IPC_M_CONNECT_ME_TO:
+			iface = IPC_GET_ARG1(call);
+			service = IPC_GET_ARG2(call);
+			
 			/*
 			 * Client requests to be connected to a service.
 			 */
-			if (service_clonable(IPC_GET_ARG1(call))) {
-				connect_to_clonable(IPC_GET_ARG1(call),
-				    &call, callid);
+			if (service_clonable(service)) {
+				connect_to_clonable(service, iface, &call, callid);
 				continue;
 			} else {
-				connect_to_service(IPC_GET_ARG1(call), &call,
-				    callid);
+				connect_to_service(service, iface, &call, callid);
 				continue;
 			}
Index: uspace/srv/ns/service.c
===================================================================
--- uspace/srv/ns/service.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/service.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -40,29 +40,37 @@
 #include "ns.h"
 
-
 /** Service hash table item. */
 typedef struct {
 	ht_link_t link;
-	sysarg_t service;        /**< Service ID. */
-	sysarg_t phone;          /**< Phone registered with the service. */
-	sysarg_t in_phone_hash;  /**< Incoming phone hash. */
+	
+	/** Service ID */
+	service_t service;
+	
+	/** Phone registered with the interface */
+	sysarg_t phone;
+	
+	/** Incoming phone hash */
+	sysarg_t in_phone_hash;
 } hashed_service_t;
 
-
 static size_t service_key_hash(void *key)
 {
-	return *(sysarg_t*)key;
+	return *(service_t *) key;
 }
 
 static size_t service_hash(const ht_link_t *item)
 {
-	hashed_service_t *hs = hash_table_get_inst(item, hashed_service_t, link);
-	return hs->service;
+	hashed_service_t *service =
+	    hash_table_get_inst(item, hashed_service_t, link);
+	
+	return service->service;
 }
 
 static bool service_key_equal(void *key, const ht_link_t *item)
 {
-	hashed_service_t *hs = hash_table_get_inst(item, hashed_service_t, link);
-	return hs->service == *(sysarg_t*)key;
+	hashed_service_t *service =
+	    hash_table_get_inst(item, hashed_service_t, link);
+	
+	return service->service == *(service_t *) key;
 }
 
@@ -82,8 +90,8 @@
 typedef struct {
 	link_t link;
-	sysarg_t service;        /**< Number of the service. */
-	ipc_callid_t callid;     /**< Call ID waiting for the connection */
-	sysarg_t arg2;           /**< Second argument */
-	sysarg_t arg3;           /**< Third argument */
+	service_t service;    /**< Service ID */
+	iface_t iface;        /**< Interface ID */
+	ipc_callid_t callid;  /**< Call ID waiting for the connection */
+	sysarg_t arg3;        /**< Third argument */
 } pending_conn_t;
 
@@ -92,6 +100,7 @@
 int service_init(void)
 {
-	if (!hash_table_create(&service_hash_table, 0, 0, &service_hash_table_ops)) {
-		printf(NAME ": No memory available for services\n");
+	if (!hash_table_create(&service_hash_table, 0, 0,
+	    &service_hash_table_ops)) {
+		printf("%s: No memory available for services\n", NAME);
 		return ENOMEM;
 	}
@@ -106,15 +115,16 @@
 {
 loop:
-	list_foreach(pending_conn, link, pending_conn_t, pr) {
-		ht_link_t *link = hash_table_find(&service_hash_table, &pr->service);
+	list_foreach(pending_conn, link, pending_conn_t, pending) {
+		ht_link_t *link = hash_table_find(&service_hash_table, &pending->service);
 		if (!link)
 			continue;
 		
-		hashed_service_t *hs = hash_table_get_inst(link, hashed_service_t, link);
-		(void) ipc_forward_fast(pr->callid, hs->phone, pr->arg2,
-		    pr->arg3, 0, IPC_FF_NONE);
-		
-		list_remove(&pr->link);
-		free(pr);
+		hashed_service_t *hashed_service = hash_table_get_inst(link, hashed_service_t, link);
+		(void) ipc_forward_fast(pending->callid, hashed_service->phone,
+		    pending->iface, pending->arg3, 0, IPC_FF_NONE);
+		
+		list_remove(&pending->link);
+		free(pending);
+		
 		goto loop;
 	}
@@ -130,17 +140,19 @@
  *
  */
-int register_service(sysarg_t service, sysarg_t phone, ipc_call_t *call)
+int register_service(service_t service, sysarg_t phone, ipc_call_t *call)
 {
 	if (hash_table_find(&service_hash_table, &service))
-		return EEXISTS;
-	
-	hashed_service_t *hs = (hashed_service_t *) malloc(sizeof(hashed_service_t));
-	if (!hs)
+		return EEXIST;
+	
+	hashed_service_t *hashed_service =
+	    (hashed_service_t *) malloc(sizeof(hashed_service_t));
+	if (!hashed_service)
 		return ENOMEM;
 	
-	hs->service = service;
-	hs->phone = phone;
-	hs->in_phone_hash = call->in_phone_hash;
-	hash_table_insert(&service_hash_table, &hs->link);
+	hashed_service->service = service;
+	hashed_service->phone = phone;
+	hashed_service->in_phone_hash = call->in_phone_hash;
+	
+	hash_table_insert(&service_hash_table, &hashed_service->link);
 	
 	return EOK;
@@ -150,4 +162,5 @@
  *
  * @param service Service to be connected to.
+ * @param iface   Interface to be connected to.
  * @param call    Pointer to call structure.
  * @param callid  Call ID of the request.
@@ -156,34 +169,39 @@
  *
  */
-void connect_to_service(sysarg_t service, ipc_call_t *call, ipc_callid_t callid)
-{
+void connect_to_service(service_t service, iface_t iface, ipc_call_t *call,
+    ipc_callid_t callid)
+{
+	sysarg_t arg3 = IPC_GET_ARG3(*call);
+	sysarg_t flags = IPC_GET_ARG4(*call);
 	sysarg_t retval;
 	
 	ht_link_t *link = hash_table_find(&service_hash_table, &service);
 	if (!link) {
-		if (IPC_GET_ARG4(*call) & IPC_FLAG_BLOCKING) {
+		if (flags & IPC_FLAG_BLOCKING) {
 			/* Blocking connection, add to pending list */
-			pending_conn_t *pr =
+			pending_conn_t *pending =
 			    (pending_conn_t *) malloc(sizeof(pending_conn_t));
-			if (!pr) {
+			if (!pending) {
 				retval = ENOMEM;
 				goto out;
 			}
 			
-			link_initialize(&pr->link);
-			pr->service = service;
-			pr->callid = callid;
-			pr->arg2 = IPC_GET_ARG2(*call);
-			pr->arg3 = IPC_GET_ARG3(*call);
-			list_append(&pr->link, &pending_conn);
+			link_initialize(&pending->link);
+			pending->service = service;
+			pending->iface = iface;
+			pending->callid = callid;
+			pending->arg3 = arg3;
+			
+			list_append(&pending->link, &pending_conn);
 			return;
 		}
+		
 		retval = ENOENT;
 		goto out;
 	}
 	
-	hashed_service_t *hs = hash_table_get_inst(link, hashed_service_t, link);
-	(void) ipc_forward_fast(callid, hs->phone, IPC_GET_ARG2(*call),
-	    IPC_GET_ARG3(*call), 0, IPC_FF_NONE);
+	hashed_service_t *hashed_service = hash_table_get_inst(link, hashed_service_t, link);
+	(void) ipc_forward_fast(callid, hashed_service->phone, iface, arg3,
+	    0, IPC_FF_NONE);
 	return;
 	
Index: uspace/srv/ns/service.h
===================================================================
--- uspace/srv/ns/service.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/service.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -36,10 +36,12 @@
 #include <sys/types.h>
 #include <ipc/common.h>
+#include <ipc/services.h>
+#include <abi/ipc/interfaces.h>
 
 extern int service_init(void);
 extern void process_pending_conn(void);
 
-extern int register_service(sysarg_t, sysarg_t, ipc_call_t *);
-extern void connect_to_service(sysarg_t, ipc_call_t *, ipc_callid_t);
+extern int register_service(service_t, sysarg_t, ipc_call_t *);
+extern void connect_to_service(service_t, iface_t, ipc_call_t *, ipc_callid_t);
 
 #endif
Index: uspace/srv/ns/task.c
===================================================================
--- uspace/srv/ns/task.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/ns/task.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -231,10 +231,9 @@
 int ns_task_id_intro(ipc_call_t *call)
 {
-	
 	task_id_t id = MERGE_LOUP32(IPC_GET_ARG1(*call), IPC_GET_ARG2(*call));
-
+	
 	ht_link_t *link = hash_table_find(&phone_to_id, &call->in_phone_hash);
 	if (link != NULL)
-		return EEXISTS;
+		return EEXIST;
 	
 	p2i_entry_t *entry = (p2i_entry_t *) malloc(sizeof(p2i_entry_t));
Index: uspace/srv/taskmon/taskmon.c
===================================================================
--- uspace/srv/taskmon/taskmon.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/taskmon/taskmon.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -147,5 +147,5 @@
 	}
 	
-	async_set_client_connection(corecfg_client_conn);
+	async_set_fallback_port_handler(corecfg_client_conn, NULL);
 	
 	int rc = loc_server_register(NAME);
Index: uspace/srv/vfs/vfs.c
===================================================================
--- uspace/srv/vfs/vfs.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/vfs/vfs.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -74,8 +74,8 @@
 			break;
 		case VFS_IN_MOUNT:
-			vfs_mount(callid, &call);
+			vfs_mount_srv(callid, &call);
 			break;
 		case VFS_IN_UNMOUNT:
-			vfs_unmount(callid, &call);
+			vfs_unmount_srv(callid, &call);
 			break;
 		case VFS_IN_OPEN:
@@ -181,5 +181,5 @@
 	 * Set a connection handling function/fibril.
 	 */
-	async_set_client_connection(vfs_connection);
+	async_set_fallback_port_handler(vfs_connection, NULL);
 
 	/*
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/vfs/vfs.h	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -205,6 +205,6 @@
 
 extern void vfs_register(ipc_callid_t, ipc_call_t *);
-extern void vfs_mount(ipc_callid_t, ipc_call_t *);
-extern void vfs_unmount(ipc_callid_t, ipc_call_t *);
+extern void vfs_mount_srv(ipc_callid_t, ipc_call_t *);
+extern void vfs_unmount_srv(ipc_callid_t, ipc_call_t *);
 extern void vfs_open(ipc_callid_t, ipc_call_t *);
 extern void vfs_sync(ipc_callid_t, ipc_call_t *);
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/vfs/vfs_ops.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -266,5 +266,5 @@
 }
 
-void vfs_mount(ipc_callid_t rid, ipc_call_t *request)
+void vfs_mount_srv(ipc_callid_t rid, ipc_call_t *request)
 {
 	service_id_t service_id;
@@ -405,5 +405,5 @@
 }
 
-void vfs_unmount(ipc_callid_t rid, ipc_call_t *request)
+void vfs_unmount_srv(ipc_callid_t rid, ipc_call_t *request)
 {
 	int rc;
Index: uspace/srv/vfs/vfs_register.c
===================================================================
--- uspace/srv/vfs/vfs_register.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/vfs/vfs_register.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -113,5 +113,5 @@
 void vfs_register(ipc_callid_t rid, ipc_call_t *request)
 {
-	dprintf("Processing VFS_REGISTER request received from %p.\n",
+	dprintf("Processing VFS_REGISTER request received from %zx.\n",
 	    request->in_phone_hash);
 	
@@ -162,5 +162,5 @@
 		fibril_mutex_unlock(&fs_list_lock);
 		free(fs_info);
-		async_answer_0(rid, EEXISTS);
+		async_answer_0(rid, EEXIST);
 		return;
 	}
@@ -196,5 +196,5 @@
 	ipc_callid_t callid;
 	if (!async_share_in_receive(&callid, &size)) {
-		dprintf("Unexpected call, method = %d\n", IPC_GET_IMETHOD(call));
+		dprintf("Unexpected call\n");
 		list_remove(&fs_info->fs_link);
 		fibril_mutex_unlock(&fs_list_lock);
@@ -210,5 +210,5 @@
 	 */
 	if (size != PLB_SIZE) {
-		dprintf("Client suggests wrong size of PFB, size = %d\n", size);
+		dprintf("Client suggests wrong size of PFB, size = %zu\n", size);
 		list_remove(&fs_info->fs_link);
 		fibril_mutex_unlock(&fs_list_lock);
Index: uspace/srv/volsrv/empty.c
===================================================================
--- uspace/srv/volsrv/empty.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/volsrv/empty.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -96,5 +96,5 @@
 	bool empty;
 
-	rc = block_init(EXCHANGE_SERIALIZE, sid, 2048);
+	rc = block_init(sid, 2048);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Error opening "
@@ -186,5 +186,5 @@
 	size_t block_size;
 
-	rc = block_init(EXCHANGE_SERIALIZE, sid, 2048);
+	rc = block_init(sid, 2048);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Error opening "
Index: uspace/srv/volsrv/volsrv.c
===================================================================
--- uspace/srv/volsrv/volsrv.c	(revision 89204a23d3c29234ec668d1493fd339a5a6a5dcd)
+++ uspace/srv/volsrv/volsrv.c	(revision ff381a79ad697b23cc01e3f8a66966d2d2cbd7dc)
@@ -65,5 +65,5 @@
 		return rc;
 
-	async_set_client_connection(vol_client_conn);
+	async_set_fallback_port_handler(vol_client_conn, NULL);
 
 	rc = loc_server_register(NAME);
