Index: uspace/lib/c/generic/clipboard.c
===================================================================
--- uspace/lib/c/generic/clipboard.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/clipboard.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -62,5 +62,5 @@
 	while (clip_sess == NULL)
 		clip_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-		    SERVICE_CLIPBOARD, 0, 0);
+		    SERVICE_CLIPBOARD, 0);
 	
 	fibril_mutex_unlock(&clip_mutex);
Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/devman.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -89,6 +89,6 @@
 			if (devman_driver_block_sess == NULL)
 				devman_driver_block_sess =
-				    service_connect_blocking(EXCHANGE_PARALLEL,
-				    SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
+				    service_connect_blocking_iface(EXCHANGE_PARALLEL,
+				    DEVMAN_DRIVER, SERVICE_DEVMAN, 0);
 		}
 		
@@ -108,6 +108,6 @@
 			if (devman_client_block_sess == NULL)
 				devman_client_block_sess =
-				    service_connect_blocking(EXCHANGE_SERIALIZE,
-				    SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
+				    service_connect_blocking_iface(EXCHANGE_SERIALIZE,
+				    DEVMAN_CLIENT, SERVICE_DEVMAN, 0);
 		}
 		
@@ -138,6 +138,6 @@
 		if (devman_driver_sess == NULL)
 			devman_driver_sess =
-			    service_connect(EXCHANGE_PARALLEL, SERVICE_DEVMAN,
-			    DEVMAN_DRIVER, 0);
+			    service_connect_iface(EXCHANGE_PARALLEL, DEVMAN_DRIVER,
+			    SERVICE_DEVMAN, 0);
 		
 		fibril_mutex_unlock(&devman_driver_mutex);
@@ -152,6 +152,6 @@
 		if (devman_client_sess == NULL)
 			devman_client_sess =
-			    service_connect(EXCHANGE_SERIALIZE, SERVICE_DEVMAN,
-			    DEVMAN_CLIENT, 0);
+			    service_connect_iface(EXCHANGE_SERIALIZE, DEVMAN_CLIENT,
+			    SERVICE_DEVMAN, 0);
 		
 		fibril_mutex_unlock(&devman_client_mutex);
@@ -293,9 +293,9 @@
 	
 	if (flags & IPC_FLAG_BLOCKING)
-		sess = service_connect_blocking(mgmt, SERVICE_DEVMAN,
-			    DEVMAN_CONNECT_TO_DEVICE, handle);
+		sess = service_connect_blocking_iface(mgmt, DEVMAN_CONNECT_TO_DEVICE,
+		    SERVICE_DEVMAN, handle);
 	else
-		sess = service_connect(mgmt, SERVICE_DEVMAN,
-			    DEVMAN_CONNECT_TO_DEVICE, handle);
+		sess = service_connect_iface(mgmt, DEVMAN_CONNECT_TO_DEVICE,
+		    SERVICE_DEVMAN, handle);
 	
 	return sess;
@@ -351,9 +351,9 @@
 	
 	if (flags & IPC_FLAG_BLOCKING)
-		sess = service_connect_blocking(mgmt, SERVICE_DEVMAN,
-			    DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle);
+		sess = service_connect_blocking_iface(mgmt,
+			    DEVMAN_CONNECT_TO_PARENTS_DEVICE, SERVICE_DEVMAN, handle);
 	else
-		sess = service_connect(mgmt, SERVICE_DEVMAN,
-			    DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle);
+		sess = service_connect_iface(mgmt,
+			    DEVMAN_CONNECT_TO_PARENTS_DEVICE, SERVICE_DEVMAN, handle);
 	
 	return sess;
Index: uspace/lib/c/generic/io/log.c
===================================================================
--- uspace/lib/c/generic/io/log.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/io/log.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -166,5 +166,6 @@
 		return ENOMEM;
 
-	logger_session = service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_LOGGER, LOGGER_INTERFACE_WRITER, 0);
+	logger_session = service_connect_blocking_iface(EXCHANGE_SERIALIZE,
+	    LOGGER_INTERFACE_WRITER, SERVICE_LOGGER, 0);
 	if (logger_session == NULL) {
 		return ENOMEM;
Index: uspace/lib/c/generic/io/logctl.c
===================================================================
--- uspace/lib/c/generic/io/logctl.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/io/logctl.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -48,6 +48,6 @@
 
 	if (logger_session == NULL) {
-		logger_session = service_connect_blocking(EXCHANGE_SERIALIZE,
-		    SERVICE_LOGGER, LOGGER_INTERFACE_CONTROL, 0);
+		logger_session = service_connect_blocking_iface(EXCHANGE_SERIALIZE,
+		    LOGGER_INTERFACE_CONTROL, SERVICE_LOGGER, 0);
 		if (logger_session == NULL)
 			return ENOMEM;
Index: uspace/lib/c/generic/irc.c
===================================================================
--- uspace/lib/c/generic/irc.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/irc.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -52,5 +52,5 @@
 
 	irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_IRC, 0, 0);
+	    SERVICE_IRC, 0);
 
 	if (irc_sess == NULL)
Index: uspace/lib/c/generic/loader.c
===================================================================
--- uspace/lib/c/generic/loader.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/loader.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -69,5 +69,5 @@
 	
 	async_sess_t *sess =
-	    service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_LOAD, 0, 0);
+	    service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_LOAD, 0);
 	if (sess == NULL) {
 		free(ldr);
Index: uspace/lib/c/generic/loc.c
===================================================================
--- uspace/lib/c/generic/loc.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/loc.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -147,6 +147,6 @@
 			if (loc_supp_block_sess == NULL)
 				loc_supp_block_sess =
-				    service_connect_blocking(EXCHANGE_SERIALIZE,
-				    SERVICE_LOC, LOC_PORT_SUPPLIER, 0);
+				    service_connect_blocking_iface(EXCHANGE_SERIALIZE,
+				    LOC_PORT_SUPPLIER, SERVICE_LOC, 0);
 		}
 		
@@ -166,6 +166,6 @@
 			if (loc_cons_block_sess == NULL)
 				loc_cons_block_sess =
-				    service_connect_blocking(EXCHANGE_SERIALIZE,
-				    SERVICE_LOC, LOC_PORT_CONSUMER, 0);
+				    service_connect_blocking_iface(EXCHANGE_SERIALIZE,
+				    LOC_PORT_CONSUMER, SERVICE_LOC, 0);
 		}
 		
@@ -196,6 +196,6 @@
 		if (loc_supplier_sess == NULL)
 			loc_supplier_sess =
-			    service_connect(EXCHANGE_SERIALIZE, SERVICE_LOC,
-			    LOC_PORT_SUPPLIER, 0);
+			    service_connect_iface(EXCHANGE_SERIALIZE, LOC_PORT_SUPPLIER,
+			    SERVICE_LOC, 0);
 		
 		fibril_mutex_unlock(&loc_supplier_mutex);
@@ -210,6 +210,6 @@
 		if (loc_consumer_sess == NULL)
 			loc_consumer_sess =
-			    service_connect(EXCHANGE_SERIALIZE, SERVICE_LOC,
-			    LOC_PORT_CONSUMER, 0);
+			    service_connect_iface(EXCHANGE_SERIALIZE, LOC_PORT_CONSUMER,
+			    SERVICE_LOC, 0);
 		
 		fibril_mutex_unlock(&loc_consumer_mutex);
@@ -575,9 +575,9 @@
 	
 	if (flags & IPC_FLAG_BLOCKING)
-		sess = service_connect_blocking(mgmt, SERVICE_LOC,
-		    LOC_CONNECT_TO_SERVICE, handle);
+		sess = service_connect_blocking_iface(mgmt, LOC_CONNECT_TO_SERVICE,
+		    SERVICE_LOC, handle);
 	else
-		sess = service_connect(mgmt, SERVICE_LOC,
-		    LOC_CONNECT_TO_SERVICE, handle);
+		sess = service_connect_iface(mgmt, LOC_CONNECT_TO_SERVICE,
+		    SERVICE_LOC, handle);
 	
 	return sess;
Index: uspace/lib/c/generic/ns.c
===================================================================
--- uspace/lib/c/generic/ns.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/ns.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -43,5 +43,5 @@
 {
 	async_exch_t *exch = async_exchange_begin(session_ns);
-	int rc = async_connect_to_me(exch, service, 0, 0, NULL, NULL);
+	int rc = async_connect_to_me(exch, 0, service, 0, NULL, NULL);
 	async_exchange_end(exch);
 	
@@ -49,6 +49,6 @@
 }
 
-async_sess_t *service_connect(exch_mgmt_t mgmt, service_t service, sysarg_t arg2,
-    sysarg_t arg3)
+async_sess_t *service_connect_iface(exch_mgmt_t mgmt, sysarg_t iface,
+    service_t service, sysarg_t arg3)
 {
 	async_exch_t *exch = async_exchange_begin(session_ns);
@@ -57,5 +57,5 @@
 	
 	async_sess_t *sess =
-	    async_connect_me_to(mgmt, exch, service, arg2, arg3);
+	    async_connect_me_to(mgmt, exch, iface, service, arg3);
 	async_exchange_end(exch);
 	
@@ -68,17 +68,17 @@
 	 * first argument for non-initial connections.
 	 */
-	async_sess_args_set(sess, arg2, arg3, 0);
+	async_sess_args_set(sess, iface, arg3, 0);
 	
 	return sess;
 }
 
-async_sess_t *service_connect_blocking(exch_mgmt_t mgmt, service_t service,
-    sysarg_t arg2, sysarg_t arg3)
+async_sess_t *service_connect(exch_mgmt_t mgmt, service_t service, sysarg_t arg3)
 {
 	async_exch_t *exch = async_exchange_begin(session_ns);
 	if (!exch)
 		return NULL;
+	
 	async_sess_t *sess =
-	    async_connect_me_to_blocking(mgmt, exch, service, arg2, arg3);
+	    async_connect_me_to(mgmt, exch, 0, service, arg3);
 	async_exchange_end(exch);
 	
@@ -91,5 +91,51 @@
 	 * first argument for non-initial connections.
 	 */
-	async_sess_args_set(sess, arg2, arg3, 0);
+	async_sess_args_set(sess, 0, arg3, 0);
+	
+	return sess;
+}
+
+async_sess_t *service_connect_blocking_iface(exch_mgmt_t mgmt, sysarg_t iface,
+    service_t service, sysarg_t arg3)
+{
+	async_exch_t *exch = async_exchange_begin(session_ns);
+	if (!exch)
+		return NULL;
+	async_sess_t *sess =
+	    async_connect_me_to_blocking(mgmt, exch, iface, service, arg3);
+	async_exchange_end(exch);
+	
+	if (!sess)
+		return NULL;
+	
+	/*
+	 * FIXME Ugly hack to work around limitation of implementing
+	 * parallel exchanges using multiple connections. Shift out
+	 * first argument for non-initial connections.
+	 */
+	async_sess_args_set(sess, iface, arg3, 0);
+	
+	return sess;
+}
+
+async_sess_t *service_connect_blocking(exch_mgmt_t mgmt, service_t service,
+    sysarg_t arg3)
+{
+	async_exch_t *exch = async_exchange_begin(session_ns);
+	if (!exch)
+		return NULL;
+	async_sess_t *sess =
+	    async_connect_me_to_blocking(mgmt, exch, 0, service, arg3);
+	async_exchange_end(exch);
+	
+	if (!sess)
+		return NULL;
+	
+	/*
+	 * FIXME Ugly hack to work around limitation of implementing
+	 * parallel exchanges using multiple connections. Shift out
+	 * first argument for non-initial connections.
+	 */
+	async_sess_args_set(sess, 0, arg3, 0);
 	
 	return sess;
@@ -113,5 +159,5 @@
 	/* Connect to the needed service */
 	async_sess_t *sess =
-	    service_connect_blocking(EXCHANGE_SERIALIZE, service, 0, 0);
+	    service_connect_blocking(EXCHANGE_SERIALIZE, service, 0);
 	if (sess != NULL) {
 		/* Request callback connection */
Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -76,5 +76,5 @@
 	while (vfs_sess == NULL)
 		vfs_sess = service_connect_blocking(EXCHANGE_PARALLEL, SERVICE_VFS,
-		    0, 0);
+		    0);
 	
 	fibril_mutex_unlock(&vfs_mutex);
Index: uspace/lib/c/include/ns.h
===================================================================
--- uspace/lib/c/include/ns.h	(revision 6a8ce16e9d7ca696b63ae994c87911928c450d62)
+++ uspace/lib/c/include/ns.h	(revision 9cfbf2fc181e543945d1810f24daf11e0311be60)
@@ -42,6 +42,8 @@
 
 extern int service_register(sysarg_t);
-extern async_sess_t *service_connect(exch_mgmt_t, service_t, sysarg_t, sysarg_t);
-extern async_sess_t *service_connect_blocking(exch_mgmt_t, service_t, sysarg_t,
+extern async_sess_t *service_connect(exch_mgmt_t, service_t, sysarg_t);
+extern async_sess_t *service_connect_iface(exch_mgmt_t, sysarg_t, service_t, sysarg_t);
+extern async_sess_t *service_connect_blocking(exch_mgmt_t, service_t, sysarg_t);
+extern async_sess_t *service_connect_blocking_iface(exch_mgmt_t, sysarg_t, service_t,
     sysarg_t);
 extern async_sess_t *service_bind(service_t, sysarg_t, sysarg_t, sysarg_t,
