Index: uspace/app/klog/klog.c
===================================================================
--- uspace/app/klog/klog.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/app/klog/klog.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -143,6 +143,7 @@
  * Receives kernel klog notifications.
  *
- * @param callid IPC call ID.
- * @param call   IPC call structure.
+ * @param callid	IPC call ID
+ * @param call		IPC call structure
+ * @param arg		Local argument
  *
  */
Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/async.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -166,4 +166,6 @@
 	/** Call data of the opening call. */
 	ipc_call_t call;
+	/** Local argument or NULL if none. */
+	void *carg;
 	
 	/** Identification of the closing call. */
@@ -171,5 +173,5 @@
 	
 	/** Fibril function that will be used to handle the connection. */
-	void (*cfibril)(ipc_callid_t, ipc_call_t *);
+	async_client_conn_t cfibril;
 } connection_t;
 
@@ -211,9 +213,11 @@
  * This function is defined as a weak symbol - to be redefined in user code.
  *
- * @param callid Hash of the incoming call.
- * @param call   Data of the incoming call.
- *
- */
-static void default_client_connection(ipc_callid_t callid, ipc_call_t *call)
+ * @param callid	Hash of the incoming call.
+ * @param call		Data of the incoming call.
+ * @param arg		Local argument
+ *
+ */
+static void default_client_connection(ipc_callid_t callid, ipc_call_t *call,
+    void *arg)
 {
 	ipc_answer_0(callid, ENOENT);
@@ -224,6 +228,7 @@
  * This function is defined as a weak symbol - to be redefined in user code.
  *
- * @param callid Hash of the incoming call.
- * @param call   Data of the incoming call.
+ * @param callid	Hash of the incoming call.
+ * @param call  	Data of the incoming call.
+ * @param arg		Local argument.
  *
  */
@@ -233,5 +238,5 @@
 
 static async_client_conn_t client_connection = default_client_connection;
-static async_client_conn_t interrupt_received = default_interrupt_received;
+static async_interrupt_handler_t interrupt_received = default_interrupt_received;
 
 /** Setter for client_connection function pointer.
@@ -250,5 +255,5 @@
  *             notification fibril.
  */
-void async_set_interrupt_received(async_client_conn_t intr)
+void async_set_interrupt_received(async_interrupt_handler_t intr)
 {
 	interrupt_received = intr;
@@ -633,5 +638,5 @@
 	 */
 	fibril_connection->cfibril(fibril_connection->callid,
-	    &fibril_connection->call);
+	    &fibril_connection->call, fibril_connection->carg);
 	
 	/*
@@ -704,4 +709,5 @@
  * @param cfibril       Fibril function that should be called upon opening the
  *                      connection.
+ * @param carg		Extra argument to pass to the connection fibril
  *
  * @return New fibril id or NULL on failure.
@@ -710,5 +716,5 @@
 fid_t async_new_connection(sysarg_t in_task_hash, sysarg_t in_phone_hash,
     ipc_callid_t callid, ipc_call_t *call,
-    async_client_conn_t cfibril)
+    async_client_conn_t cfibril, void *carg)
 {
 	connection_t *conn = malloc(sizeof(*conn));
@@ -725,4 +731,5 @@
 	conn->callid = callid;
 	conn->close_callid = 0;
+	conn->carg = carg;
 	
 	if (call)
@@ -779,5 +786,5 @@
 		/* Open new connection with fibril, etc. */
 		async_new_connection(call->in_task_hash, IPC_GET_ARG5(*call),
-		    callid, call, client_connection);
+		    callid, call, client_connection, NULL);
 		return;
 	}
@@ -1414,5 +1421,5 @@
  */
 int async_connect_to_me(async_exch_t *exch, sysarg_t arg1, sysarg_t arg2,
-    sysarg_t arg3, async_client_conn_t client_receiver)
+    sysarg_t arg3, async_client_conn_t client_receiver, void *carg)
 {
 	if (exch == NULL)
@@ -1428,5 +1435,5 @@
 	if (client_receiver != NULL)
 		async_new_connection(task_hash, phone_hash, 0, NULL,
-		    client_receiver);
+		    client_receiver, carg);
 	
 	return EOK;
Index: uspace/lib/c/generic/async_obsolete.c
===================================================================
--- uspace/lib/c/generic/async_obsolete.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/async_obsolete.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -240,5 +240,5 @@
  */
 int async_obsolete_connect_to_me(int phone, sysarg_t arg1, sysarg_t arg2,
-    sysarg_t arg3, async_client_conn_t client_receiver)
+    sysarg_t arg3, async_client_conn_t client_receiver, void *carg)
 {
 	sysarg_t task_hash;
@@ -251,5 +251,5 @@
 	if (client_receiver != NULL)
 		async_new_connection(task_hash, phone_hash, 0, NULL,
-		    client_receiver);
+		    client_receiver, carg);
 	
 	return EOK;
Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/devman.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -194,5 +194,5 @@
 	
 	exch = devman_exchange_begin(DEVMAN_DRIVER);
-	async_connect_to_me(exch, 0, 0, 0, NULL);
+	async_connect_to_me(exch, 0, 0, 0, NULL, NULL);
 	devman_exchange_end(exch);
 	
Index: uspace/lib/c/generic/devmap.c
===================================================================
--- uspace/lib/c/generic/devmap.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/devmap.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -187,5 +187,5 @@
 	
 	exch = devmap_exchange_begin(DEVMAP_DRIVER);
-	async_connect_to_me(exch, 0, 0, 0, NULL);
+	async_connect_to_me(exch, 0, 0, 0, NULL, NULL);
 	devmap_exchange_end(exch);
 	
Index: uspace/lib/c/generic/net/modules.c
===================================================================
--- uspace/lib/c/generic/net/modules.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/net/modules.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -141,5 +141,6 @@
 	if (phone >= 0) {
 		/* Request the bidirectional connection */
-		int rc = async_obsolete_connect_to_me(phone, arg1, arg2, arg3, client_receiver);
+		int rc = async_obsolete_connect_to_me(phone, arg1, arg2, arg3,
+		    client_receiver, NULL);
 		if (rc != EOK) {
 			async_obsolete_hangup(phone);
Index: uspace/lib/c/generic/net/socket_client.c
===================================================================
--- uspace/lib/c/generic/net/socket_client.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/net/socket_client.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -203,6 +203,7 @@
  * @param[in] iid	The initial message identifier.
  * @param[in] icall	The initial message call structure.
- */
-static void socket_connection(ipc_callid_t iid, ipc_call_t * icall)
+ * @param[in] arg	Local argument.
+ */
+static void socket_connection(ipc_callid_t iid, ipc_call_t * icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/lib/c/generic/ns.c
===================================================================
--- uspace/lib/c/generic/ns.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/generic/ns.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -42,5 +42,5 @@
 {
 	async_exch_t *exch = async_exchange_begin(session_ns);
-	int rc = async_connect_to_me(exch, service, 0, 0, NULL);
+	int rc = async_connect_to_me(exch, service, 0, 0, NULL, NULL);
 	async_exchange_end(exch);
 	
Index: uspace/lib/c/include/async.h
===================================================================
--- uspace/lib/c/include/async.h	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/include/async.h	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -53,5 +53,16 @@
 typedef void (*async_client_data_dtor_t)(void *);
 
-typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *);
+/** Client connection handler
+ *
+ * @param callid	ID of incoming call or 0 if connection initiated from
+ *			inside using async_connect_to_me()
+ * @param call		Incoming call or 0 if connection initiated from inside
+ * @param arg		Local argument passed from async_new_connection() or
+ *			async_connect_to_me()
+ */
+typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *, void *);
+
+/** Interrupt handler */
+typedef void (*async_interrupt_handler_t)(ipc_callid_t, ipc_call_t *);
 
 /** Exchange management style
@@ -166,5 +177,5 @@
 
 extern fid_t async_new_connection(sysarg_t, sysarg_t, ipc_callid_t,
-    ipc_call_t *, async_client_conn_t);
+    ipc_call_t *, async_client_conn_t, void *);
 
 extern void async_usleep(suseconds_t);
@@ -177,5 +188,5 @@
 
 extern void async_set_client_connection(async_client_conn_t);
-extern void async_set_interrupt_received(async_client_conn_t);
+extern void async_set_interrupt_received(async_interrupt_handler_t);
 
 /*
@@ -351,5 +362,5 @@
 
 extern int async_connect_to_me(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
-    async_client_conn_t);
+    async_client_conn_t, void *);
 
 extern int async_hangup(async_sess_t *);
Index: uspace/lib/c/include/async_obsolete.h
===================================================================
--- uspace/lib/c/include/async_obsolete.h	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/c/include/async_obsolete.h	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -198,5 +198,5 @@
 
 extern int async_obsolete_connect_to_me(int, sysarg_t, sysarg_t, sysarg_t,
-    async_client_conn_t);
+    async_client_conn_t, void *);
 extern int async_obsolete_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t);
 extern int async_obsolete_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t);
Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/drv/generic/driver.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -427,5 +427,5 @@
 
 /** Function for handling connections to device driver. */
-static void driver_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void driver_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Select interface */
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/fs/libfs.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -106,5 +106,5 @@
 	 * Ask VFS for callback connection.
 	 */
-	async_connect_to_me(exch, 0, 0, 0, conn);
+	async_connect_to_me(exch, 0, 0, 0, conn, NULL);
 	
 	/*
Index: uspace/lib/net/il/il_skel.c
===================================================================
--- uspace/lib/net/il/il_skel.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/net/il/il_skel.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -51,5 +51,6 @@
  *
  */
-static void il_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void il_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/*
@@ -117,5 +118,5 @@
 		goto out;
 	
-	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL);
+	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/lib/net/netif/netif_skel.c
===================================================================
--- uspace/lib/net/netif/netif_skel.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/net/netif/netif_skel.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -365,5 +365,6 @@
  *
  */
-static void netif_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void netif_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/*
Index: uspace/lib/net/nil/nil_skel.c
===================================================================
--- uspace/lib/net/nil/nil_skel.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/net/nil/nil_skel.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -51,5 +51,6 @@
  *
  */
-static void nil_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void nil_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/*
@@ -117,5 +118,5 @@
 		goto out;
 	
-	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL);
+	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/lib/net/tl/tl_skel.c
===================================================================
--- uspace/lib/net/tl/tl_skel.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/net/tl/tl_skel.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -47,9 +47,11 @@
 /** Default thread for new connections.
  *
- * @param[in] iid   The initial message identifier.
- * @param[in] icall The initial message call structure.
+ * @param[in] iid  	The initial message identifier.
+ * @param[in] icall	The initial message call structure.
+ * @param[in] arg	Local argument.
  *
  */
-static void tl_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void tl_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/*
@@ -119,5 +121,5 @@
 		goto out;
 	
-	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL);
+	rc = async_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/lib/usbvirt/src/device.c
===================================================================
--- uspace/lib/usbvirt/src/device.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/lib/usbvirt/src/device.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -49,8 +49,9 @@
 /** Main IPC call handling from virtual host controller.
  *
- * @param iid Caller identification.
- * @param icall Initial incoming call.
+ * @param iid		Caller identification
+ * @param icall		Initial incoming call
+ * @param arg		Local argument
  */
-static void callback_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void callback_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	assert(DEV != NULL);
@@ -99,5 +100,5 @@
 	
 	async_exch_t *exch = async_exchange_begin(hcd_sess);
-	rc = async_connect_to_me(exch, 0, 0, 0, callback_connection);
+	rc = async_connect_to_me(exch, 0, 0, 0, callback_connection, NULL);
 	async_exchange_end(exch);
 	
Index: uspace/srv/bd/ata_bd/ata_bd.c
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/ata_bd/ata_bd.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -105,5 +105,5 @@
 static void print_syntax(void);
 static int ata_bd_init(void);
-static void ata_bd_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void ata_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *);
 static int ata_bd_read_blocks(int disk_id, uint64_t ba, size_t cnt,
     void *buf);
@@ -274,5 +274,5 @@
 
 /** Block device connection handler */
-static void ata_bd_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void ata_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	void *fs_va = NULL;
Index: uspace/srv/bd/file_bd/file_bd.c
===================================================================
--- uspace/srv/bd/file_bd/file_bd.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/file_bd/file_bd.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -66,5 +66,5 @@
 static void print_usage(void);
 static int file_bd_init(const char *fname);
-static void file_bd_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void file_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *);
 static int file_bd_read_blocks(uint64_t ba, size_t cnt, void *buf);
 static int file_bd_write_blocks(uint64_t ba, size_t cnt, const void *buf);
@@ -170,5 +170,5 @@
 }
 
-static void file_bd_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void file_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	void *fs_va = NULL;
Index: uspace/srv/bd/gxe_bd/gxe_bd.c
===================================================================
--- uspace/srv/bd/gxe_bd/gxe_bd.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/gxe_bd/gxe_bd.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -97,5 +97,5 @@
 
 static int gxe_bd_init(void);
-static void gxe_bd_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void gxe_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *);
 static int gxe_bd_read_blocks(int disk_id, uint64_t ba, unsigned cnt,
     void *buf);
@@ -153,5 +153,5 @@
 }
 
-static void gxe_bd_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void gxe_bd_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	void *fs_va = NULL;
Index: uspace/srv/bd/part/guid_part/guid_part.c
===================================================================
--- uspace/srv/bd/part/guid_part/guid_part.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/part/guid_part/guid_part.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -99,5 +99,5 @@
 static part_t *gpt_part_new(void);
 static void gpt_pte_to_part(const gpt_entry_t *pte, part_t *part);
-static void gpt_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void gpt_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static int gpt_bd_read(part_t *p, aoff64_t ba, size_t cnt, void *buf);
 static int gpt_bd_write(part_t *p, aoff64_t ba, size_t cnt, const void *buf);
@@ -307,5 +307,5 @@
 }
 
-static void gpt_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void gpt_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	size_t comm_size;
Index: uspace/srv/bd/part/mbr_part/mbr_part.c
===================================================================
--- uspace/srv/bd/part/mbr_part/mbr_part.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/part/mbr_part/mbr_part.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -150,5 +150,5 @@
 static part_t *mbr_part_new(void);
 static void mbr_pte_to_part(uint32_t base, const pt_entry_t *pte, part_t *part);
-static void mbr_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void mbr_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static int mbr_bd_read(part_t *p, uint64_t ba, size_t cnt, void *buf);
 static int mbr_bd_write(part_t *p, uint64_t ba, size_t cnt, const void *buf);
@@ -385,5 +385,5 @@
 }
 
-static void mbr_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void mbr_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	size_t comm_size;
Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/bd/rd/rd.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -84,5 +84,5 @@
  * @param icall Call data of the request that opened the connection.
  */
-static void rd_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void rd_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/clip/clip.c
===================================================================
--- uspace/srv/clip/clip.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/clip/clip.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -148,5 +148,5 @@
 }
 
-static void clip_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void clip_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/devman/main.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -694,5 +694,5 @@
 
 /** Function for handling connections to device manager. */
-static void devman_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void devman_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Select interface. */
Index: uspace/srv/devmap/devmap.c
===================================================================
--- uspace/srv/devmap/devmap.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/devmap/devmap.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -1124,5 +1124,5 @@
  *
  */
-static void devmap_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void devmap_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Select interface */
Index: uspace/srv/fs/devfs/devfs.c
===================================================================
--- uspace/srv/fs/devfs/devfs.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/fs/devfs/devfs.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -59,5 +59,5 @@
 fs_reg_t devfs_reg;
 
-static void devfs_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void devfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	if (iid)
Index: uspace/srv/fs/ext2fs/ext2fs.c
===================================================================
--- uspace/srv/fs/ext2fs/ext2fs.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/fs/ext2fs/ext2fs.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -75,5 +75,5 @@
  * request has been completed.
  */
-static void ext2fs_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void ext2fs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	if (iid) {
Index: uspace/srv/fs/fat/fat.c
===================================================================
--- uspace/srv/fs/fat/fat.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/fs/fat/fat.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -76,5 +76,5 @@
  * request has been completed.
  */
-static void fat_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void fat_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	if (iid) {
Index: uspace/srv/fs/tmpfs/tmpfs.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/fs/tmpfs/tmpfs.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -82,5 +82,5 @@
  * request has been completed.
  */
-static void tmpfs_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void tmpfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	if (iid) {
Index: uspace/srv/hid/adb_mouse/adb_dev.c
===================================================================
--- uspace/srv/hid/adb_mouse/adb_dev.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/adb_mouse/adb_dev.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -48,5 +48,5 @@
 #include "adb_dev.h"
 
-static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall);
+static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 
 int adb_dev_init(void)
@@ -68,5 +68,6 @@
 	
 	/* NB: The callback connection is slotted for removal */
-	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, adb_dev_events) != 0) {
+	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, adb_dev_events,
+	    NULL) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return false;
@@ -76,5 +77,5 @@
 }
 
-static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall)
+static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
Index: uspace/srv/hid/adb_mouse/adb_mouse.c
===================================================================
--- uspace/srv/hid/adb_mouse/adb_mouse.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/adb_mouse/adb_mouse.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -52,5 +52,5 @@
 #include <kernel/ipc/ipc_methods.h>
 
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static void mouse_ev_btn(int button, int press);
 static void mouse_ev_move(int dx, int dy);
@@ -94,5 +94,5 @@
 }
 
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hid/char_mouse/char_mouse.c
===================================================================
--- uspace/srv/hid/char_mouse/char_mouse.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/char_mouse/char_mouse.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -79,5 +79,5 @@
 }
 
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hid/char_mouse/chardev.c
===================================================================
--- uspace/srv/hid/char_mouse/chardev.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/char_mouse/chardev.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -45,5 +45,5 @@
 #include <mouse_port.h>
 
-static void chardev_events(ipc_callid_t iid, ipc_call_t *icall);
+static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 
 static int dev_phone;
@@ -69,5 +69,6 @@
 	
 	/* NB: The callback connection is slotted for removal */
-	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, chardev_events) != 0) {
+	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, chardev_events,
+	    NULL) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return false;
@@ -90,5 +91,5 @@
 }
 
-static void chardev_events(ipc_callid_t iid, ipc_call_t *icall)
+static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/console/console.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -427,5 +427,5 @@
 
 /** Handler for keyboard */
-static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall)
+static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
@@ -474,5 +474,5 @@
 
 /** Handler for mouse events */
-static void mouse_events(ipc_callid_t iid, ipc_call_t *icall)
+static void mouse_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
@@ -597,5 +597,5 @@
 
 /** Default thread for new connections */
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	console_t *cons = NULL;
@@ -759,5 +759,5 @@
 	if (client_receiver != NULL)
 		async_new_connection(task_hash, phone_hash, phone_hash, NULL,
-		    client_receiver);
+		    client_receiver, NULL);
 	
 	if (hash != NULL)
Index: uspace/srv/hid/fb/ega.c
===================================================================
--- uspace/srv/hid/fb/ega.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/fb/ega.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -256,5 +256,6 @@
 }
 
-static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	size_t intersize = 0;
Index: uspace/srv/hid/fb/fb.c
===================================================================
--- uspace/srv/hid/fb/fb.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/fb/fb.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -1576,5 +1576,6 @@
  *
  */
-static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	unsigned int vp = 0;
Index: uspace/srv/hid/fb/serial_console.c
===================================================================
--- uspace/srv/hid/fb/serial_console.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/fb/serial_console.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -315,5 +315,5 @@
  * Main function of the thread serving client connections.
  */
-void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	keyfield_t *interbuf = NULL;
Index: uspace/srv/hid/fb/serial_console.h
===================================================================
--- uspace/srv/hid/fb/serial_console.h	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/fb/serial_console.h	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -52,5 +52,5 @@
 extern void serial_set_scroll_region(sysarg_t);
 extern void serial_console_init(putc_function_t, sysarg_t, sysarg_t);
-extern void serial_client_connection(ipc_callid_t, ipc_call_t *);
+extern void serial_client_connection(ipc_callid_t, ipc_call_t *, void *arg);
 
 #endif
Index: uspace/srv/hid/input/ctl/kbdev.c
===================================================================
--- uspace/srv/hid/input/ctl/kbdev.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/input/ctl/kbdev.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -54,5 +54,5 @@
 static void kbdev_ctl_set_ind(kbd_dev_t *, unsigned);
 
-static void kbdev_callback_conn(ipc_callid_t, ipc_call_t *);
+static void kbdev_callback_conn(ipc_callid_t, ipc_call_t *, void *arg);
 
 kbd_ctl_ops_t kbdev_ctl = {
@@ -73,7 +73,4 @@
 	int fd;
 } kbdev_t;
-
-/** XXX Need to pass data from async_connect_to_me() to connection handler */
-static kbdev_t *unprotected_kbdev;
 
 static kbdev_t *kbdev_new(kbd_dev_t *kdev)
@@ -140,12 +137,5 @@
 	}
 
-	/*
-	 * XXX We need to pass kbdev to the connection handler. Since the
-	 * framework does not support this, use a global variable.
-	 * This needs to be fixed ASAP.
-	 */
-	unprotected_kbdev = kbdev;
-
-	rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn);
+	rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev);
 	if (rc != EOK) {
 		printf(NAME ": Failed creating callback connection from '%s'.\n",
@@ -177,5 +167,5 @@
 }
 
-static void kbdev_callback_conn(ipc_callid_t iid, ipc_call_t *icall)
+static void kbdev_callback_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	kbdev_t *kbdev;
@@ -183,5 +173,6 @@
 	int type, key;
 
-	kbdev = unprotected_kbdev;
+	/* Kbdev device structure */
+	kbdev = arg;
 
 	while (true) {
Index: uspace/srv/hid/input/generic/input.c
===================================================================
--- uspace/srv/hid/input/generic/input.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/input/generic/input.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -178,5 +178,5 @@
 }
 
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hid/input/port/adb.c
===================================================================
--- uspace/srv/hid/input/port/adb.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/input/port/adb.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -46,5 +46,5 @@
 #include <devmap_obsolete.h>
 
-static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall);
+static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static void adb_kbd_reg0_data(uint16_t data);
 
@@ -82,5 +82,6 @@
 	
 	/* NB: The callback connection is slotted for removal */
-	rc = async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events);
+	rc = async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events,
+	    NULL);
 	if (rc != EOK) {
 		printf(NAME ": Failed to create callback from device\n");
@@ -104,5 +105,5 @@
 }
 
-static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall)
+static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
Index: uspace/srv/hid/input/port/chardev.c
===================================================================
--- uspace/srv/hid/input/port/chardev.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/input/port/chardev.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -45,5 +45,5 @@
 #include <stdio.h>
 
-static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall);
+static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 
 static int chardev_port_init(kbd_dev_t *);
@@ -96,5 +96,6 @@
 	
 	/* NB: The callback connection is slotted for removal */
-	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events) != 0) {
+	if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events,
+	    NULL) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return -1;
@@ -117,5 +118,5 @@
 }
 
-static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall)
+static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Ignore parameters, the connection is already opened */
Index: uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
===================================================================
--- uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -73,5 +73,6 @@
 static s3c24xx_ts_t *ts;
 
-static void s3c24xx_ts_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void s3c24xx_ts_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg);
 static void s3c24xx_ts_irq_handler(ipc_callid_t iid, ipc_call_t *call);
 static void s3c24xx_ts_pen_down(s3c24xx_ts_t *ts);
@@ -373,5 +374,6 @@
 
 /** Handle mouse client connection. */
-static void s3c24xx_ts_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void s3c24xx_ts_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/bus/cuda_adb/cuda_adb.c
===================================================================
--- uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -57,5 +57,5 @@
 #define NAME "cuda_adb"
 
-static void cuda_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void cuda_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static int cuda_init(void);
 static void cuda_irq_handler(ipc_callid_t iid, ipc_call_t *call);
@@ -193,5 +193,5 @@
 
 /** Character device connection handler */
-static void cuda_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void cuda_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/char/i8042/i8042.c
===================================================================
--- uspace/srv/hw/char/i8042/i8042.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/char/i8042/i8042.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -122,5 +122,5 @@
 
 static void i8042_irq_handler(ipc_callid_t iid, ipc_call_t *call);
-static void i8042_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void i8042_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg);
 static int i8042_init(void);
 static void i8042_port_write(int devid, uint8_t data);
@@ -216,5 +216,5 @@
 
 /** Character device connection handler */
-static void i8042_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void i8042_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -71,5 +71,6 @@
 static s3c24xx_uart_t *uart;
 
-static void s3c24xx_uart_connection(ipc_callid_t iid, ipc_call_t *icall);
+static void s3c24xx_uart_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg);
 static void s3c24xx_uart_irq_handler(ipc_callid_t iid, ipc_call_t *call);
 static int s3c24xx_uart_init(s3c24xx_uart_t *uart);
@@ -113,5 +114,6 @@
 
 /** Character device connection handler. */
-static void s3c24xx_uart_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void s3c24xx_uart_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/irc/apic/apic.c
===================================================================
--- uspace/srv/hw/irc/apic/apic.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/irc/apic/apic.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -64,7 +64,7 @@
  * @param iid   Hash of the request that opened the connection.
  * @param icall Call data of the request that opened the connection.
- *
+ * @param arg	Local argument.
  */
-static void apic_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void apic_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/irc/fhc/fhc.c
===================================================================
--- uspace/srv/hw/irc/fhc/fhc.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/irc/fhc/fhc.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -66,6 +66,7 @@
  * @param iid		Hash of the request that opened the connection.
  * @param icall		Call data of the request that opened the connection.
+ * @param arg		Local argument.
  */
-static void fhc_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void fhc_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/irc/i8259/i8259.c
===================================================================
--- uspace/srv/hw/irc/i8259/i8259.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/irc/i8259/i8259.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -98,7 +98,7 @@
  * @param iid   Hash of the request that opened the connection.
  * @param icall Call data of the request that opened the connection.
- *
+ * @param arg	Local argument.
  */
-static void i8259_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void i8259_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/hw/irc/obio/obio.c
===================================================================
--- uspace/srv/hw/irc/obio/obio.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/hw/irc/obio/obio.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -76,6 +76,7 @@
  * @param iid		Hash of the request that opened the connection.
  * @param icall		Call data of the request that opened the connection.
+ * @param arg		Local argument.
  */
-static void obio_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void obio_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	ipc_callid_t callid;
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/loader/main.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -410,5 +410,5 @@
  * to execute the loaded program).
  */
-static void ldr_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void ldr_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	/* Already have a connection? */
Index: uspace/srv/net/il/arp/arp.c
===================================================================
--- uspace/srv/net/il/arp/arp.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/il/arp/arp.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -416,7 +416,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
- */
-static void arp_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in]	  arg	Local argument.
+ */
+static void arp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/il/ip/ip.c
===================================================================
--- uspace/srv/net/il/ip/ip.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/il/ip/ip.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -123,5 +123,5 @@
 GENERIC_FIELD_IMPLEMENT(ip_routes, ip_route_t);
 
-static void ip_receiver(ipc_callid_t, ipc_call_t *);
+static void ip_receiver(ipc_callid_t, ipc_call_t *, void *);
 
 /** Releases the packet and returns the result.
@@ -1594,7 +1594,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
- */
-static void ip_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in]     arg   Local argument.
+ */
+static void ip_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/net/net.c
===================================================================
--- uspace/srv/net/net/net.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/net/net.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -680,9 +680,10 @@
 /** Default thread for new connections.
  *
- * @param[in] iid The initial message identifier.
+ * @param[in] iid   The initial message identifier.
  * @param[in] icall The initial message call structure.
- *
- */
-static void net_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in] arg   Local argument.
+ */
+static void net_client_connection(ipc_callid_t iid, ipc_call_t *icall,
+    void *arg)
 {
 	/*
Index: uspace/srv/net/nil/eth/eth.c
===================================================================
--- uspace/srv/net/nil/eth/eth.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/nil/eth/eth.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -231,6 +231,7 @@
  * @param[in] iid	The message identifier.
  * @param[in,out] icall	The message parameters.
- */
-static void eth_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in] arg	Local argument.
+ */
+static void eth_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/nil/nildummy/nildummy.c
===================================================================
--- uspace/srv/net/nil/nildummy/nildummy.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/nil/nildummy/nildummy.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -102,7 +102,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
- */
-static void nildummy_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in]     arg   Local argument.
+ */
+static void nildummy_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/tl/icmp/icmp.c
===================================================================
--- uspace/srv/net/tl/icmp/icmp.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/tl/icmp/icmp.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -608,7 +608,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
- */
-static void icmp_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in]     arg   Local argument.
+ */
+static void icmp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/tl/tcp/tcp.c
===================================================================
--- uspace/srv/net/tl/tcp/tcp.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/tl/tcp/tcp.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -2442,7 +2442,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
+ * @param[in]     arg   Local argument.
  */
-static void tcp_receiver(ipc_callid_t iid, ipc_call_t *icall)
+static void tcp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/net/tl/udp/udp.c
===================================================================
--- uspace/srv/net/tl/udp/udp.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/net/tl/udp/udp.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -341,7 +341,7 @@
  * @param[in]     iid   Message identifier.
  * @param[in,out] icall Message parameters.
- *
- */
-static void udp_receiver(ipc_callid_t iid, ipc_call_t *icall)
+ * @param[in]     arg   Local argument.
+ */
+static void udp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	packet_t *packet;
Index: uspace/srv/vfs/vfs.c
===================================================================
--- uspace/srv/vfs/vfs.c	(revision 43ac0cc8db6bc450575f52825b86408b5d028e4f)
+++ uspace/srv/vfs/vfs.c	(revision 9934f7d3082d2ffdd107cc0c78d61d504b0f401e)
@@ -49,5 +49,5 @@
 #define NAME  "vfs"
 
-static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	bool cont = true;
