Index: uspace/srv/bd/ata_bd/ata_bd.c
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.c	(revision 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ 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;
