Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ kernel/generic/include/ipc/ipc.h	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -165,5 +165,7 @@
  *                       error is sent back to caller. Otherwise 
  *                       the call is accepted and the response is sent back.
- *                     - the allocated phoneid is passed to userspace 
+ *                     - the hash of the client task is passed to userspace
+ *                       (on the receiving side) as ARG4 of the call.
+ *                     - the hash of the allocated phone is passed to userspace
  *                       (on the receiving side) as ARG5 of the call.
  *
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ kernel/generic/src/ipc/sysipc.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -248,4 +248,6 @@
 			/* The connection was accepted */
 			phone_connect(phoneid, &answer->sender->answerbox);
+			/* Set 'task hash' as arg4 of response */
+			IPC_SET_ARG4(answer->data, (sysarg_t) TASK);
 			/* Set 'phone hash' as arg5 of response */
 			IPC_SET_ARG5(answer->data,
Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/c/generic/devman.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -116,6 +116,5 @@
 	async_set_client_connection(conn);
 	
-	sysarg_t callback_phonehash;
-	ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);
+	ipc_connect_to_me(phone, 0, 0, 0, NULL, NULL);
 	async_wait_for(req, &retval);
 	
Index: uspace/lib/c/generic/devmap.c
===================================================================
--- uspace/lib/c/generic/devmap.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/c/generic/devmap.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -116,6 +116,5 @@
 	async_set_client_connection(conn);
 	
-	sysarg_t callback_phonehash;
-	ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);
+	ipc_connect_to_me(phone, 0, 0, 0, NULL, NULL);
 	async_wait_for(req, &retval);
 	
Index: uspace/lib/c/generic/ipc.c
===================================================================
--- uspace/lib/c/generic/ipc.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/c/generic/ipc.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -578,5 +578,7 @@
  * @param arg2		Service-defined argument.
  * @param arg3		Service-defined argument.
- * @param phonehash	Storage where the library will store an opaque
+ * @param taskhash	Storage where the kernel will store an opaque
+ *			identifier of the client task.
+ * @param phonehash	Storage where the kernel will store an opaque
  *			identifier of the phone that will be used for incoming
  *			calls. This identifier can be used for connection
@@ -586,8 +588,8 @@
  */
 int ipc_connect_to_me(int phoneid, int arg1, int arg2, int arg3, 
-    sysarg_t *phonehash)
+    sysarg_t *taskhash, sysarg_t *phonehash)
 {
 	return ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_TO_ME, arg1, arg2,
-	    arg3, NULL, NULL, NULL, NULL, phonehash);
+	    arg3, NULL, NULL, NULL, taskhash, phonehash);
 }
 
Index: uspace/lib/c/generic/net/modules.c
===================================================================
--- uspace/lib/c/generic/net/modules.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/c/generic/net/modules.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -145,5 +145,6 @@
 		sysarg_t phonehash;
 		
-		rc = ipc_connect_to_me(phone, arg1, arg2, arg3, &phonehash);
+		rc = ipc_connect_to_me(phone, arg1, arg2, arg3, NULL,
+		    &phonehash);
 		if (rc != EOK) {
 			ipc_hangup(phone);
Index: uspace/lib/c/include/ipc/ipc.h
===================================================================
--- uspace/lib/c/include/ipc/ipc.h	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/c/include/ipc/ipc.h	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -259,5 +259,5 @@
     sysarg_t, sysarg_t, void *, ipc_async_callback_t, int);
 
-extern int ipc_connect_to_me(int, int, int, int, sysarg_t *);
+extern int ipc_connect_to_me(int, int, int, int, sysarg_t *, sysarg_t *);
 extern int ipc_connect_me_to(int, int, int, int);
 extern int ipc_connect_me_to_blocking(int, int, int, int);
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/fs/libfs.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -102,5 +102,5 @@
 	 * Ask VFS for callback connection.
 	 */
-	ipc_connect_to_me(vfs_phone, 0, 0, 0, &reg->vfs_phonehash);
+	ipc_connect_to_me(vfs_phone, 0, 0, 0, NULL, &reg->vfs_phonehash);
 	
 	/*
Index: uspace/lib/net/il/il_skel.c
===================================================================
--- uspace/lib/net/il/il_skel.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/net/il/il_skel.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -115,6 +115,5 @@
 		goto out;
 	
-	sysarg_t phonehash;
-	rc = ipc_connect_to_me(PHONE_NS, service, 0, 0, &phonehash);
+	rc = ipc_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/lib/net/nil/nil_skel.c
===================================================================
--- uspace/lib/net/nil/nil_skel.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/net/nil/nil_skel.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -115,6 +115,5 @@
 		goto out;
 	
-	sysarg_t phonehash;
-	rc = ipc_connect_to_me(PHONE_NS, service, 0, 0, &phonehash);
+	rc = ipc_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 fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/lib/net/tl/tl_skel.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -117,6 +117,5 @@
 		goto out;
 	
-	sysarg_t phonehash;
-	rc = ipc_connect_to_me(PHONE_NS, service, 0, 0, &phonehash);
+	rc = ipc_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/srv/clip/clip.c
===================================================================
--- uspace/srv/clip/clip.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/clip/clip.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -183,6 +183,5 @@
 	async_set_client_connection(clip_connection);
 	
-	sysarg_t phonead;
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_CLIPBOARD, 0, 0, &phonead) != 0) 
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_CLIPBOARD, 0, 0, NULL, NULL)) 
 		return -1;
 	
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/devman/main.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -586,6 +586,5 @@
 
 	/* Register device manager at naming service. */
-	sysarg_t phonead;
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_DEVMAN, 0, 0, &phonead) != 0)
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_DEVMAN, 0, 0, NULL, NULL) != 0)
 		return -1;
 
Index: uspace/srv/devmap/devmap.c
===================================================================
--- uspace/srv/devmap/devmap.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/devmap/devmap.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -1150,6 +1150,5 @@
 	
 	/* Register device mapper at naming service */
-	sysarg_t phonead;
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_DEVMAP, 0, 0, &phonead) != 0) 
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_DEVMAP, 0, 0, NULL, NULL) != 0)
 		return -1;
 	
Index: uspace/srv/hid/adb_mouse/adb_dev.c
===================================================================
--- uspace/srv/hid/adb_mouse/adb_dev.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/adb_mouse/adb_dev.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -69,5 +69,5 @@
 	/* NB: The callback connection is slotted for removal */
 	sysarg_t phonehash;
-	if (ipc_connect_to_me(dev_phone, 0, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(dev_phone, 0, 0, 0, NULL, &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return false;
Index: uspace/srv/hid/char_mouse/chardev.c
===================================================================
--- uspace/srv/hid/char_mouse/chardev.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/char_mouse/chardev.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -71,5 +71,5 @@
 	/* NB: The callback connection is slotted for removal */
 	sysarg_t phonehash;
-	if (ipc_connect_to_me(dev_phone, 0, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(dev_phone, 0, 0, 0, NULL, &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return false;
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/console/console.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -727,5 +727,6 @@
 	/* NB: The callback connection is slotted for removal */
 	sysarg_t phonehash;
-	if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, NULL,
+	    &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from input device\n");
 		return false;
@@ -749,5 +750,6 @@
 	}
 	
-	if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, NULL,
+	    &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from mouse device\n");
 		mouse_phone = -1;
Index: uspace/srv/hid/fb/main.c
===================================================================
--- uspace/srv/hid/fb/main.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/fb/main.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -114,6 +114,5 @@
 		return -1;
 	
-	sysarg_t phonead;
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, 0, &phonead) != 0) 
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, 0, NULL, NULL) != 0)
 		return -1;
 	
Index: uspace/srv/hid/kbd/port/adb.c
===================================================================
--- uspace/srv/hid/kbd/port/adb.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/kbd/port/adb.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -72,5 +72,5 @@
 	/* NB: The callback connection is slotted for removal */
 	sysarg_t phonehash;
-	if (ipc_connect_to_me(dev_phone, 0, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(dev_phone, 0, 0, 0, NULL, &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return false;
Index: uspace/srv/hid/kbd/port/chardev.c
===================================================================
--- uspace/srv/hid/kbd/port/chardev.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hid/kbd/port/chardev.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -92,5 +92,5 @@
 	/* NB: The callback connection is slotted for removal */
 	sysarg_t phonehash;
-	if (ipc_connect_to_me(dev_phone, 0, 0, 0, &phonehash) != 0) {
+	if (ipc_connect_to_me(dev_phone, 0, 0, 0, NULL, &phonehash) != 0) {
 		printf(NAME ": Failed to create callback from device\n");
 		return -1;
Index: uspace/srv/hw/irc/apic/apic.c
===================================================================
--- uspace/srv/hw/irc/apic/apic.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hw/irc/apic/apic.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -108,6 +108,5 @@
 	
 	async_set_client_connection(apic_connection);
-	sysarg_t phonead;
-	ipc_connect_to_me(PHONE_NS, SERVICE_APIC, 0, 0, &phonead);
+	ipc_connect_to_me(PHONE_NS, SERVICE_APIC, 0, 0, NULL, NULL);
 	
 	return true;
Index: uspace/srv/hw/irc/fhc/fhc.c
===================================================================
--- uspace/srv/hw/irc/fhc/fhc.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hw/irc/fhc/fhc.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -137,6 +137,5 @@
 	
 	async_set_client_connection(fhc_connection);
-	sysarg_t phonead;
-	ipc_connect_to_me(PHONE_NS, SERVICE_FHC, 0, 0, &phonead);
+	ipc_connect_to_me(PHONE_NS, SERVICE_FHC, 0, 0, NULL, NULL);
 	
 	return true;
Index: uspace/srv/hw/irc/i8259/i8259.c
===================================================================
--- uspace/srv/hw/irc/i8259/i8259.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hw/irc/i8259/i8259.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -150,6 +150,5 @@
 	
 	async_set_client_connection(i8259_connection);
-	sysarg_t phonead;
-	ipc_connect_to_me(PHONE_NS, SERVICE_I8259, 0, 0, &phonead);
+	ipc_connect_to_me(PHONE_NS, SERVICE_I8259, 0, 0, NULL, NULL);
 	
 	return true;
Index: uspace/srv/hw/irc/obio/obio.c
===================================================================
--- uspace/srv/hw/irc/obio/obio.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hw/irc/obio/obio.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -138,6 +138,5 @@
 	
 	async_set_client_connection(obio_connection);
-	sysarg_t phonead;
-	ipc_connect_to_me(PHONE_NS, SERVICE_OBIO, 0, 0, &phonead);
+	ipc_connect_to_me(PHONE_NS, SERVICE_OBIO, 0, 0, NULL, NULL);
 	
 	return true;
Index: uspace/srv/hw/netif/ne2000/ne2000.c
===================================================================
--- uspace/srv/hw/netif/ne2000/ne2000.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/hw/netif/ne2000/ne2000.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -397,6 +397,5 @@
 	async_set_interrupt_received(irq_handler);
 	
-	sysarg_t phonehash;
-	return ipc_connect_to_me(PHONE_NS, SERVICE_NE2000, 0, 0, &phonehash);
+	return ipc_connect_to_me(PHONE_NS, SERVICE_NE2000, 0, 0, NULL, NULL);
 }
 
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/loader/main.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -423,5 +423,4 @@
 int main(int argc, char *argv[])
 {
-	sysarg_t phonead;
 	task_id_t id;
 	int rc;
@@ -439,5 +438,5 @@
 	
 	/* Register at naming service. */
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_LOAD, 0, 0, &phonead) != 0) 
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_LOAD, 0, 0, NULL, NULL) != 0)
 		return -2;
 
Index: uspace/srv/net/net/net.c
===================================================================
--- uspace/srv/net/net/net.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/net/net/net.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -326,5 +326,4 @@
 static int net_module_start(async_client_conn_t client_connection)
 {
-	sysarg_t phonehash;
 	int rc;
 	
@@ -338,5 +337,5 @@
 		goto out;
 	
-	rc = ipc_connect_to_me(PHONE_NS, SERVICE_NETWORKING, 0, 0, &phonehash);
+	rc = ipc_connect_to_me(PHONE_NS, SERVICE_NETWORKING, 0, 0, NULL, NULL);
 	if (rc != EOK)
 		goto out;
Index: uspace/srv/net/netif/lo/lo.c
===================================================================
--- uspace/srv/net/netif/lo/lo.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/net/netif/lo/lo.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -167,6 +167,5 @@
 int netif_initialize(void)
 {
-	sysarg_t phonehash;
-	return ipc_connect_to_me(PHONE_NS, SERVICE_LO, 0, 0, &phonehash);
+	return ipc_connect_to_me(PHONE_NS, SERVICE_LO, 0, 0, NULL, NULL);
 }
 
Index: uspace/srv/vfs/vfs.c
===================================================================
--- uspace/srv/vfs/vfs.c	(revision fdb9982c4a402d4d9c5df2cc4d6fe1fa66823fb9)
+++ uspace/srv/vfs/vfs.c	(revision 124c0612c8daeba21701095e42877933875fb33a)
@@ -173,6 +173,5 @@
 	 * Register at the naming service.
 	 */
-	sysarg_t phonead;
-	ipc_connect_to_me(PHONE_NS, SERVICE_VFS, 0, 0, &phonead);
+	ipc_connect_to_me(PHONE_NS, SERVICE_VFS, 0, 0, NULL, NULL);
 	
 	/*
