Index: uspace/app/wavplay/dplay.c
===================================================================
--- uspace/app/wavplay/dplay.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/app/wavplay/dplay.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -88,25 +88,25 @@
 }
 
-/**
- * Fragment playback callback function.
+/** Fragment playback callback function.
  *
- * @param icall_handle  Call capability handle.
- * @param icall         Pointer to the call structure
- * @param arg           Argument, pointer to the playback helper function
- */
-static void device_event_callback(cap_call_handle_t icall_handle,
-    ipc_call_t *icall, void *arg)
-{
-	async_answer_0(icall_handle, EOK);
+ * @param icall Pointer to the call structure
+ * @param arg   Argument, pointer to the playback helper function
+ *
+ */
+static void device_event_callback(ipc_call_t *icall, void *arg)
+{
+	async_answer_0(icall, EOK);
 	playback_t *pb = arg;
 	const size_t fragment_size = pb->buffer.size / DEFAULT_FRAGMENTS;
+
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
+
 		switch (IPC_GET_IMETHOD(call)) {
 		case PCM_EVENT_PLAYBACK_STARTED:
 		case PCM_EVENT_FRAMES_PLAYED:
 			printf("%" PRIun " frames: ", IPC_GET_ARG1(call));
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case PCM_EVENT_PLAYBACK_TERMINATED:
@@ -115,10 +115,10 @@
 			pb->playing = false;
 			fibril_condvar_signal(&pb->cv);
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			fibril_mutex_unlock(&pb->mutex);
 			return;
 		default:
 			printf("Unknown event %" PRIun ".\n", IPC_GET_IMETHOD(call));
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			continue;
 
Index: uspace/app/wavplay/drec.c
===================================================================
--- uspace/app/wavplay/drec.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/app/wavplay/drec.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -85,23 +85,23 @@
 }
 
-/**
- * Recording callback.
+/** Recording callback.
  *
  * Writes recorded data.
  *
- * @param icall_handle  IPC call handle.
- * @param icall         Poitner to IPC call structure.
- * @param arg           Argument. Poitner to recording helper structure.
- */
-static void device_event_callback(cap_call_handle_t icall_handle,
-    ipc_call_t *icall, void *arg)
-{
-	async_answer_0(icall_handle, EOK);
+ * @param icall Poitner to IPC call structure.
+ * @param arg   Argument. Poitner to recording helper structure.
+ *
+ */
+static void device_event_callback(ipc_call_t *icall, void *arg)
+{
+	async_answer_0(icall, EOK);
 	record_t *rec = arg;
 	const size_t buffer_part = rec->buffer.size / BUFFER_PARTS;
 	bool record = true;
+
 	while (record) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
+
 		switch (IPC_GET_IMETHOD(call)) {
 		case PCM_EVENT_CAPTURE_TERMINATED:
@@ -114,10 +114,10 @@
 		default:
 			printf("Unknown event %" PRIun ".\n", IPC_GET_IMETHOD(call));
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			continue;
 		}
 
 		if (!record) {
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -131,5 +131,5 @@
 		if (rec->buffer.position >= (rec->buffer.base + rec->buffer.size))
 			rec->buffer.position = rec->buffer.base;
-		async_answer_0(chandle, EOK);
+		async_answer_0(&call, EOK);
 	}
 }
Index: uspace/drv/block/ata_bd/main.c
===================================================================
--- uspace/drv/block/ata_bd/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/block/ata_bd/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -47,5 +47,5 @@
 static errno_t ata_fun_offline(ddf_fun_t *fun);
 
-static void ata_bd_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void ata_bd_connection(ipc_call_t *, void *);
 
 static driver_ops_t driver_ops = {
@@ -313,10 +313,10 @@
 
 /** Block device connection handler */
-static void ata_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void ata_bd_connection(ipc_call_t *icall, void *arg)
 {
 	ata_fun_t *afun;
 
 	afun = (ata_fun_t *) ddf_fun_data_get((ddf_fun_t *)arg);
-	bd_conn(icall_handle, icall, &afun->bds);
+	bd_conn(icall, &afun->bds);
 }
 
Index: uspace/drv/block/ddisk/ddisk.c
===================================================================
--- uspace/drv/block/ddisk/ddisk.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/block/ddisk/ddisk.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -62,5 +62,5 @@
 static errno_t ddisk_fun_offline(ddf_fun_t *);
 
-static void ddisk_bd_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void ddisk_bd_connection(ipc_call_t *, void *);
 
 static void ddisk_irq_handler(ipc_call_t *, ddf_dev_t *);
@@ -585,5 +585,5 @@
 
 /** Block device connection handler */
-static void ddisk_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void ddisk_bd_connection(ipc_call_t *icall, void *arg)
 {
 	ddisk_t *ddisk;
@@ -591,5 +591,5 @@
 
 	ddisk = (ddisk_t *) ddf_dev_data_get(ddf_fun_get_dev(fun));
-	bd_conn(icall_handle, icall, &ddisk->bds);
+	bd_conn(icall, &ddisk->bds);
 }
 
Index: uspace/drv/block/usbmast/main.c
===================================================================
--- uspace/drv/block/usbmast/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/block/usbmast/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -79,6 +79,5 @@
 
 static errno_t usbmast_fun_create(usbmast_dev_t *mdev, unsigned lun);
-static void usbmast_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg);
+static void usbmast_bd_connection(ipc_call_t *icall, void *arg);
 
 static errno_t usbmast_bd_open(bd_srvs_t *, bd_srv_t *);
@@ -317,11 +316,10 @@
 
 /** Blockdev client connection handler. */
-static void usbmast_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void usbmast_bd_connection(ipc_call_t *icall, void *arg)
 {
 	usbmast_fun_t *mfun;
 
 	mfun = (usbmast_fun_t *) ddf_fun_data_get((ddf_fun_t *)arg);
-	bd_conn(icall_handle, icall, &mfun->bds);
+	bd_conn(icall, &mfun->bds);
 }
 
Index: uspace/drv/bus/adb/cuda_adb/cuda_adb.c
===================================================================
--- uspace/drv/bus/adb/cuda_adb/cuda_adb.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/bus/adb/cuda_adb/cuda_adb.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -55,5 +55,5 @@
 #define NAME  "cuda_adb"
 
-static void cuda_dev_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void cuda_dev_connection(ipc_call_t *, void *);
 static errno_t cuda_init(cuda_t *);
 static void cuda_irq_handler(ipc_call_t *, void *);
@@ -198,22 +198,20 @@
 
 /** Device connection handler */
-static void cuda_dev_connection(cap_call_handle_t icall_handle,
-    ipc_call_t *icall, void *arg)
+static void cuda_dev_connection(ipc_call_t *icall, void *arg)
 {
 	adb_dev_t *dev = (adb_dev_t *) ddf_fun_data_get((ddf_fun_t *) arg);
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	sysarg_t method;
 
 	/* Answer the IPC_M_CONNECT_ME_TO call. */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 		method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -223,7 +221,7 @@
 		if (sess != NULL) {
 			dev->client_sess = sess;
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 		} else {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/drv/bus/usb/vhc/conndev.c
===================================================================
--- uspace/drv/bus/usb/vhc/conndev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/bus/usb/vhc/conndev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -89,10 +89,9 @@
 /** Default handler for IPC methods not handled by DDF.
  *
- * @param fun           Device handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
+ * @param fun   Device handling the call.
+ * @param icall Call data.
+ *
  */
-void default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	vhc_data_t *vhc = ddf_fun_data_get(fun);
@@ -104,10 +103,10 @@
 		errno_t rc = vhc_virtdev_plug(vhc, callback, &plugged_device_handle);
 		if (rc != EOK) {
-			async_answer_0(icall_handle, rc);
+			async_answer_0(icall, rc);
 			async_hangup(callback);
 			return;
 		}
 
-		async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EOK);
 
 		receive_device_name(callback);
@@ -116,5 +115,5 @@
 		    plugged_device_name, plugged_device_handle);
 	} else
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 }
 
Index: uspace/drv/bus/usb/vhc/vhcd.h
===================================================================
--- uspace/drv/bus/usb/vhc/vhcd.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/bus/usb/vhc/vhcd.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -88,6 +88,5 @@
 
 void on_client_close(ddf_fun_t *fun);
-void default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall);
+void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall);
 
 errno_t vhc_virtdev_plug(vhc_data_t *, async_sess_t *, uintptr_t *);
Index: uspace/drv/char/i8042/i8042.c
===================================================================
--- uspace/drv/char/i8042/i8042.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/i8042/i8042.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -67,5 +67,5 @@
 #define i8042_KBD_TRANSLATE  0x40  /* Use this to switch to XT scancodes */
 
-static void i8042_char_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void i8042_char_conn(ipc_call_t *, void *);
 static errno_t i8042_read(chardev_srv_t *, void *, size_t, size_t *);
 static errno_t i8042_write(chardev_srv_t *, const void *, size_t, size_t *);
@@ -415,13 +415,13 @@
 /** Handle data requests.
  *
- * @param id   chandle
  * @param call IPC request.
  * @param arg  ddf_fun_t function.
- */
-void i8042_char_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+ *
+ */
+void i8042_char_conn(ipc_call_t *icall, void *arg)
 {
 	i8042_port_t *port = ddf_fun_data_get((ddf_fun_t *)arg);
 
-	chardev_conn(icall_handle, icall, &port->cds);
+	chardev_conn(icall, &port->cds);
 }
 
Index: uspace/drv/char/msim-con/msim-con.c
===================================================================
--- uspace/drv/char/msim-con/msim-con.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/msim-con/msim-con.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,5 +41,5 @@
 #include "msim-con.h"
 
-static void msim_con_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void msim_con_connection(ipc_call_t *, void *);
 
 static errno_t msim_con_read(chardev_srv_t *, void *, size_t, size_t *);
@@ -217,11 +217,10 @@
 
 /** Character device connection handler. */
-static void msim_con_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void msim_con_connection(ipc_call_t *icall, void *arg)
 {
 	msim_con_t *con = (msim_con_t *) ddf_dev_data_get(
 	    ddf_fun_get_dev((ddf_fun_t *) arg));
 
-	chardev_conn(icall_handle, icall, &con->cds);
+	chardev_conn(icall, &con->cds);
 }
 
Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/ns8250/ns8250.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -311,5 +311,5 @@
 static errno_t ns8250_open(chardev_srvs_t *, chardev_srv_t *);
 static errno_t ns8250_close(chardev_srv_t *);
-static void ns8250_default_handler(chardev_srv_t *, cap_call_handle_t, ipc_call_t *);
+static void ns8250_default_handler(chardev_srv_t *, ipc_call_t *);
 
 /** The character interface's callbacks. */
@@ -322,5 +322,5 @@
 };
 
-static void ns8250_char_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void ns8250_char_conn(ipc_call_t *, void *);
 
 static errno_t ns8250_dev_add(ddf_dev_t *dev);
@@ -1067,6 +1067,5 @@
  * Configure the parameters of the serial communication.
  */
-static void ns8250_default_handler(chardev_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void ns8250_default_handler(chardev_srv_t *srv, ipc_call_t *call)
 {
 	ns8250_t *ns8250 = srv_ns8250(srv);
@@ -1079,5 +1078,5 @@
 		ns8250_get_props(ns8250->dev, &baud_rate, &parity, &word_length,
 		    &stop_bits);
-		async_answer_4(chandle, EOK, baud_rate, parity, word_length,
+		async_answer_4(call, EOK, baud_rate, parity, word_length,
 		    stop_bits);
 		break;
@@ -1090,17 +1089,17 @@
 		ret = ns8250_set_props(ns8250->dev, baud_rate, parity, word_length,
 		    stop_bits);
-		async_answer_0(chandle, ret);
+		async_answer_0(call, ret);
 		break;
 
 	default:
-		async_answer_0(chandle, ENOTSUP);
-	}
-}
-
-void ns8250_char_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+		async_answer_0(call, ENOTSUP);
+	}
+}
+
+void ns8250_char_conn(ipc_call_t *icall, void *arg)
 {
 	ns8250_t *ns8250 = fun_ns8250((ddf_fun_t *)arg);
 
-	chardev_conn(icall_handle, icall, &ns8250->cds);
+	chardev_conn(icall, &ns8250->cds);
 }
 
Index: uspace/drv/char/pl050/pl050.c
===================================================================
--- uspace/drv/char/pl050/pl050.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/pl050/pl050.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -54,5 +54,5 @@
 static errno_t pl050_fun_online(ddf_fun_t *);
 static errno_t pl050_fun_offline(ddf_fun_t *);
-static void pl050_char_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void pl050_char_conn(ipc_call_t *, void *);
 static errno_t pl050_read(chardev_srv_t *, void *, size_t, size_t *);
 static errno_t pl050_write(chardev_srv_t *, const void *, size_t, size_t *);
@@ -286,9 +286,9 @@
 }
 
-void pl050_char_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void pl050_char_conn(ipc_call_t *icall, void *arg)
 {
 	pl050_t *pl050 = pl050_from_fun((ddf_fun_t *)arg);
 
-	chardev_conn(icall_handle, icall, &pl050->cds);
+	chardev_conn(icall, &pl050->cds);
 }
 
Index: uspace/drv/char/ski-con/ski-con.c
===================================================================
--- uspace/drv/char/ski-con/ski-con.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/ski-con/ski-con.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -50,5 +50,5 @@
 static errno_t ski_con_fibril(void *arg);
 static int32_t ski_con_getchar(void);
-static void ski_con_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void ski_con_connection(ipc_call_t *, void *);
 
 static errno_t ski_con_read(chardev_srv_t *, void *, size_t, size_t *);
@@ -255,11 +255,10 @@
 
 /** Character device connection handler. */
-static void ski_con_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void ski_con_connection(ipc_call_t *icall, void *arg)
 {
 	ski_con_t *con = (ski_con_t *) ddf_dev_data_get(
 	    ddf_fun_get_dev((ddf_fun_t *) arg));
 
-	chardev_conn(icall_handle, icall, &con->cds);
+	chardev_conn(icall, &con->cds);
 }
 
Index: uspace/drv/char/sun4v-con/sun4v-con.c
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/char/sun4v-con/sun4v-con.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,5 +42,5 @@
 #include "sun4v-con.h"
 
-static void sun4v_con_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void sun4v_con_connection(ipc_call_t *, void *);
 
 #define POLL_INTERVAL  10000
@@ -181,11 +181,10 @@
 
 /** Character device connection handler. */
-static void sun4v_con_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void sun4v_con_connection(ipc_call_t *icall, void *arg)
 {
 	sun4v_con_t *con = (sun4v_con_t *) ddf_dev_data_get(
 	    ddf_fun_get_dev((ddf_fun_t *) arg));
 
-	chardev_conn(icall_handle, icall, &con->cds);
+	chardev_conn(icall, &con->cds);
 }
 
Index: uspace/drv/fb/amdm37x_dispc/main.c
===================================================================
--- uspace/drv/fb/amdm37x_dispc/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/fb/amdm37x_dispc/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -46,10 +46,10 @@
 #define NAME  "amdm37x_dispc"
 
-static void graph_vsl_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void graph_vsl_connection(ipc_call_t *icall, void *arg)
 {
 	visualizer_t *vsl;
 
 	vsl = (visualizer_t *) ddf_fun_data_get((ddf_fun_t *)arg);
-	graph_visualizer_connection(vsl, icall_handle, icall, NULL);
+	graph_visualizer_connection(vsl, icall, NULL);
 }
 
Index: uspace/drv/fb/kfb/port.c
===================================================================
--- uspace/drv/fb/kfb/port.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/fb/kfb/port.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -162,5 +162,5 @@
 };
 
-static void graph_vsl_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void graph_vsl_connection(ipc_call_t *icall, void *arg)
 {
 	visualizer_t *vsl;
@@ -168,5 +168,5 @@
 
 	vsl = (visualizer_t *) ddf_fun_data_get((ddf_fun_t *)arg);
-	graph_visualizer_connection(vsl, icall_handle, icall, NULL);
+	graph_visualizer_connection(vsl, icall, NULL);
 
 	if (kfb.addr != NULL) {
Index: uspace/drv/hid/adb-kbd/adb-kbd.c
===================================================================
--- uspace/drv/hid/adb-kbd/adb-kbd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/adb-kbd/adb-kbd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -43,7 +43,7 @@
 #include "ctl.h"
 
-static void adb_kbd_events(cap_call_handle_t, ipc_call_t *, void *);
+static void adb_kbd_events(ipc_call_t *, void *);
 static void adb_kbd_reg0_data(adb_kbd_t *, uint16_t);
-static void adb_kbd_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void adb_kbd_conn(ipc_call_t *, void *);
 
 /** Add ADB keyboard device */
@@ -130,5 +130,5 @@
 }
 
-static void adb_kbd_events(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void adb_kbd_events(ipc_call_t *icall, void *arg)
 {
 	adb_kbd_t *kbd = (adb_kbd_t *) arg;
@@ -136,7 +136,6 @@
 	/* Ignore parameters, the connection is already opened */
 	while (true) {
-
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		errno_t retval = EOK;
@@ -154,5 +153,5 @@
 			retval = ENOENT;
 		}
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 }
@@ -191,7 +190,6 @@
 
 /** Handle client connection */
-static void adb_kbd_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	cap_call_handle_t chandle;
+static void adb_kbd_conn(ipc_call_t *icall, void *arg)
+{
 	ipc_call_t call;
 	sysarg_t method;
@@ -201,15 +199,15 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	kbd = (adb_kbd_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 		method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -219,7 +217,7 @@
 		if (sess != NULL) {
 			kbd->client_sess = sess;
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 		} else {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/drv/hid/adb-mouse/adb-mouse.c
===================================================================
--- uspace/drv/hid/adb-mouse/adb-mouse.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/adb-mouse/adb-mouse.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,5 +41,5 @@
 #include "adb-mouse.h"
 
-static void adb_mouse_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void adb_mouse_conn(ipc_call_t *, void *);
 
 static void adb_mouse_event_button(adb_mouse_t *mouse, int bnum, int bpress)
@@ -88,5 +88,5 @@
 }
 
-static void adb_mouse_events(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void adb_mouse_events(ipc_call_t *icall, void *arg)
 {
 	adb_mouse_t *mouse = (adb_mouse_t *) arg;
@@ -95,5 +95,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		errno_t retval = EOK;
@@ -112,5 +112,5 @@
 		}
 
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 }
@@ -200,7 +200,6 @@
 
 /** Handle client connection */
-static void adb_mouse_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	cap_call_handle_t chandle;
+static void adb_mouse_conn(ipc_call_t *icall, void *arg)
+{
 	ipc_call_t call;
 	sysarg_t method;
@@ -210,15 +209,15 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	mouse = (adb_mouse_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 		method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -228,11 +227,10 @@
 		if (sess != NULL) {
 			mouse->client_sess = sess;
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 		} else {
-			async_answer_0(chandle, EINVAL);
-		}
-	}
-}
-
+			async_answer_0(&call, EINVAL);
+		}
+	}
+}
 
 /**
Index: uspace/drv/hid/atkbd/atkbd.c
===================================================================
--- uspace/drv/hid/atkbd/atkbd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/atkbd/atkbd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -292,12 +292,9 @@
 /** Default handler for IPC methods not handled by DDF.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- *
- */
-static void
-default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+static void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	const sysarg_t method = IPC_GET_IMETHOD(*icall);
@@ -307,5 +304,5 @@
 	switch (method) {
 	case KBDEV_SET_IND:
-		async_answer_0(icall_handle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		break;
 	case IPC_M_CONNECT_TO_ME:
@@ -320,5 +317,5 @@
 			ddf_msg(LVL_WARN,
 			    "Failed creating callback session");
-			async_answer_0(icall_handle, EAGAIN);
+			async_answer_0(icall, EAGAIN);
 			break;
 		}
@@ -327,8 +324,8 @@
 			kbd->client_sess = sess;
 			ddf_msg(LVL_DEBUG, "Set client session");
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else {
 			ddf_msg(LVL_ERROR, "Client session already set");
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 		}
 
@@ -336,5 +333,5 @@
 	default:
 		ddf_msg(LVL_ERROR, "Unknown method: %d.", (int)method);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		break;
 	}
Index: uspace/drv/hid/ps2mouse/ps2mouse.c
===================================================================
--- uspace/drv/hid/ps2mouse/ps2mouse.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/ps2mouse/ps2mouse.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -104,5 +104,5 @@
 static errno_t polling_intellimouse(void *);
 static errno_t probe_intellimouse(ps2_mouse_t *, bool);
-static void default_connection_handler(ddf_fun_t *, cap_call_handle_t, ipc_call_t *);
+static void default_connection_handler(ddf_fun_t *, ipc_call_t *);
 
 /** ps/2 mouse driver ops. */
@@ -401,10 +401,9 @@
 /** Default handler for IPC methods not handled by DDF.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- */
-void default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	const sysarg_t method = IPC_GET_IMETHOD(*icall);
@@ -423,5 +422,5 @@
 			ddf_msg(LVL_WARN,
 			    "Failed creating client callback session");
-			async_answer_0(icall_handle, EAGAIN);
+			async_answer_0(icall, EAGAIN);
 			break;
 		}
@@ -429,13 +428,13 @@
 			mouse->client_sess = sess;
 			ddf_msg(LVL_DEBUG, "Set client session");
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else {
 			ddf_msg(LVL_ERROR, "Client session already set");
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 		}
 		break;
 	default:
 		ddf_msg(LVL_ERROR, "Unknown method: %d.", (int)method);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		break;
 	}
Index: uspace/drv/hid/usbhid/kbd/kbddev.c
===================================================================
--- uspace/drv/hid/usbhid/kbd/kbddev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/usbhid/kbd/kbddev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -72,5 +72,5 @@
 #include "../usbhid.h"
 
-static void default_connection_handler(ddf_fun_t *, cap_call_handle_t, ipc_call_t *);
+static void default_connection_handler(ddf_fun_t *, ipc_call_t *);
 static ddf_dev_ops_t kbdops = { .default_handler = default_connection_handler };
 
@@ -148,6 +148,5 @@
 /* IPC method handler                                                         */
 
-/**
- * Default handler for IPC methods not handled by DDF.
+/** Default handler for IPC methods not handled by DDF.
  *
  * Currently recognizes only two methods (IPC_M_CONNECT_TO_ME and KBDEV_SET_IND)
@@ -156,11 +155,9 @@
  * KBDEV_SET_IND sets LED keyboard indicators.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- */
-static void
-default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+static void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	const sysarg_t method = IPC_GET_IMETHOD(*icall);
@@ -172,5 +169,5 @@
 		kbd_dev->mods = IPC_GET_ARG1(*icall);
 		usb_kbd_set_led(kbd_dev->hid_dev, kbd_dev);
-		async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EOK);
 		break;
 		/*
@@ -184,5 +181,5 @@
 			usb_log_warning(
 			    "Failed to create start console session.\n");
-			async_answer_0(icall_handle, EAGAIN);
+			async_answer_0(icall, EAGAIN);
 			break;
 		}
@@ -190,9 +187,9 @@
 			kbd_dev->client_sess = sess;
 			usb_log_debug("%s: OK", __FUNCTION__);
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else {
 			usb_log_error("%s: console session already set",
 			    __FUNCTION__);
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 		}
 		break;
@@ -200,5 +197,5 @@
 		usb_log_error("%s: Unknown method: %d.",
 		    __FUNCTION__, (int) method);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		break;
 	}
Index: uspace/drv/hid/usbhid/mouse/mousedev.c
===================================================================
--- uspace/drv/hid/usbhid/mouse/mousedev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/usbhid/mouse/mousedev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -56,5 +56,5 @@
 #define NAME "mouse"
 
-static void default_connection_handler(ddf_fun_t *, cap_call_handle_t, ipc_call_t *);
+static void default_connection_handler(ddf_fun_t *, ipc_call_t *);
 
 static ddf_dev_ops_t ops = { .default_handler = default_connection_handler };
@@ -110,11 +110,9 @@
 /** Default handler for IPC methods not handled by DDF.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- */
-static void
-default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+static void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	usb_mouse_t *mouse_dev = ddf_fun_data_get(fun);
@@ -122,5 +120,5 @@
 	if (mouse_dev == NULL) {
 		usb_log_debug("%s: Missing parameters.", __FUNCTION__);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -137,14 +135,14 @@
 			usb_log_debug("Console session to %s set ok (%p).",
 			    ddf_fun_get_name(fun), sess);
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else {
 			usb_log_error("Console session to %s already set.",
 			    ddf_fun_get_name(fun));
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 			async_hangup(sess);
 		}
 	} else {
 		usb_log_debug("%s: Invalid function.", __FUNCTION__);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 	}
 }
Index: uspace/drv/hid/usbhid/multimedia/multimedia.c
===================================================================
--- uspace/drv/hid/usbhid/multimedia/multimedia.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/usbhid/multimedia/multimedia.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -73,6 +73,5 @@
 
 
-/**
- * Default handler for IPC methods not handled by DDF.
+/** Default handler for IPC methods not handled by DDF.
  *
  * Currently recognizes only one method (IPC_M_CONNECT_TO_ME), in which case it
@@ -80,11 +79,9 @@
  * later use by the driver to notify about key events.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- */
-static void
-default_connection_handler(ddf_fun_t *fun, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+static void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	usb_log_debug(NAME " default_connection_handler()");
@@ -99,9 +96,9 @@
 			usb_log_debug(NAME " Saved session to console: %p",
 			    sess);
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 	} else
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 }
 
Index: uspace/drv/hid/xtkbd/xtkbd.c
===================================================================
--- uspace/drv/hid/xtkbd/xtkbd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/hid/xtkbd/xtkbd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -328,11 +328,9 @@
 /** Default handler for IPC methods not handled by DDF.
  *
- * @param fun           Device function handling the call.
- * @param icall_handle  Call handle.
- * @param icall         Call data.
- *
- */
-static void default_connection_handler(ddf_fun_t *fun,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param fun   Device function handling the call.
+ * @param icall Call data.
+ *
+ */
+static void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
 {
 	const sysarg_t method = IPC_GET_IMETHOD(*icall);
@@ -357,10 +355,10 @@
 		errno_t rc = chardev_write(kbd->chardev, &cmds[0], 1, &nwr);
 		if (rc != EOK) {
-			async_answer_0(icall_handle, rc);
+			async_answer_0(icall, rc);
 			break;
 		}
 
 		rc = chardev_write(kbd->chardev, &cmds[1], 1, &nwr);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		break;
 	case IPC_M_CONNECT_TO_ME:
@@ -375,5 +373,5 @@
 			ddf_msg(LVL_WARN,
 			    "Failed creating callback session");
-			async_answer_0(icall_handle, EAGAIN);
+			async_answer_0(icall, EAGAIN);
 			break;
 		}
@@ -382,8 +380,8 @@
 			kbd->client_sess = sess;
 			ddf_msg(LVL_DEBUG, "Set client session");
-			async_answer_0(icall_handle, EOK);
+			async_answer_0(icall, EOK);
 		} else {
 			ddf_msg(LVL_ERROR, "Client session already set");
-			async_answer_0(icall_handle, ELIMIT);
+			async_answer_0(icall, ELIMIT);
 		}
 
@@ -391,5 +389,5 @@
 	default:
 		ddf_msg(LVL_ERROR, "Unknown method: %d.", (int)method);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		break;
 	}
Index: uspace/drv/intctl/apic/apic.c
===================================================================
--- uspace/drv/intctl/apic/apic.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/intctl/apic/apic.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -160,11 +160,10 @@
 /** Handle one connection to APIC.
  *
- * @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(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	cap_call_handle_t chandle;
+ * @param arg   Local argument.
+ *
+ */
+static void apic_connection(ipc_call_t *icall, void *arg)
+{
 	ipc_call_t call;
 	apic_t *apic;
@@ -173,14 +172,14 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
-
-	apic = (apic_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
+	async_answer_0(icall, EOK);
+
+	apic = (apic_t *) ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *) arg));
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -188,17 +187,17 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case IRC_ENABLE_INTERRUPT:
-			async_answer_0(chandle, apic_enable_irq(apic,
+			async_answer_0(&call, apic_enable_irq(apic,
 			    IPC_GET_ARG1(call)));
 			break;
 		case IRC_DISABLE_INTERRUPT:
 			/* XXX TODO */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/drv/intctl/i8259/i8259.c
===================================================================
--- uspace/drv/intctl/i8259/i8259.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/intctl/i8259/i8259.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -89,11 +89,10 @@
 /** Handle one connection to i8259.
  *
- * @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(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	cap_call_handle_t chandle;
+ * @param arg   Local argument.
+ *
+ */
+static void i8259_connection(ipc_call_t *icall, void *arg)
+{
 	ipc_call_t call;
 	i8259_t *i8259 = NULL /* XXX */;
@@ -102,14 +101,14 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
-
-	i8259 = (i8259_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
+	async_answer_0(icall, EOK);
+
+	i8259 = (i8259_t *) ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *) arg));
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -117,17 +116,17 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case IRC_ENABLE_INTERRUPT:
-			async_answer_0(chandle, pic_enable_irq(i8259,
+			async_answer_0(&call, pic_enable_irq(i8259,
 			    IPC_GET_ARG1(call)));
 			break;
 		case IRC_DISABLE_INTERRUPT:
 			/* XXX TODO */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/drv/intctl/icp-ic/icp-ic.c
===================================================================
--- uspace/drv/intctl/icp-ic/icp-ic.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/intctl/icp-ic/icp-ic.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -65,11 +65,10 @@
 /** Client connection handler.
  *
- * @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.
+ * @param arg   Local argument.
+ *
  */
-static void icpic_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void icpic_connection(ipc_call_t *icall, void *arg)
 {
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	icpic_t *icpic;
@@ -78,14 +77,14 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
-	icpic = (icpic_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
+	icpic = (icpic_t *) ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *) arg));
 
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
 			/* The other side has hung up. */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -93,17 +92,17 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case IRC_ENABLE_INTERRUPT:
-			async_answer_0(chandle,
+			async_answer_0(&call,
 			    icpic_enable_irq(icpic, IPC_GET_ARG1(call)));
 			break;
 		case IRC_DISABLE_INTERRUPT:
 			/* XXX TODO */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/drv/intctl/obio/obio.c
===================================================================
--- uspace/drv/intctl/obio/obio.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/drv/intctl/obio/obio.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -69,11 +69,10 @@
 /** Handle one connection to obio.
  *
- * @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.
+ * @param icall Call data of the request that opened the connection.
+ * @param arg   Local argument.
+ *
  */
-static void obio_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void obio_connection(ipc_call_t *icall, void *arg)
 {
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	obio_t *obio;
@@ -82,12 +81,13 @@
 	 * Answer the first IPC_M_CONNECT_ME_TO call.
 	 */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
-	obio = (obio_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
+	obio = (obio_t *) ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *) arg));
 
 	while (true) {
 		int inr;
 
-		chandle = async_get_call(&call);
+		async_get_call(&call);
+
 		switch (IPC_GET_IMETHOD(call)) {
 		case IRC_ENABLE_INTERRUPT:
@@ -95,17 +95,17 @@
 			pio_set_64(&obio->regs[OBIO_IMR(inr & INO_MASK)],
 			    1UL << 31, 0);
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case IRC_DISABLE_INTERRUPT:
 			/* XXX TODO */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		case IRC_CLEAR_INTERRUPT:
 			inr = IPC_GET_ARG1(call);
 			pio_write_64(&obio->regs[OBIO_CIR(inr & INO_MASK)], 0);
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/lib/c/generic/async/ports.c
===================================================================
--- uspace/lib/c/generic/async/ports.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/async/ports.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -85,13 +85,11 @@
  * not have a specific handler defined.
  *
- * @param chandle  Handle of the incoming call.
- * @param call     Data of the incoming call.
- * @param arg      Local argument
+ * @param call Data of the incoming call.
+ * @param arg  Local argument
  *
  */
-static void default_fallback_port_handler(cap_call_handle_t chandle,
-    ipc_call_t *call, void *arg)
-{
-	ipc_answer_0(chandle, ENOENT);
+static void default_fallback_port_handler(ipc_call_t *call, void *arg)
+{
+	async_answer_0(call, ENOENT);
 }
 
Index: uspace/lib/c/generic/async/server.c
===================================================================
--- uspace/lib/c/generic/async/server.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/async/server.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -77,17 +77,18 @@
  *   }
  *
- *   port_handler(ichandle, *icall)
+ *   port_handler(ipc_call_t *icall)
  *   {
  *     if (want_refuse) {
- *       async_answer_0(ichandle, ELIMIT);
+ *       async_answer_0(icall, ELIMIT);
  *       return;
  *     }
- *     async_answer_0(ichandle, EOK);
- *
- *     chandle = async_get_call(&call);
- *     somehow_handle_the_call(chandle, call);
- *     async_answer_2(chandle, 1, 2, 3);
- *
- *     chandle = async_get_call(&call);
+ *
+ *     async_answer_0(icall, EOK);
+ *
+ *     async_get_call(&call);
+ *     somehow_handle_the_call(&call);
+ *     async_answer_2(&call, 1, 2, 3);
+ *
+ *     async_get_call(&call);
  *     ...
  *   }
@@ -133,5 +134,4 @@
 typedef struct {
 	link_t link;
-
 	ipc_call_t call;
 } msg_t;
@@ -418,6 +418,6 @@
 	 * Call the connection handler function.
 	 */
-	fibril_connection->handler(fibril_connection->call.cap_handle,
-	    &fibril_connection->call, fibril_connection->data);
+	fibril_connection->handler(&fibril_connection->call,
+	    fibril_connection->data);
 
 	/*
@@ -964,13 +964,13 @@
 /** Return new incoming message for the current (fibril-local) connection.
  *
- * @param call   Storage where the incoming call data will be stored.
- * @param usecs  Timeout in microseconds. Zero denotes no timeout.
- *
- * @return  If no timeout was specified, then a handle of the incoming call is
- *          returned. If a timeout is specified, then a handle of the incoming
- *          call is returned unless the timeout expires prior to receiving a
- *          message. In that case zero CAP_NIL is returned.
- */
-cap_call_handle_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs)
+ * @param call  Storage where the incoming call data will be stored.
+ * @param usecs Timeout in microseconds. Zero denotes no timeout.
+ *
+ * @return If no timeout was specified, then true is returned.
+ * @return If a timeout is specified, then true is returned unless
+ *         the timeout expires prior to receiving a message.
+ *
+ */
+bool async_get_call_timeout(ipc_call_t *call, suseconds_t usecs)
 {
 	assert(call);
@@ -1007,5 +1007,5 @@
 			IPC_SET_IMETHOD(*call, IPC_M_PHONE_HUNGUP);
 			futex_unlock(&async_futex);
-			return conn->close_chandle;
+			return true;
 		}
 
@@ -1027,5 +1027,5 @@
 			/* If we timed out -> exit */
 			futex_unlock(&async_futex);
-			return CAP_NIL;
+			return false;
 		}
 	}
@@ -1035,10 +1035,9 @@
 	list_remove(&msg->link);
 
-	cap_call_handle_t chandle = msg->call.cap_handle;
 	*call = msg->call;
 	free(msg);
 
 	futex_unlock(&async_futex);
-	return chandle;
+	return true;
 }
 
@@ -1251,56 +1250,62 @@
 }
 
-errno_t async_answer_0(cap_call_handle_t chandle, errno_t retval)
-{
-	return ipc_answer_0(chandle, retval);
-}
-
-errno_t async_answer_1(cap_call_handle_t chandle, errno_t retval, sysarg_t arg1)
-{
-	return ipc_answer_1(chandle, retval, arg1);
-}
-
-errno_t async_answer_2(cap_call_handle_t chandle, errno_t retval, sysarg_t arg1,
+errno_t async_answer_0(ipc_call_t *call, errno_t retval)
+{
+	return ipc_answer_0(call->cap_handle, retval);
+}
+
+errno_t async_answer_1(ipc_call_t *call, errno_t retval, sysarg_t arg1)
+{
+	return ipc_answer_1(call->cap_handle, retval, arg1);
+}
+
+errno_t async_answer_2(ipc_call_t *call, errno_t retval, sysarg_t arg1,
     sysarg_t arg2)
 {
-	return ipc_answer_2(chandle, retval, arg1, arg2);
-}
-
-errno_t async_answer_3(cap_call_handle_t chandle, errno_t retval, sysarg_t arg1,
+	return ipc_answer_2(call->cap_handle, retval, arg1, arg2);
+}
+
+errno_t async_answer_3(ipc_call_t *call, errno_t retval, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3)
 {
-	return ipc_answer_3(chandle, retval, arg1, arg2, arg3);
-}
-
-errno_t async_answer_4(cap_call_handle_t chandle, errno_t retval, sysarg_t arg1,
+	return ipc_answer_3(call->cap_handle, retval, arg1, arg2, arg3);
+}
+
+errno_t async_answer_4(ipc_call_t *call, errno_t retval, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
 {
-	return ipc_answer_4(chandle, retval, arg1, arg2, arg3, arg4);
-}
-
-errno_t async_answer_5(cap_call_handle_t chandle, errno_t retval, sysarg_t arg1,
+	return ipc_answer_4(call->cap_handle, retval, arg1, arg2, arg3, arg4);
+}
+
+errno_t async_answer_5(ipc_call_t *call, errno_t retval, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5)
 {
-	return ipc_answer_5(chandle, retval, arg1, arg2, arg3, arg4, arg5);
-}
-
-errno_t async_forward_fast(cap_call_handle_t chandle, async_exch_t *exch,
+	return ipc_answer_5(call->cap_handle, retval, arg1, arg2, arg3, arg4,
+	    arg5);
+}
+
+errno_t async_forward_fast(ipc_call_t *call, async_exch_t *exch,
     sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, unsigned int mode)
 {
+	assert(call);
+
 	if (exch == NULL)
 		return ENOENT;
 
-	return ipc_forward_fast(chandle, exch->phone, imethod, arg1, arg2, mode);
-}
-
-errno_t async_forward_slow(cap_call_handle_t chandle, async_exch_t *exch,
+	return ipc_forward_fast(call->cap_handle, exch->phone, imethod, arg1,
+	    arg2, mode);
+}
+
+errno_t async_forward_slow(ipc_call_t *call, async_exch_t *exch,
     sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
     sysarg_t arg4, sysarg_t arg5, unsigned int mode)
 {
+	assert(call);
+
 	if (exch == NULL)
 		return ENOENT;
 
-	return ipc_forward_slow(chandle, exch->phone, imethod, arg1, arg2, arg3,
-	    arg4, arg5, mode);
+	return ipc_forward_slow(call->cap_handle, exch->phone, imethod, arg1,
+	    arg2, arg3, arg4, arg5, mode);
 }
 
@@ -1309,8 +1314,8 @@
  * Ask through phone for a new connection to some service.
  *
- * @param exch            Exchange for sending the message.
- * @param arg1            User defined argument.
- * @param arg2            User defined argument.
- * @param arg3            User defined argument.
+ * @param exch Exchange for sending the message.
+ * @param arg1 User defined argument.
+ * @param arg2 User defined argument.
+ * @param arg3 User defined argument.
  *
  * @return Zero on success or an error code.
@@ -1350,22 +1355,21 @@
  * So far, this wrapper is to be used from within a connection fibril.
  *
- * @param chandle  Storage for the handle of the IPC_M_SHARE_IN call.
- * @param size     Destination address space area size.
+ * @param call Storage for the data of the IPC_M_SHARE_IN call.
+ * @param size Destination address space area size.
  *
  * @return True on success, false on failure.
  *
  */
-bool async_share_in_receive(cap_call_handle_t *chandle, size_t *size)
-{
-	assert(chandle);
+bool async_share_in_receive(ipc_call_t *call, size_t *size)
+{
+	assert(call);
 	assert(size);
 
-	ipc_call_t data;
-	*chandle = async_get_call(&data);
-
-	if (IPC_GET_IMETHOD(data) != IPC_M_SHARE_IN)
+	async_get_call(call);
+
+	if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_IN)
 		return false;
 
-	*size = (size_t) IPC_GET_ARG1(data);
+	*size = (size_t) IPC_GET_ARG1(*call);
 	return true;
 }
@@ -1377,16 +1381,17 @@
  * argument.
  *
- * @param chandle  Handle of the IPC_M_DATA_READ call to answer.
- * @param src      Source address space base.
- * @param flags    Flags to be used for sharing. Bits can be only cleared.
+ * @param call  IPC_M_DATA_READ call to answer.
+ * @param src   Source address space base.
+ * @param flags Flags to be used for sharing. Bits can be only cleared.
  *
  * @return Zero on success or a value from @ref errno.h on failure.
  *
  */
-errno_t async_share_in_finalize(cap_call_handle_t chandle, void *src,
-    unsigned int flags)
-{
+errno_t async_share_in_finalize(ipc_call_t *call, void *src, unsigned int flags)
+{
+	assert(call);
+
 	// FIXME: The source has no business deciding destination address.
-	return ipc_answer_3(chandle, EOK, (sysarg_t) src, (sysarg_t) flags,
+	return ipc_answer_3(call->cap_handle, EOK, (sysarg_t) src, (sysarg_t) flags,
 	    (sysarg_t) _end);
 }
@@ -1400,26 +1405,25 @@
  * So far, this wrapper is to be used from within a connection fibril.
  *
- * @param chandle  Storage for the hash of the IPC_M_SHARE_OUT call.
- * @param size     Storage for the source address space area size.
- * @param flags    Storage for the sharing flags.
+ * @param call  Storage for the data of the IPC_M_SHARE_OUT call.
+ * @param size  Storage for the source address space area size.
+ * @param flags Storage for the sharing flags.
  *
  * @return True on success, false on failure.
  *
  */
-bool async_share_out_receive(cap_call_handle_t *chandle, size_t *size,
+bool async_share_out_receive(ipc_call_t *call, size_t *size,
     unsigned int *flags)
 {
-	assert(chandle);
+	assert(call);
 	assert(size);
 	assert(flags);
 
-	ipc_call_t data;
-	*chandle = async_get_call(&data);
-
-	if (IPC_GET_IMETHOD(data) != IPC_M_SHARE_OUT)
+	async_get_call(call);
+
+	if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_OUT)
 		return false;
 
-	*size = (size_t) IPC_GET_ARG2(data);
-	*flags = (unsigned int) IPC_GET_ARG3(data);
+	*size = (size_t) IPC_GET_ARG2(*call);
+	*flags = (unsigned int) IPC_GET_ARG3(*call);
 	return true;
 }
@@ -1431,14 +1435,17 @@
  * argument.
  *
- * @param chandle  Handle of the IPC_M_DATA_WRITE call to answer.
- * @param dst      Address of the storage for the destination address space area
- *                 base address.
+ * @param call IPC_M_DATA_WRITE call to answer.
+ * @param dst  Address of the storage for the destination address space area
+ *             base address.
  *
  * @return  Zero on success or a value from @ref errno.h on failure.
  *
  */
-errno_t async_share_out_finalize(cap_call_handle_t chandle, void **dst)
-{
-	return ipc_answer_2(chandle, EOK, (sysarg_t) _end, (sysarg_t) dst);
+errno_t async_share_out_finalize(ipc_call_t *call, void **dst)
+{
+	assert(call);
+
+	return ipc_answer_2(call->cap_handle, EOK, (sysarg_t) _end,
+	    (sysarg_t) dst);
 }
 
@@ -1451,43 +1458,21 @@
  * So far, this wrapper is to be used from within a connection fibril.
  *
- * @param chandle  Storage for the handle of the IPC_M_DATA_READ.
- * @param size     Storage for the maximum size. Can be NULL.
+ * @param call Storage for the data of the IPC_M_DATA_READ.
+ * @param size Storage for the maximum size. Can be NULL.
  *
  * @return True on success, false on failure.
  *
  */
-bool async_data_read_receive(cap_call_handle_t *chandle, size_t *size)
-{
-	ipc_call_t data;
-	return async_data_read_receive_call(chandle, &data, size);
-}
-
-/** Wrapper for receiving the IPC_M_DATA_READ calls using the async framework.
- *
- * This wrapper only makes it more comfortable to receive IPC_M_DATA_READ
- * calls so that the user doesn't have to remember the meaning of each IPC
- * argument.
- *
- * So far, this wrapper is to be used from within a connection fibril.
- *
- * @param chandle  Storage for the handle of the IPC_M_DATA_READ.
- * @param size     Storage for the maximum size. Can be NULL.
- *
- * @return True on success, false on failure.
- *
- */
-bool async_data_read_receive_call(cap_call_handle_t *chandle, ipc_call_t *data,
-    size_t *size)
-{
-	assert(chandle);
-	assert(data);
-
-	*chandle = async_get_call(data);
-
-	if (IPC_GET_IMETHOD(*data) != IPC_M_DATA_READ)
+bool async_data_read_receive(ipc_call_t *call, size_t *size)
+{
+	assert(call);
+
+	async_get_call(call);
+
+	if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_READ)
 		return false;
 
 	if (size)
-		*size = (size_t) IPC_GET_ARG2(*data);
+		*size = (size_t) IPC_GET_ARG2(*call);
 
 	return true;
@@ -1500,16 +1485,18 @@
  * argument.
  *
- * @param chandle  Handle of the IPC_M_DATA_READ call to answer.
- * @param src      Source address for the IPC_M_DATA_READ call.
- * @param size     Size for the IPC_M_DATA_READ call. Can be smaller than
- *                 the maximum size announced by the sender.
+ * @param call IPC_M_DATA_READ call to answer.
+ * @param src  Source address for the IPC_M_DATA_READ call.
+ * @param size Size for the IPC_M_DATA_READ call. Can be smaller than
+ *             the maximum size announced by the sender.
  *
  * @return  Zero on success or a value from @ref errno.h on failure.
  *
  */
-errno_t async_data_read_finalize(cap_call_handle_t chandle, const void *src,
-    size_t size)
-{
-	return ipc_answer_2(chandle, EOK, (sysarg_t) src, (sysarg_t) size);
+errno_t async_data_read_finalize(ipc_call_t *call, const void *src, size_t size)
+{
+	assert(call);
+
+	return ipc_answer_2(call->cap_handle, EOK, (sysarg_t) src,
+	    (sysarg_t) size);
 }
 
@@ -1524,7 +1511,7 @@
 		return ENOENT;
 
-	cap_call_handle_t chandle;
-	if (!async_data_read_receive(&chandle, NULL)) {
-		ipc_answer_0(chandle, EINVAL);
+	ipc_call_t call;
+	if (!async_data_read_receive(&call, NULL)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1533,13 +1520,13 @@
 	    dataptr);
 	if (msg == 0) {
-		ipc_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
 
-	errno_t retval = ipc_forward_fast(chandle, exch->phone, 0, 0, 0,
+	errno_t retval = ipc_forward_fast(call.cap_handle, exch->phone, 0, 0, 0,
 	    IPC_FF_ROUTE_FROM_ME);
 	if (retval != EOK) {
 		async_forget(msg);
-		ipc_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 		return retval;
 	}
@@ -1559,44 +1546,21 @@
  * So far, this wrapper is to be used from within a connection fibril.
  *
- * @param chandle  Storage for the handle of the IPC_M_DATA_WRITE.
- * @param size     Storage for the suggested size. May be NULL.
- *
- * @return  True on success, false on failure.
- *
- */
-bool async_data_write_receive(cap_call_handle_t *chandle, size_t *size)
-{
-	ipc_call_t data;
-	return async_data_write_receive_call(chandle, &data, size);
-}
-
-/** Wrapper for receiving the IPC_M_DATA_WRITE calls using the async framework.
- *
- * This wrapper only makes it more comfortable to receive IPC_M_DATA_WRITE
- * calls so that the user doesn't have to remember the meaning of each IPC
- * argument.
- *
- * So far, this wrapper is to be used from within a connection fibril.
- *
- * @param chandle  Storage for the handle of the IPC_M_DATA_WRITE.
- * @param data     Storage for the ipc call data.
- * @param size     Storage for the suggested size. May be NULL.
+ * @param call Storage for the data of the IPC_M_DATA_WRITE.
+ * @param size Storage for the suggested size. May be NULL.
  *
  * @return True on success, false on failure.
  *
  */
-bool async_data_write_receive_call(cap_call_handle_t *chandle, ipc_call_t *data,
-    size_t *size)
-{
-	assert(chandle);
-	assert(data);
-
-	*chandle = async_get_call(data);
-
-	if (IPC_GET_IMETHOD(*data) != IPC_M_DATA_WRITE)
+bool async_data_write_receive(ipc_call_t *call, size_t *size)
+{
+	assert(call);
+
+	async_get_call(call);
+
+	if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_WRITE)
 		return false;
 
 	if (size)
-		*size = (size_t) IPC_GET_ARG2(*data);
+		*size = (size_t) IPC_GET_ARG2(*call);
 
 	return true;
@@ -1609,15 +1573,16 @@
  * argument.
  *
- * @param chandle  Handle of the IPC_M_DATA_WRITE call to answer.
- * @param dst      Final destination address for the IPC_M_DATA_WRITE call.
- * @param size     Final size for the IPC_M_DATA_WRITE call.
+ * @param call IPC_M_DATA_WRITE call to answer.
+ * @param dst  Final destination address for the IPC_M_DATA_WRITE call.
+ * @param size Final size for the IPC_M_DATA_WRITE call.
  *
  * @return  Zero on success or a value from @ref errno.h on failure.
  *
  */
-errno_t async_data_write_finalize(cap_call_handle_t chandle, void *dst,
-    size_t size)
-{
-	return ipc_answer_2(chandle, EOK, (sysarg_t) dst, (sysarg_t) size);
+errno_t async_data_write_finalize(ipc_call_t *call, void *dst, size_t size)
+{
+	assert(call);
+
+	return async_answer_2(call, EOK, (sysarg_t) dst, (sysarg_t) size);
 }
 
@@ -1649,23 +1614,23 @@
 	assert(data);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		ipc_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
 
 	if (size < min_size) {
-		ipc_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
 
 	if ((max_size > 0) && (size > max_size)) {
-		ipc_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
 
 	if ((granularity > 0) && ((size % granularity) != 0)) {
-		ipc_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1679,9 +1644,9 @@
 
 	if (arg_data == NULL) {
-		ipc_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
 		return ENOMEM;
 	}
 
-	errno_t rc = async_data_write_finalize(chandle, arg_data, size);
+	errno_t rc = async_data_write_finalize(&call, arg_data, size);
 	if (rc != EOK) {
 		free(arg_data);
@@ -1708,7 +1673,7 @@
 void async_data_write_void(errno_t retval)
 {
-	cap_call_handle_t chandle;
-	async_data_write_receive(&chandle, NULL);
-	ipc_answer_0(chandle, retval);
+	ipc_call_t call;
+	async_data_write_receive(&call, NULL);
+	async_answer_0(&call, retval);
 }
 
@@ -1723,7 +1688,7 @@
 		return ENOENT;
 
-	cap_call_handle_t chandle;
-	if (!async_data_write_receive(&chandle, NULL)) {
-		ipc_answer_0(chandle, EINVAL);
+	ipc_call_t call;
+	if (!async_data_write_receive(&call, NULL)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1732,13 +1697,13 @@
 	    dataptr);
 	if (msg == 0) {
-		ipc_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
 
-	errno_t retval = ipc_forward_fast(chandle, exch->phone, 0, 0, 0,
+	errno_t retval = ipc_forward_fast(call.cap_handle, exch->phone, 0, 0, 0,
 	    IPC_FF_ROUTE_FROM_ME);
 	if (retval != EOK) {
 		async_forget(msg);
-		ipc_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 		return retval;
 	}
@@ -1765,10 +1730,11 @@
 	/* Accept the phone */
 	ipc_call_t call;
-	cap_call_handle_t chandle = async_get_call(&call);
+	async_get_call(&call);
+
 	cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(call);
 
 	if ((IPC_GET_IMETHOD(call) != IPC_M_CONNECT_TO_ME) ||
 	    !CAP_HANDLE_VALID((phandle))) {
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return NULL;
 	}
@@ -1776,5 +1742,5 @@
 	async_sess_t *sess = (async_sess_t *) malloc(sizeof(async_sess_t));
 	if (sess == NULL) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
 		return NULL;
 	}
@@ -1795,5 +1761,5 @@
 
 	/* Acknowledge the connected phone */
-	async_answer_0(chandle, EOK);
+	async_answer_0(&call, EOK);
 
 	return sess;
@@ -1843,29 +1809,21 @@
 }
 
-bool async_state_change_receive(cap_call_handle_t *chandle, sysarg_t *arg1,
-    sysarg_t *arg2, sysarg_t *arg3)
-{
-	assert(chandle);
-
-	ipc_call_t call;
-	*chandle = async_get_call(&call);
-
-	if (IPC_GET_IMETHOD(call) != IPC_M_STATE_CHANGE_AUTHORIZE)
+bool async_state_change_receive(ipc_call_t *call)
+{
+	assert(call);
+
+	async_get_call(call);
+
+	if (IPC_GET_IMETHOD(*call) != IPC_M_STATE_CHANGE_AUTHORIZE)
 		return false;
 
-	if (arg1)
-		*arg1 = IPC_GET_ARG1(call);
-	if (arg2)
-		*arg2 = IPC_GET_ARG2(call);
-	if (arg3)
-		*arg3 = IPC_GET_ARG3(call);
-
 	return true;
 }
 
-errno_t async_state_change_finalize(cap_call_handle_t chandle,
-    async_exch_t *other_exch)
-{
-	return ipc_answer_1(chandle, EOK, CAP_HANDLE_RAW(other_exch->phone));
+errno_t async_state_change_finalize(ipc_call_t *call, async_exch_t *other_exch)
+{
+	assert(call);
+
+	return async_answer_1(call, EOK, CAP_HANDLE_RAW(other_exch->phone));
 }
 
Index: uspace/lib/c/generic/bd.c
===================================================================
--- uspace/lib/c/generic/bd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/bd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -46,5 +46,5 @@
 #include <offset.h>
 
-static void bd_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void bd_cb_conn(ipc_call_t *icall, void *arg);
 
 errno_t bd_open(async_sess_t *sess, bd_t **rbd)
@@ -196,5 +196,5 @@
 }
 
-static void bd_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void bd_cb_conn(ipc_call_t *icall, void *arg)
 {
 	bd_t *bd = (bd_t *)arg;
@@ -204,5 +204,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -213,5 +213,5 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/bd_srv.c
===================================================================
--- uspace/lib/c/generic/bd_srv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/bd_srv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -43,6 +43,5 @@
 #include <bd_srv.h>
 
-static void bd_read_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void bd_read_blocks_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	aoff64_t ba;
@@ -51,11 +50,11 @@
 	size_t size;
 	errno_t rc;
-	cap_call_handle_t rcall_handle;
 
 	ba = MERGE_LOUP32(IPC_GET_ARG1(*call), IPC_GET_ARG2(*call));
 	cnt = IPC_GET_ARG3(*call);
 
-	if (!async_data_read_receive(&rcall_handle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	ipc_call_t rcall;
+	if (!async_data_read_receive(&rcall, &size)) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -63,12 +62,12 @@
 	buf = malloc(size);
 	if (buf == NULL) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&rcall, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
 
 	if (srv->srvs->ops->read_blocks == NULL) {
-		async_answer_0(rcall_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&rcall, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		free(buf);
 		return;
@@ -77,18 +76,17 @@
 	rc = srv->srvs->ops->read_blocks(srv, ba, cnt, buf, size);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
-		free(buf);
-		return;
-	}
-
-	async_data_read_finalize(rcall_handle, buf, size);
+		async_answer_0(&rcall, ENOMEM);
+		async_answer_0(call, ENOMEM);
+		free(buf);
+		return;
+	}
+
+	async_data_read_finalize(&rcall, buf, size);
 
 	free(buf);
-	async_answer_0(chandle, EOK);
-}
-
-static void bd_read_toc_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, EOK);
+}
+
+static void bd_read_toc_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	uint8_t session;
@@ -96,10 +94,10 @@
 	size_t size;
 	errno_t rc;
-	cap_call_handle_t rcall_handle;
 
 	session = IPC_GET_ARG1(*call);
 
-	if (!async_data_read_receive(&rcall_handle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	ipc_call_t rcall;
+	if (!async_data_read_receive(&rcall, &size)) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -107,12 +105,12 @@
 	buf = malloc(size);
 	if (buf == NULL) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&rcall, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
 
 	if (srv->srvs->ops->read_toc == NULL) {
-		async_answer_0(rcall_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&rcall, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		free(buf);
 		return;
@@ -121,18 +119,17 @@
 	rc = srv->srvs->ops->read_toc(srv, session, buf, size);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
-		free(buf);
-		return;
-	}
-
-	async_data_read_finalize(rcall_handle, buf, size);
+		async_answer_0(&rcall, ENOMEM);
+		async_answer_0(call, ENOMEM);
+		free(buf);
+		return;
+	}
+
+	async_data_read_finalize(&rcall, buf, size);
 
 	free(buf);
-	async_answer_0(chandle, EOK);
-}
-
-static void bd_sync_cache_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, EOK);
+}
+
+static void bd_sync_cache_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	aoff64_t ba;
@@ -144,14 +141,13 @@
 
 	if (srv->srvs->ops->sync_cache == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->sync_cache(srv, ba, cnt);
-	async_answer_0(chandle, rc);
-}
-
-static void bd_write_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void bd_write_blocks_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	aoff64_t ba;
@@ -166,10 +162,10 @@
 	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
 
 	if (srv->srvs->ops->write_blocks == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -177,9 +173,8 @@
 	rc = srv->srvs->ops->write_blocks(srv, ba, cnt, data, size);
 	free(data);
-	async_answer_0(chandle, rc);
-}
-
-static void bd_get_block_size_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void bd_get_block_size_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	errno_t rc;
@@ -187,14 +182,13 @@
 
 	if (srv->srvs->ops->get_block_size == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->get_block_size(srv, &block_size);
-	async_answer_1(chandle, rc, block_size);
-}
-
-static void bd_get_num_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_1(call, rc, block_size);
+}
+
+static void bd_get_num_blocks_srv(bd_srv_t *srv, ipc_call_t *call)
 {
 	errno_t rc;
@@ -202,10 +196,10 @@
 
 	if (srv->srvs->ops->get_num_blocks == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->get_num_blocks(srv, &num_blocks);
-	async_answer_2(chandle, rc, LOWER32(num_blocks), UPPER32(num_blocks));
+	async_answer_2(call, rc, LOWER32(num_blocks), UPPER32(num_blocks));
 }
 
@@ -228,5 +222,5 @@
 }
 
-errno_t bd_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, bd_srvs_t *srvs)
+errno_t bd_conn(ipc_call_t *icall, bd_srvs_t *srvs)
 {
 	bd_srv_t *srv;
@@ -234,5 +228,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	srv = bd_srv_create(srvs);
@@ -252,10 +246,10 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -263,23 +257,23 @@
 		switch (method) {
 		case BD_READ_BLOCKS:
-			bd_read_blocks_srv(srv, chandle, &call);
+			bd_read_blocks_srv(srv, &call);
 			break;
 		case BD_READ_TOC:
-			bd_read_toc_srv(srv, chandle, &call);
+			bd_read_toc_srv(srv, &call);
 			break;
 		case BD_SYNC_CACHE:
-			bd_sync_cache_srv(srv, chandle, &call);
+			bd_sync_cache_srv(srv, &call);
 			break;
 		case BD_WRITE_BLOCKS:
-			bd_write_blocks_srv(srv, chandle, &call);
+			bd_write_blocks_srv(srv, &call);
 			break;
 		case BD_GET_BLOCK_SIZE:
-			bd_get_block_size_srv(srv, chandle, &call);
+			bd_get_block_size_srv(srv, &call);
 			break;
 		case BD_GET_NUM_BLOCKS:
-			bd_get_num_blocks_srv(srv, chandle, &call);
+			bd_get_num_blocks_srv(srv, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/lib/c/generic/inet.c
===================================================================
--- uspace/lib/c/generic/inet.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/inet.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -36,5 +36,5 @@
 #include <stdlib.h>
 
-static void inet_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void inet_cb_conn(ipc_call_t *icall, void *arg);
 
 static async_sess_t *inet_sess = NULL;
@@ -176,5 +176,5 @@
 }
 
-static void inet_ev_recv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void inet_ev_recv(ipc_call_t *icall)
 {
 	inet_dgram_t dgram;
@@ -183,41 +183,41 @@
 	dgram.iplink = IPC_GET_ARG2(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(chandle, &dgram.src, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&call, &dgram.src, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &dgram.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &dgram.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -225,5 +225,5 @@
 	rc = async_data_write_accept(&dgram.data, false, 0, 0, 0, &dgram.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -231,12 +231,12 @@
 	rc = inet_ev_ops->recv(&dgram);
 	free(dgram.data);
-	async_answer_0(icall_handle, rc);
-}
-
-static void inet_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(icall, rc);
+}
+
+static void inet_cb_conn(ipc_call_t *icall, void *arg)
 {
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -247,8 +247,8 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case INET_EV_RECV:
-			inet_ev_recv(chandle, &call);
+			inet_ev_recv(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/inet/tcp.c
===================================================================
--- uspace/lib/c/generic/inet/tcp.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/inet/tcp.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,5 +41,5 @@
 #include <stdlib.h>
 
-static void tcp_cb_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void tcp_cb_conn(ipc_call_t *, void *);
 static errno_t tcp_conn_fibril(void *);
 
@@ -633,10 +633,9 @@
 /** Connection established event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void
-tcp_ev_connected(tcp_t *tcp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_connected(tcp_t *tcp, ipc_call_t *icall)
 {
 	tcp_conn_t *conn;
@@ -648,5 +647,5 @@
 	rc = tcp_conn_get(tcp, conn_id, &conn);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -657,16 +656,14 @@
 	fibril_mutex_unlock(&conn->lock);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Connection failed event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void
-tcp_ev_conn_failed(tcp_t *tcp, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_conn_failed(tcp_t *tcp, ipc_call_t *icall)
 {
 	tcp_conn_t *conn;
@@ -678,5 +675,5 @@
 	rc = tcp_conn_get(tcp, conn_id, &conn);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -687,14 +684,14 @@
 	fibril_mutex_unlock(&conn->lock);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Connection reset event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void tcp_ev_conn_reset(tcp_t *tcp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_conn_reset(tcp_t *tcp, ipc_call_t *icall)
 {
 	tcp_conn_t *conn;
@@ -706,5 +703,5 @@
 	rc = tcp_conn_get(tcp, conn_id, &conn);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -715,15 +712,14 @@
 	fibril_mutex_unlock(&conn->lock);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Data available event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void
-tcp_ev_data(tcp_t *tcp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_data(tcp_t *tcp, ipc_call_t *icall)
 {
 	tcp_conn_t *conn;
@@ -735,5 +731,5 @@
 	rc = tcp_conn_get(tcp, conn_id, &conn);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -745,27 +741,25 @@
 		conn->cb->data_avail(conn);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Urgent data event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void
-tcp_ev_urg_data(tcp_t *tcp, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	async_answer_0(icall_handle, ENOTSUP);
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_urg_data(tcp_t *tcp, ipc_call_t *icall)
+{
+	async_answer_0(icall, ENOTSUP);
 }
 
 /** New connection event.
  *
- * @param tcp           TCP client
- * @param icall_handle  Call handle
- * @param icall         Call data
- */
-static void
-tcp_ev_new_conn(tcp_t *tcp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param tcp   TCP client
+ * @param icall Call data
+ *
+ */
+static void tcp_ev_new_conn(tcp_t *tcp, ipc_call_t *icall)
 {
 	tcp_listener_t *lst;
@@ -782,5 +776,5 @@
 	rc = tcp_listener_get(tcp, lst_id, &lst);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -788,5 +782,5 @@
 	rc = tcp_conn_new(tcp, conn_id, lst->cb, lst->cb_arg, &conn);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -795,5 +789,5 @@
 		cinfo = calloc(1, sizeof(tcp_in_conn_t));
 		if (cinfo == NULL) {
-			async_answer_0(icall_handle, ENOMEM);
+			async_answer_0(icall, ENOMEM);
 			return;
 		}
@@ -804,5 +798,5 @@
 		fid = fibril_create(tcp_conn_fibril, cinfo);
 		if (fid == 0) {
-			async_answer_0(icall_handle, ENOMEM);
+			async_answer_0(icall, ENOMEM);
 		}
 
@@ -810,23 +804,22 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Callback connection handler.
  *
- * @param icall_handle  Connect call handle
- * @param icall         Connect call data
- * @param arg           Argument, TCP client
- */
-static void
-tcp_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+ * @param icall Connect call data
+ * @param arg   Argument, TCP client
+ *
+ */
+static void tcp_cb_conn(ipc_call_t *icall, void *arg)
 {
 	tcp_t *tcp = (tcp_t *)arg;
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -837,26 +830,27 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case TCP_EV_CONNECTED:
-			tcp_ev_connected(tcp, chandle, &call);
+			tcp_ev_connected(tcp, &call);
 			break;
 		case TCP_EV_CONN_FAILED:
-			tcp_ev_conn_failed(tcp, chandle, &call);
+			tcp_ev_conn_failed(tcp, &call);
 			break;
 		case TCP_EV_CONN_RESET:
-			tcp_ev_conn_reset(tcp, chandle, &call);
+			tcp_ev_conn_reset(tcp, &call);
 			break;
 		case TCP_EV_DATA:
-			tcp_ev_data(tcp, chandle, &call);
+			tcp_ev_data(tcp, &call);
 			break;
 		case TCP_EV_URG_DATA:
-			tcp_ev_urg_data(tcp, chandle, &call);
+			tcp_ev_urg_data(tcp, &call);
 			break;
 		case TCP_EV_NEW_CONN:
-			tcp_ev_new_conn(tcp, chandle, &call);
+			tcp_ev_new_conn(tcp, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
 	}
+
 out:
 	fibril_mutex_lock(&tcp->lock);
Index: uspace/lib/c/generic/inet/udp.c
===================================================================
--- uspace/lib/c/generic/inet/udp.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/inet/udp.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,5 +41,5 @@
 #include <stdlib.h>
 
-static void udp_cb_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void udp_cb_conn(ipc_call_t *, void *);
 
 /** Create callback connection from UDP service.
@@ -451,9 +451,9 @@
  * callback and discard it.
  *
- * @param udp UDP client
- * @param iid IPC message ID
+ * @param udp   UDP client
  * @param icall IPC message
- */
-static void udp_ev_data(udp_t *udp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+ *
+ */
+static void udp_ev_data(udp_t *udp, ipc_call_t *icall)
 {
 	udp_rmsg_t rmsg;
@@ -481,22 +481,22 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** UDP service callback connection.
  *
- * @param iid Connect message ID
  * @param icall Connect message
- * @param arg Argument, UDP client
- */
-static void udp_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+ * @param arg   Argument, UDP client
+ *
+ */
+static void udp_cb_conn(ipc_call_t *icall, void *arg)
 {
 	udp_t *udp = (udp_t *)arg;
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -507,11 +507,12 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case UDP_EV_DATA:
-			udp_ev_data(udp, chandle, &call);
+			udp_ev_data(udp, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
 	}
+
 out:
 	fibril_mutex_lock(&udp->lock);
Index: uspace/lib/c/generic/inetping.c
===================================================================
--- uspace/lib/c/generic/inetping.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/inetping.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -38,6 +38,6 @@
 #include <str.h>
 
-static void inetping_cb_conn(cap_call_handle_t, ipc_call_t *, void *);
-static void inetping_ev_recv(cap_call_handle_t, ipc_call_t *);
+static void inetping_cb_conn(ipc_call_t *, void *);
+static void inetping_ev_recv(ipc_call_t *);
 
 static async_sess_t *inetping_sess = NULL;
@@ -150,5 +150,5 @@
 }
 
-static void inetping_ev_recv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void inetping_ev_recv(ipc_call_t *icall)
 {
 	inetping_sdu_t sdu;
@@ -156,41 +156,41 @@
 	sdu.seq_no = IPC_GET_ARG1(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(sdu.src)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(chandle, &sdu.src, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&call, &sdu.src, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(sdu.dest)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &sdu.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &sdu.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -198,5 +198,5 @@
 	rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -204,12 +204,12 @@
 	rc = inetping_ev_ops->recv(&sdu);
 	free(sdu.data);
-	async_answer_0(icall_handle, rc);
-}
-
-static void inetping_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(icall, rc);
+}
+
+static void inetping_cb_conn(ipc_call_t *icall, void *arg)
 {
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -220,8 +220,8 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case INETPING_EV_RECV:
-			inetping_ev_recv(chandle, &call);
+			inetping_ev_recv(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/io/chardev_srv.c
===================================================================
--- uspace/lib/c/generic/io/chardev_srv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/io/chardev_srv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -43,6 +43,5 @@
 static chardev_srv_t *chardev_srv_create(chardev_srvs_t *);
 
-static void chardev_read_srv(chardev_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void chardev_read_srv(chardev_srv_t *srv, ipc_call_t *icall)
 {
 	void *buf;
@@ -50,8 +49,8 @@
 	size_t nread;
 	errno_t rc;
-	cap_call_handle_t rcall_handle;
 
-	if (!async_data_read_receive(&rcall_handle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	ipc_call_t call;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -59,12 +58,12 @@
 	buf = malloc(size);
 	if (buf == NULL) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
 	if (srv->srvs->ops->read == NULL) {
-		async_answer_0(rcall_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&call, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		free(buf);
 		return;
@@ -73,18 +72,17 @@
 	rc = srv->srvs->ops->read(srv, buf, size, &nread);
 	if (rc != EOK && nread == 0) {
-		async_answer_0(rcall_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(buf);
 		return;
 	}
 
-	async_data_read_finalize(rcall_handle, buf, nread);
+	async_data_read_finalize(&call, buf, nread);
 
 	free(buf);
-	async_answer_2(chandle, EOK, (sysarg_t) rc, nread);
+	async_answer_2(icall, EOK, (sysarg_t) rc, nread);
 }
 
-static void chardev_write_srv(chardev_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void chardev_write_srv(chardev_srv_t *srv, ipc_call_t *icall)
 {
 	void *data;
@@ -95,10 +93,10 @@
 	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
 
 	if (srv->srvs->ops->write == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
@@ -107,9 +105,9 @@
 	free(data);
 	if (rc != EOK && nwr == 0) {
-		async_answer_0(chandle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
 
-	async_answer_2(chandle, EOK, (sysarg_t) rc, nwr);
+	async_answer_2(icall, EOK, (sysarg_t) rc, nwr);
 }
 
@@ -132,5 +130,5 @@
 }
 
-errno_t chardev_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, chardev_srvs_t *srvs)
+errno_t chardev_conn(ipc_call_t *icall, chardev_srvs_t *srvs)
 {
 	chardev_srv_t *srv;
@@ -138,5 +136,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	srv = chardev_srv_create(srvs);
@@ -152,10 +150,10 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -163,14 +161,14 @@
 		switch (method) {
 		case CHARDEV_READ:
-			chardev_read_srv(srv, chandle, &call);
+			chardev_read_srv(srv, &call);
 			break;
 		case CHARDEV_WRITE:
-			chardev_write_srv(srv, chandle, &call);
+			chardev_write_srv(srv, &call);
 			break;
 		default:
 			if (srv->srvs->ops->def_handler != NULL)
-				srv->srvs->ops->def_handler(srv, chandle, &call);
+				srv->srvs->ops->def_handler(srv, &call);
 			else
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/io/con_srv.c
===================================================================
--- uspace/lib/c/generic/io/con_srv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/io/con_srv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,20 +42,20 @@
 #include <io/con_srv.h>
 
-static errno_t console_ev_encode(cons_event_t *event, ipc_call_t *call)
-{
-	IPC_SET_ARG1(*call, event->type);
+static errno_t console_ev_encode(cons_event_t *event, ipc_call_t *icall)
+{
+	IPC_SET_ARG1(*icall, event->type);
 
 	switch (event->type) {
 	case CEV_KEY:
-		IPC_SET_ARG2(*call, event->ev.key.type);
-		IPC_SET_ARG3(*call, event->ev.key.key);
-		IPC_SET_ARG4(*call, event->ev.key.mods);
-		IPC_SET_ARG5(*call, event->ev.key.c);
+		IPC_SET_ARG2(*icall, event->ev.key.type);
+		IPC_SET_ARG3(*icall, event->ev.key.key);
+		IPC_SET_ARG4(*icall, event->ev.key.mods);
+		IPC_SET_ARG5(*icall, event->ev.key.c);
 		break;
 	case CEV_POS:
-		IPC_SET_ARG2(*call, (event->ev.pos.pos_id << 16) | (event->ev.pos.type & 0xffff));
-		IPC_SET_ARG3(*call, event->ev.pos.btn_num);
-		IPC_SET_ARG4(*call, event->ev.pos.hpos);
-		IPC_SET_ARG5(*call, event->ev.pos.vpos);
+		IPC_SET_ARG2(*icall, (event->ev.pos.pos_id << 16) | (event->ev.pos.type & 0xffff));
+		IPC_SET_ARG3(*icall, event->ev.pos.btn_num);
+		IPC_SET_ARG4(*icall, event->ev.pos.hpos);
+		IPC_SET_ARG5(*icall, event->ev.pos.vpos);
 		break;
 	default:
@@ -66,14 +66,13 @@
 }
 
-static void con_read_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void con_read_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	void *buf;
 	size_t size;
 	errno_t rc;
-	cap_call_handle_t rcall_handle;
-
-	if (!async_data_read_receive(&rcall_handle, &size)) {
-		async_answer_0(chandle, EINVAL);
+
+	ipc_call_t call;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -81,12 +80,12 @@
 	buf = malloc(size);
 	if (buf == NULL) {
-		async_answer_0(rcall_handle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
 	if (srv->srvs->ops->read == NULL) {
-		async_answer_0(rcall_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&call, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		free(buf);
 		return;
@@ -96,18 +95,17 @@
 	rc = srv->srvs->ops->read(srv, buf, size, &nread);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(buf);
 		return;
 	}
 
-	async_data_read_finalize(rcall_handle, buf, nread);
+	async_data_read_finalize(&call, buf, nread);
 	free(buf);
 
-	async_answer_1(chandle, EOK, nread);
-}
-
-static void con_write_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_1(icall, EOK, nread);
+}
+
+static void con_write_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	void *data;
@@ -117,10 +115,10 @@
 	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
 
 	if (srv->srvs->ops->write == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
@@ -130,51 +128,47 @@
 	free(data);
 
-	async_answer_1(chandle, rc, nwritten);
-}
-
-static void con_sync_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_1(icall, rc, nwritten);
+}
+
+static void con_sync_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	if (srv->srvs->ops->sync == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->sync(srv);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_clear_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_clear_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	if (srv->srvs->ops->clear == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->clear(srv);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_set_pos_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_set_pos_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	sysarg_t col;
 	sysarg_t row;
 
-	col = IPC_GET_ARG1(*call);
-	row = IPC_GET_ARG2(*call);
+	col = IPC_GET_ARG1(*icall);
+	row = IPC_GET_ARG2(*icall);
 
 	if (srv->srvs->ops->set_pos == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->set_pos(srv, col, row);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_get_pos_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_get_pos_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	errno_t rc;
@@ -183,14 +177,13 @@
 
 	if (srv->srvs->ops->get_pos == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->get_pos(srv, &col, &row);
-	async_answer_2(chandle, rc, col, row);
-}
-
-static void con_get_size_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_2(icall, rc, col, row);
+}
+
+static void con_get_size_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	errno_t rc;
@@ -199,14 +192,13 @@
 
 	if (srv->srvs->ops->get_size == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->get_size(srv, &cols, &rows);
-	async_answer_2(chandle, rc, cols, rows);
-}
-
-static void con_get_color_cap_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_2(icall, rc, cols, rows);
+}
+
+static void con_get_color_cap_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	errno_t rc;
@@ -214,30 +206,28 @@
 
 	if (srv->srvs->ops->get_color_cap == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	rc = srv->srvs->ops->get_color_cap(srv, &ccap);
-	async_answer_1(chandle, rc, (sysarg_t)ccap);
-}
-
-static void con_set_style_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_1(icall, rc, (sysarg_t)ccap);
+}
+
+static void con_set_style_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	console_style_t style;
 
-	style = IPC_GET_ARG1(*call);
+	style = IPC_GET_ARG1(*icall);
 
 	if (srv->srvs->ops->set_style == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->set_style(srv, style);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_set_color_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_set_color_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	console_color_t bgcolor;
@@ -245,53 +235,50 @@
 	console_color_attr_t flags;
 
-	bgcolor = IPC_GET_ARG1(*call);
-	fgcolor = IPC_GET_ARG2(*call);
-	flags = IPC_GET_ARG3(*call);
+	bgcolor = IPC_GET_ARG1(*icall);
+	fgcolor = IPC_GET_ARG2(*icall);
+	flags = IPC_GET_ARG3(*icall);
 
 	if (srv->srvs->ops->set_color == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->set_color(srv, bgcolor, fgcolor, flags);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_set_rgb_color_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_set_rgb_color_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	pixel_t bgcolor;
 	pixel_t fgcolor;
 
-	bgcolor = IPC_GET_ARG1(*call);
-	fgcolor = IPC_GET_ARG2(*call);
+	bgcolor = IPC_GET_ARG1(*icall);
+	fgcolor = IPC_GET_ARG2(*icall);
 
 	if (srv->srvs->ops->set_rgb_color == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->set_rgb_color(srv, bgcolor, fgcolor);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_set_cursor_visibility_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_set_cursor_visibility_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	bool show;
 
-	show = IPC_GET_ARG1(*call);
+	show = IPC_GET_ARG1(*icall);
 
 	if (srv->srvs->ops->set_cursor_visibility == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
 	srv->srvs->ops->set_cursor_visibility(srv, show);
-	async_answer_0(chandle, EOK);
-}
-
-static void con_get_event_srv(con_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, EOK);
+}
+
+static void con_get_event_srv(con_srv_t *srv, ipc_call_t *icall)
 {
 	errno_t rc;
@@ -300,5 +287,5 @@
 
 	if (srv->srvs->ops->get_event == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
@@ -306,5 +293,5 @@
 	rc = srv->srvs->ops->get_event(srv, &event);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -312,9 +299,9 @@
 	rc = console_ev_encode(&event, &result);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		return;
-	}
-
-	async_answer_5(chandle, rc, IPC_GET_ARG1(result), IPC_GET_ARG2(result),
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_5(icall, rc, IPC_GET_ARG1(result), IPC_GET_ARG2(result),
 	    IPC_GET_ARG3(result), IPC_GET_ARG4(result), IPC_GET_ARG5(result));
 }
@@ -340,5 +327,5 @@
 }
 
-errno_t con_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, con_srvs_t *srvs)
+errno_t con_conn(ipc_call_t *icall, con_srvs_t *srvs)
 {
 	con_srv_t *srv;
@@ -346,5 +333,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	srv = con_srv_create(srvs);
@@ -360,19 +347,19 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = 0;
-
-		while (chandle == 0) {
+		bool received = false;
+
+		while (!received) {
 			/* XXX Need to be able to abort immediately */
-			chandle = async_get_call_timeout(&call,
+			received = async_get_call_timeout(&call,
 			    srvs->abort_timeout);
 
 			if (srv->srvs->aborted) {
-				if (chandle != 0)
-					async_answer_0(chandle, EINTR);
+				if (received)
+					async_answer_0(&call, EINTR);
 				break;
 			}
 		}
 
-		if (chandle == 0)
+		if (!received)
 			break;
 
@@ -381,5 +368,5 @@
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -387,44 +374,44 @@
 		switch (method) {
 		case VFS_OUT_READ:
-			con_read_srv(srv, chandle, &call);
+			con_read_srv(srv, &call);
 			break;
 		case VFS_OUT_WRITE:
-			con_write_srv(srv, chandle, &call);
+			con_write_srv(srv, &call);
 			break;
 		case VFS_OUT_SYNC:
-			con_sync_srv(srv, chandle, &call);
+			con_sync_srv(srv, &call);
 			break;
 		case CONSOLE_CLEAR:
-			con_clear_srv(srv, chandle, &call);
+			con_clear_srv(srv, &call);
 			break;
 		case CONSOLE_SET_POS:
-			con_set_pos_srv(srv, chandle, &call);
+			con_set_pos_srv(srv, &call);
 			break;
 		case CONSOLE_GET_POS:
-			con_get_pos_srv(srv, chandle, &call);
+			con_get_pos_srv(srv, &call);
 			break;
 		case CONSOLE_GET_SIZE:
-			con_get_size_srv(srv, chandle, &call);
+			con_get_size_srv(srv, &call);
 			break;
 		case CONSOLE_GET_COLOR_CAP:
-			con_get_color_cap_srv(srv, chandle, &call);
+			con_get_color_cap_srv(srv, &call);
 			break;
 		case CONSOLE_SET_STYLE:
-			con_set_style_srv(srv, chandle, &call);
+			con_set_style_srv(srv, &call);
 			break;
 		case CONSOLE_SET_COLOR:
-			con_set_color_srv(srv, chandle, &call);
+			con_set_color_srv(srv, &call);
 			break;
 		case CONSOLE_SET_RGB_COLOR:
-			con_set_rgb_color_srv(srv, chandle, &call);
+			con_set_rgb_color_srv(srv, &call);
 			break;
 		case CONSOLE_SET_CURSOR_VISIBILITY:
-			con_set_cursor_visibility_srv(srv, chandle, &call);
+			con_set_cursor_visibility_srv(srv, &call);
 			break;
 		case CONSOLE_GET_EVENT:
-			con_get_event_srv(srv, chandle, &call);
+			con_get_event_srv(srv, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/io/input.c
===================================================================
--- uspace/lib/c/generic/io/input.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/io/input.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -43,5 +43,5 @@
 #include <stdlib.h>
 
-static void input_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void input_cb_conn(ipc_call_t *icall, void *arg);
 
 errno_t input_open(async_sess_t *sess, input_ev_ops_t *ev_ops,
@@ -92,20 +92,17 @@
 }
 
-static void input_ev_active(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void input_ev_active(input_t *input, ipc_call_t *call)
 {
 	errno_t rc = input->ev_ops->active(input);
-	async_answer_0(chandle, rc);
-}
-
-static void input_ev_deactive(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void input_ev_deactive(input_t *input, ipc_call_t *call)
 {
 	errno_t rc = input->ev_ops->deactive(input);
-	async_answer_0(chandle, rc);
-}
-
-static void input_ev_key(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void input_ev_key(input_t *input, ipc_call_t *call)
 {
 	kbd_event_type_t type;
@@ -121,9 +118,8 @@
 
 	rc = input->ev_ops->key(input, type, key, mods, c);
-	async_answer_0(chandle, rc);
-}
-
-static void input_ev_move(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void input_ev_move(input_t *input, ipc_call_t *call)
 {
 	int dx;
@@ -135,9 +131,8 @@
 
 	rc = input->ev_ops->move(input, dx, dy);
-	async_answer_0(chandle, rc);
-}
-
-static void input_ev_abs_move(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void input_ev_abs_move(input_t *input, ipc_call_t *call)
 {
 	unsigned x;
@@ -153,9 +148,8 @@
 
 	rc = input->ev_ops->abs_move(input, x, y, max_x, max_y);
-	async_answer_0(chandle, rc);
-}
-
-static void input_ev_button(input_t *input, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void input_ev_button(input_t *input, ipc_call_t *call)
 {
 	int bnum;
@@ -167,14 +161,14 @@
 
 	rc = input->ev_ops->button(input, bnum, press);
-	async_answer_0(chandle, rc);
-}
-
-static void input_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	input_t *input = (input_t *)arg;
+	async_answer_0(call, rc);
+}
+
+static void input_cb_conn(ipc_call_t *icall, void *arg)
+{
+	input_t *input = (input_t *) arg;
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -185,23 +179,23 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case INPUT_EVENT_ACTIVE:
-			input_ev_active(input, chandle, &call);
+			input_ev_active(input, &call);
 			break;
 		case INPUT_EVENT_DEACTIVE:
-			input_ev_deactive(input, chandle, &call);
+			input_ev_deactive(input, &call);
 			break;
 		case INPUT_EVENT_KEY:
-			input_ev_key(input, chandle, &call);
+			input_ev_key(input, &call);
 			break;
 		case INPUT_EVENT_MOVE:
-			input_ev_move(input, chandle, &call);
+			input_ev_move(input, &call);
 			break;
 		case INPUT_EVENT_ABS_MOVE:
-			input_ev_abs_move(input, chandle, &call);
+			input_ev_abs_move(input, &call);
 			break;
 		case INPUT_EVENT_BUTTON:
-			input_ev_button(input, chandle, &call);
+			input_ev_button(input, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/iplink.c
===================================================================
--- uspace/lib/c/generic/iplink.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/iplink.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -45,5 +45,5 @@
 #include <stdlib.h>
 
-static void iplink_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void iplink_cb_conn(ipc_call_t *icall, void *arg);
 
 errno_t iplink_open(async_sess_t *sess, iplink_ev_ops_t *ev_ops, void *arg,
@@ -197,5 +197,4 @@
 }
 
-
 errno_t iplink_addr_add(iplink_t *iplink, inet_addr_t *addr)
 {
@@ -245,6 +244,5 @@
 }
 
-static void iplink_ev_recv(iplink_t *iplink, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void iplink_ev_recv(iplink_t *iplink, ipc_call_t *icall)
 {
 	iplink_recv_sdu_t sdu;
@@ -255,5 +253,5 @@
 	    &sdu.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -261,17 +259,16 @@
 	rc = iplink->ev_ops->recv(iplink, &sdu, ver);
 	free(sdu.data);
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_ev_change_addr(iplink_t *iplink, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void iplink_ev_change_addr(iplink_t *iplink, ipc_call_t *icall)
 {
 	addr48_t *addr;
 	size_t size;
 
-	errno_t rc = async_data_write_accept((void **)&addr, false,
+	errno_t rc = async_data_write_accept((void **) &addr, false,
 	    sizeof(addr48_t), sizeof(addr48_t), 0, &size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -279,8 +276,8 @@
 	rc = iplink->ev_ops->change_addr(iplink, *addr);
 	free(addr);
-	async_answer_0(icall_handle, EOK);
-}
-
-static void iplink_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(icall, EOK);
+}
+
+static void iplink_cb_conn(ipc_call_t *icall, void *arg)
 {
 	iplink_t *iplink = (iplink_t *) arg;
@@ -288,5 +285,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -297,11 +294,11 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case IPLINK_EV_RECV:
-			iplink_ev_recv(iplink, chandle, &call);
+			iplink_ev_recv(iplink, &call);
 			break;
 		case IPLINK_EV_CHANGE_ADDR:
-			iplink_ev_change_addr(iplink, chandle, &call);
+			iplink_ev_change_addr(iplink, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/iplink_srv.c
===================================================================
--- uspace/lib/c/generic/iplink_srv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/iplink_srv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,127 +42,121 @@
 #include <inet/iplink_srv.h>
 
-static void iplink_get_mtu_srv(iplink_srv_t *srv, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void iplink_get_mtu_srv(iplink_srv_t *srv, ipc_call_t *call)
 {
 	size_t mtu;
 	errno_t rc = srv->ops->get_mtu(srv, &mtu);
-	async_answer_1(chandle, rc, mtu);
-}
-
-static void iplink_get_mac48_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+	async_answer_1(call, rc, mtu);
+}
+
+static void iplink_get_mac48_srv(iplink_srv_t *srv, ipc_call_t *icall)
 {
 	addr48_t mac;
 	errno_t rc = srv->ops->get_mac48(srv, &mac);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(addr48_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &mac, size);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &mac, size);
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
-
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_set_mac48_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+		async_answer_0(&call, rc);
+
+	async_answer_0(icall, rc);
+}
+
+static void iplink_set_mac48_srv(iplink_srv_t *srv, ipc_call_t *icall)
 {
 	errno_t rc;
 	size_t size;
 	addr48_t mac;
-	cap_call_handle_t chandle;
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+
+	ipc_call_t call;
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 	}
 
 	rc = srv->ops->set_mac48(srv, &mac);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &mac, sizeof(addr48_t));
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &mac, sizeof(addr48_t));
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
-
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_addr_add_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, rc);
+
+	async_answer_0(icall, rc);
+}
+
+static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_call_t *icall)
+{
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_addr_t addr;
-	errno_t rc = async_data_write_finalize(chandle, &addr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+	errno_t rc = async_data_write_finalize(&call, &addr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 	}
 
 	rc = srv->ops->addr_add(srv, &addr);
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_addr_remove_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	async_answer_0(icall, rc);
+}
+
+static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_call_t *icall)
+{
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_addr_t addr;
-	errno_t rc = async_data_write_finalize(chandle, &addr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+	errno_t rc = async_data_write_finalize(&call, &addr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 	}
 
 	rc = srv->ops->addr_remove(srv, &addr);
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_send_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void iplink_send_srv(iplink_srv_t *srv, ipc_call_t *icall)
 {
 	iplink_sdu_t sdu;
@@ -174,5 +168,5 @@
 	    &sdu.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -180,30 +174,29 @@
 	rc = srv->ops->send(srv, &sdu);
 	free(sdu.data);
-	async_answer_0(icall_handle, rc);
-}
-
-static void iplink_send6_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void iplink_send6_srv(iplink_srv_t *srv, ipc_call_t *icall)
 {
 	iplink_sdu6_t sdu;
 
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(addr48_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(chandle, &sdu.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&call, &sdu.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 	}
 
@@ -211,5 +204,5 @@
 	    &sdu.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -217,5 +210,5 @@
 	rc = srv->ops->send6(srv, &sdu);
 	free(sdu.data);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -229,5 +222,5 @@
 }
 
-errno_t iplink_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+errno_t iplink_conn(ipc_call_t *icall, void *arg)
 {
 	iplink_srv_t *srv = (iplink_srv_t *) arg;
@@ -237,5 +230,5 @@
 	if (srv->connected) {
 		fibril_mutex_unlock(&srv->lock);
-		async_answer_0(icall_handle, EBUSY);
+		async_answer_0(icall, EBUSY);
 		return EBUSY;
 	}
@@ -245,5 +238,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
@@ -259,5 +252,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
@@ -267,5 +260,5 @@
 			srv->connected = false;
 			fibril_mutex_unlock(&srv->lock);
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -273,26 +266,26 @@
 		switch (method) {
 		case IPLINK_GET_MTU:
-			iplink_get_mtu_srv(srv, chandle, &call);
+			iplink_get_mtu_srv(srv, &call);
 			break;
 		case IPLINK_GET_MAC48:
-			iplink_get_mac48_srv(srv, chandle, &call);
+			iplink_get_mac48_srv(srv, &call);
 			break;
 		case IPLINK_SET_MAC48:
-			iplink_set_mac48_srv(srv, chandle, &call);
+			iplink_set_mac48_srv(srv, &call);
 			break;
 		case IPLINK_SEND:
-			iplink_send_srv(srv, chandle, &call);
+			iplink_send_srv(srv, &call);
 			break;
 		case IPLINK_SEND6:
-			iplink_send6_srv(srv, chandle, &call);
+			iplink_send6_srv(srv, &call);
 			break;
 		case IPLINK_ADDR_ADD:
-			iplink_addr_add_srv(srv, chandle, &call);
+			iplink_addr_add_srv(srv, &call);
 			break;
 		case IPLINK_ADDR_REMOVE:
-			iplink_addr_remove_srv(srv, chandle, &call);
+			iplink_addr_remove_srv(srv, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/lib/c/generic/loc.c
===================================================================
--- uspace/lib/c/generic/loc.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/loc.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -55,9 +55,9 @@
 static async_sess_t *loc_consumer_sess = NULL;
 
-static void loc_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void loc_cb_conn(ipc_call_t *icall, void *arg)
 {
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -72,5 +72,5 @@
 			fibril_mutex_unlock(&loc_callback_mutex);
 
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 
 			if (cb_fun != NULL)
@@ -79,5 +79,5 @@
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -802,7 +802,7 @@
 errno_t vfs_receive_handle(bool high, int *handle)
 {
-	cap_call_handle_t chandle;
-	if (!async_state_change_receive(&chandle, NULL, NULL, NULL)) {
-		async_answer_0(chandle, EINVAL);
+	ipc_call_t call;
+	if (!async_state_change_receive(&call)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -810,5 +810,5 @@
 	async_exch_t *vfs_exch = vfs_exchange_begin();
 
-	async_state_change_finalize(chandle, vfs_exch);
+	async_state_change_finalize(&call, vfs_exch);
 
 	sysarg_t ret;
Index: uspace/lib/c/include/async.h
===================================================================
--- uspace/lib/c/include/async.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/include/async.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -61,12 +61,10 @@
 /** Port connection handler
  *
- * @param chandle  Handle of the incoming call or CAP_NIL if connection
- *                 initiated from inside using async_create_callback_port()
- * @param call     Incoming call or 0 if connection initiated from inside
- *                 using async_create_callback_port()
- * @param arg      Local argument.
- *
- */
-typedef void (*async_port_handler_t)(cap_call_handle_t, ipc_call_t *, void *);
+ * @param call Incoming call or NULL if connection initiated from inside
+ *             using async_create_callback_port()
+ * @param arg  Local argument.
+ *
+ */
+typedef void (*async_port_handler_t)(ipc_call_t *, void *);
 
 /** Notification handler */
@@ -115,5 +113,5 @@
 	async_get_call_timeout(data, 0)
 
-extern cap_call_handle_t async_get_call_timeout(ipc_call_t *, suseconds_t);
+extern bool async_get_call_timeout(ipc_call_t *, suseconds_t);
 
 /*
@@ -194,12 +192,12 @@
  */
 
-extern errno_t async_answer_0(cap_call_handle_t, errno_t);
-extern errno_t async_answer_1(cap_call_handle_t, errno_t, sysarg_t);
-extern errno_t async_answer_2(cap_call_handle_t, errno_t, sysarg_t, sysarg_t);
-extern errno_t async_answer_3(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
+extern errno_t async_answer_0(ipc_call_t *, errno_t);
+extern errno_t async_answer_1(ipc_call_t *, errno_t, sysarg_t);
+extern errno_t async_answer_2(ipc_call_t *, errno_t, sysarg_t, sysarg_t);
+extern errno_t async_answer_3(ipc_call_t *, errno_t, sysarg_t, sysarg_t,
     sysarg_t);
-extern errno_t async_answer_4(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
+extern errno_t async_answer_4(ipc_call_t *, errno_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t);
-extern errno_t async_answer_5(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
+extern errno_t async_answer_5(ipc_call_t *, errno_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t);
 
@@ -208,7 +206,7 @@
  */
 
-extern errno_t async_forward_fast(cap_call_handle_t, async_exch_t *, sysarg_t,
+extern errno_t async_forward_fast(ipc_call_t *, async_exch_t *, sysarg_t,
     sysarg_t, sysarg_t, unsigned int);
-extern errno_t async_forward_slow(cap_call_handle_t, async_exch_t *, sysarg_t,
+extern errno_t async_forward_slow(ipc_call_t *, async_exch_t *, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
 
@@ -380,11 +378,10 @@
 extern errno_t async_share_in_start(async_exch_t *, size_t, sysarg_t,
     unsigned int *, void **);
-extern bool async_share_in_receive(cap_call_handle_t *, size_t *);
-extern errno_t async_share_in_finalize(cap_call_handle_t, void *, unsigned int);
+extern bool async_share_in_receive(ipc_call_t *, size_t *);
+extern errno_t async_share_in_finalize(ipc_call_t *, void *, unsigned int);
 
 extern errno_t async_share_out_start(async_exch_t *, void *, unsigned int);
-extern bool async_share_out_receive(cap_call_handle_t *, size_t *,
-    unsigned int *);
-extern errno_t async_share_out_finalize(cap_call_handle_t, void **);
+extern bool async_share_out_receive(ipc_call_t *, size_t *, unsigned int *);
+extern errno_t async_share_out_finalize(ipc_call_t *, void **);
 
 /*
@@ -420,9 +417,6 @@
 extern aid_t async_data_read(async_exch_t *, void *, size_t, ipc_call_t *);
 extern errno_t async_data_read_start(async_exch_t *, void *, size_t);
-extern bool async_data_read_receive(cap_call_handle_t *, size_t *);
-extern bool async_data_read_receive_call(cap_call_handle_t *, ipc_call_t *,
-    size_t *);
-extern errno_t async_data_read_finalize(cap_call_handle_t, const void *,
-    size_t);
+extern bool async_data_read_receive(ipc_call_t *, size_t *);
+extern errno_t async_data_read_finalize(ipc_call_t *, const void *, size_t);
 
 extern errno_t async_data_read_forward_fast(async_exch_t *, sysarg_t, sysarg_t,
@@ -461,8 +455,6 @@
 
 extern errno_t async_data_write_start(async_exch_t *, const void *, size_t);
-extern bool async_data_write_receive(cap_call_handle_t *, size_t *);
-extern bool async_data_write_receive_call(cap_call_handle_t *, ipc_call_t *,
-    size_t *);
-extern errno_t async_data_write_finalize(cap_call_handle_t, void *, size_t);
+extern bool async_data_write_receive(ipc_call_t *, size_t *);
+extern errno_t async_data_write_finalize(ipc_call_t *, void *, size_t);
 
 extern errno_t async_data_write_accept(void **, const bool, const size_t,
@@ -478,7 +470,6 @@
 extern errno_t async_state_change_start(async_exch_t *, sysarg_t, sysarg_t,
     sysarg_t, async_exch_t *);
-extern bool async_state_change_receive(cap_call_handle_t *, sysarg_t *,
-    sysarg_t *, sysarg_t *);
-extern errno_t async_state_change_finalize(cap_call_handle_t, async_exch_t *);
+extern bool async_state_change_receive(ipc_call_t *);
+extern errno_t async_state_change_finalize(ipc_call_t *, async_exch_t *);
 
 extern void *async_remote_state_acquire(async_sess_t *);
Index: uspace/lib/c/include/bd_srv.h
===================================================================
--- uspace/lib/c/include/bd_srv.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/include/bd_srv.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -70,5 +70,5 @@
 extern void bd_srvs_init(bd_srvs_t *);
 
-extern errno_t bd_conn(cap_call_handle_t, ipc_call_t *, bd_srvs_t *);
+extern errno_t bd_conn(ipc_call_t *, bd_srvs_t *);
 
 #endif
Index: uspace/lib/c/include/inet/iplink_srv.h
===================================================================
--- uspace/lib/c/include/inet/iplink_srv.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/include/inet/iplink_srv.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -66,5 +66,5 @@
 extern void iplink_srv_init(iplink_srv_t *);
 
-extern errno_t iplink_conn(cap_call_handle_t, ipc_call_t *, void *);
+extern errno_t iplink_conn(ipc_call_t *, void *);
 extern errno_t iplink_ev_recv(iplink_srv_t *, iplink_recv_sdu_t *, ip_ver_t);
 extern errno_t iplink_ev_change_addr(iplink_srv_t *, addr48_t *);
Index: uspace/lib/c/include/io/chardev_srv.h
===================================================================
--- uspace/lib/c/include/io/chardev_srv.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/include/io/chardev_srv.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -61,10 +61,10 @@
 	errno_t (*read)(chardev_srv_t *, void *, size_t, size_t *);
 	errno_t (*write)(chardev_srv_t *, const void *, size_t, size_t *);
-	void (*def_handler)(chardev_srv_t *, cap_call_handle_t, ipc_call_t *);
+	void (*def_handler)(chardev_srv_t *, ipc_call_t *);
 };
 
 extern void chardev_srvs_init(chardev_srvs_t *);
 
-extern errno_t chardev_conn(cap_call_handle_t, ipc_call_t *, chardev_srvs_t *);
+extern errno_t chardev_conn(ipc_call_t *, chardev_srvs_t *);
 
 #endif
Index: uspace/lib/c/include/io/con_srv.h
===================================================================
--- uspace/lib/c/include/io/con_srv.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/c/include/io/con_srv.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -87,5 +87,5 @@
 extern void con_srvs_init(con_srvs_t *);
 
-extern errno_t con_conn(cap_call_handle_t, ipc_call_t *, con_srvs_t *);
+extern errno_t con_conn(ipc_call_t *, con_srvs_t *);
 
 #endif
Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/driver.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -118,5 +118,5 @@
 }
 
-static void driver_dev_add(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void driver_dev_add(ipc_call_t *icall)
 {
 	devman_handle_t dev_handle = IPC_GET_ARG1(*icall);
@@ -126,5 +126,5 @@
 	errno_t rc = async_data_write_accept((void **) &dev_name, true, 0, 0, 0, 0);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -134,5 +134,5 @@
 	if (stopping) {
 		fibril_rwlock_read_unlock(&stopping_lock);
-		async_answer_0(icall_handle, EIO);
+		async_answer_0(icall, EIO);
 		return;
 	}
@@ -142,5 +142,5 @@
 		fibril_rwlock_read_unlock(&stopping_lock);
 		free(dev_name);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -162,5 +162,5 @@
 		fibril_rwlock_read_unlock(&stopping_lock);
 		dev_del_ref(dev);
-		async_answer_0(icall_handle, res);
+		async_answer_0(icall, res);
 		return;
 	}
@@ -171,8 +171,8 @@
 	fibril_rwlock_read_unlock(&stopping_lock);
 
-	async_answer_0(icall_handle, res);
-}
-
-static void driver_dev_remove(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, res);
+}
+
+static void driver_dev_remove(ipc_call_t *icall)
 {
 	devman_handle_t devh = IPC_GET_ARG1(*icall);
@@ -185,5 +185,5 @@
 
 	if (dev == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -204,8 +204,8 @@
 
 	dev_del_ref(dev);
-	async_answer_0(icall_handle, rc);
-}
-
-static void driver_dev_gone(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void driver_dev_gone(ipc_call_t *icall)
 {
 	devman_handle_t devh = IPC_GET_ARG1(*icall);
@@ -218,5 +218,5 @@
 
 	if (dev == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -237,8 +237,8 @@
 
 	dev_del_ref(dev);
-	async_answer_0(icall_handle, rc);
-}
-
-static void driver_fun_online(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void driver_fun_online(ipc_call_t *icall)
 {
 	devman_handle_t funh = IPC_GET_ARG1(*icall);
@@ -258,5 +258,5 @@
 
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -272,8 +272,8 @@
 	fun_del_ref(fun);
 
-	async_answer_0(icall_handle, rc);
-}
-
-static void driver_fun_offline(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void driver_fun_offline(ipc_call_t *icall)
 {
 	devman_handle_t funh = IPC_GET_ARG1(*icall);
@@ -293,5 +293,5 @@
 
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -305,8 +305,8 @@
 		rc = ENOTSUP;
 
-	async_answer_0(icall_handle, rc);
-}
-
-static void driver_stop(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void driver_stop(ipc_call_t *icall)
 {
 	/* Prevent new devices from being added */
@@ -321,5 +321,5 @@
 		stopping = false;
 		fibril_rwlock_write_unlock(&stopping_lock);
-		async_answer_0(icall_handle, EBUSY);
+		async_answer_0(icall, EBUSY);
 		return;
 	}
@@ -333,17 +333,16 @@
 
 	/* Reply with success and terminate */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 	exit(0);
 }
 
-static void driver_connection_devman(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void driver_connection_devman(ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -352,23 +351,23 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case DRIVER_DEV_ADD:
-			driver_dev_add(chandle, &call);
+			driver_dev_add(&call);
 			break;
 		case DRIVER_DEV_REMOVE:
-			driver_dev_remove(chandle, &call);
+			driver_dev_remove(&call);
 			break;
 		case DRIVER_DEV_GONE:
-			driver_dev_gone(chandle, &call);
+			driver_dev_gone(&call);
 			break;
 		case DRIVER_FUN_ONLINE:
-			driver_fun_online(chandle, &call);
+			driver_fun_online(&call);
 			break;
 		case DRIVER_FUN_OFFLINE:
-			driver_fun_offline(chandle, &call);
+			driver_fun_offline(&call);
 			break;
 		case DRIVER_STOP:
-			driver_stop(chandle, &call);
+			driver_stop(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
@@ -381,5 +380,5 @@
  *
  */
-static void driver_connection_gen(cap_call_handle_t icall_handle, ipc_call_t *icall, bool drv)
+static void driver_connection_gen(ipc_call_t *icall, bool drv)
 {
 	/*
@@ -398,5 +397,5 @@
 		printf("%s: driver_connection_gen error - no function with handle"
 		    " %" PRIun " was found.\n", driver->name, handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -404,5 +403,5 @@
 	if (fun->conn_handler != NULL) {
 		/* Driver has a custom connection handler. */
-		(*fun->conn_handler)(icall_handle, icall, (void *)fun);
+		(*fun->conn_handler)(icall, (void *)fun);
 		fun_del_ref(fun);
 		return;
@@ -419,5 +418,5 @@
 		ret = (*fun->ops->open)(fun);
 
-	async_answer_0(icall_handle, ret);
+	async_answer_0(icall, ret);
 	if (ret != EOK) {
 		fun_del_ref(fun);
@@ -426,7 +425,7 @@
 
 	while (true) {
-		cap_call_handle_t chandle;
 		ipc_call_t call;
-		chandle = async_get_call(&call);
+		async_get_call(&call);
+
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
@@ -435,5 +434,5 @@
 			if (fun->ops != NULL && fun->ops->close != NULL)
 				(*fun->ops->close)(fun);
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			fun_del_ref(fun);
 			return;
@@ -448,5 +447,5 @@
 			    function_get_default_handler(fun);
 			if (default_handler != NULL) {
-				(*default_handler)(fun, chandle, &call);
+				(*default_handler)(fun, &call);
 				continue;
 			}
@@ -459,5 +458,5 @@
 			    "invalid interface id %d.",
 			    driver->name, iface_idx);
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			continue;
 		}
@@ -471,5 +470,5 @@
 			printf("Function with handle %" PRIun " has no interface "
 			    "with id %d.\n", handle, iface_idx);
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			continue;
 		}
@@ -490,5 +489,5 @@
 			printf("%s: driver_connection_gen error - "
 			    "invalid interface method.", driver->name);
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			continue;
 		}
@@ -500,18 +499,16 @@
 		 * associated with the function by its driver.
 		 */
-		(*iface_method_ptr)(fun, ops, chandle, &call);
-	}
-}
-
-static void driver_connection_driver(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
-{
-	driver_connection_gen(icall_handle, icall, true);
-}
-
-static void driver_connection_client(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
-{
-	driver_connection_gen(icall_handle, icall, false);
+		(*iface_method_ptr)(fun, ops, &call);
+	}
+}
+
+static void driver_connection_driver(ipc_call_t *icall, void *arg)
+{
+	driver_connection_gen(icall, true);
+}
+
+static void driver_connection_client(ipc_call_t *icall, void *arg)
+{
+	driver_connection_gen(icall, false);
 }
 
Index: uspace/lib/drv/generic/remote_ahci.c
===================================================================
--- uspace/lib/drv/generic/remote_ahci.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_ahci.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -182,14 +182,9 @@
 }
 
-static void remote_ahci_get_sata_device_name(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_ahci_get_num_blocks(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_ahci_get_block_size(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_ahci_read_blocks(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_ahci_write_blocks(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_ahci_get_sata_device_name(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_ahci_get_num_blocks(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_ahci_get_block_size(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_ahci_read_blocks(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_ahci_write_blocks(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote AHCI interface operations. */
@@ -210,10 +205,10 @@
 
 void remote_ahci_get_sata_device_name(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
 
 	if (ahci_iface->get_sata_device_name == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -224,5 +219,5 @@
 	char *sata_dev_name = malloc(sata_dev_name_length);
 	if (sata_dev_name == NULL) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -231,22 +226,22 @@
 	    sata_dev_name_length, sata_dev_name);
 
+	ipc_call_t data;
 	size_t real_size;
-	cap_call_handle_t call_handle;
-	if ((async_data_read_receive(&call_handle, &real_size)) &&
+	if ((async_data_read_receive(&data, &real_size)) &&
 	    (real_size == sata_dev_name_length))
-		async_data_read_finalize(call_handle, sata_dev_name,
+		async_data_read_finalize(&data, sata_dev_name,
 		    sata_dev_name_length);
 
 	free(sata_dev_name);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_ahci_get_num_blocks(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
 
 	if (ahci_iface->get_num_blocks == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -256,16 +251,16 @@
 
 	if (ret != EOK)
-		async_answer_0(chandle, ret);
+		async_answer_0(call, ret);
 	else
-		async_answer_2(chandle, EOK, HI(blocks), LO(blocks));
+		async_answer_2(call, EOK, HI(blocks), LO(blocks));
 }
 
 static void remote_ahci_get_block_size(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
 
 	if (ahci_iface->get_block_size == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -275,27 +270,25 @@
 
 	if (ret != EOK)
-		async_answer_0(chandle, ret);
+		async_answer_0(call, ret);
 	else
-		async_answer_1(chandle, EOK, blocks);
-}
-
-void remote_ahci_read_blocks(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_1(call, EOK, blocks);
+}
+
+void remote_ahci_read_blocks(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
 
 	if (ahci_iface->read_blocks == NULL) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
-
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t maxblock_size;
 	unsigned int flags;
-
-	cap_call_handle_t call_handle;
-	async_share_out_receive(&call_handle, &maxblock_size, &flags);
+	async_share_out_receive(&data, &maxblock_size, &flags);
 
 	void *buf;
-	async_share_out_finalize(call_handle, &buf);
+	async_share_out_finalize(&data, &buf);
 
 	const uint64_t blocknum =
@@ -306,25 +299,23 @@
 	const errno_t ret = ahci_iface->read_blocks(fun, blocknum, cnt, buf);
 
-	async_answer_0(chandle, ret);
-}
-
-void remote_ahci_write_blocks(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, ret);
+}
+
+void remote_ahci_write_blocks(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
 
 	if (ahci_iface->read_blocks == NULL) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
-
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t maxblock_size;
 	unsigned int flags;
-
-	cap_call_handle_t call_handle;
-	async_share_out_receive(&call_handle, &maxblock_size, &flags);
+	async_share_out_receive(&data, &maxblock_size, &flags);
 
 	void *buf;
-	async_share_out_finalize(call_handle, &buf);
+	async_share_out_finalize(&data, &buf);
 
 	const uint64_t blocknum =
@@ -335,5 +326,5 @@
 	const errno_t ret = ahci_iface->write_blocks(fun, blocknum, cnt, buf);
 
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
Index: uspace/lib/drv/generic/remote_audio_mixer.c
===================================================================
--- uspace/lib/drv/generic/remote_audio_mixer.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_audio_mixer.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -203,8 +203,8 @@
  * SERVER SIDE
  */
-static void remote_audio_mixer_get_info(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_mixer_get_item_info(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_mixer_get_item_level(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_mixer_set_item_level(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
+static void remote_audio_mixer_get_info(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_mixer_get_item_info(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_mixer_get_item_level(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_mixer_set_item_level(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote audio mixer interface operations. */
@@ -222,95 +222,103 @@
 };
 
-void remote_audio_mixer_get_info(
-    ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+void remote_audio_mixer_get_info(ddf_fun_t *fun, void *iface, ipc_call_t *icall)
 {
 	audio_mixer_iface_t *mixer_iface = iface;
 
 	if (!mixer_iface->get_info) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
+
 	const char *name = NULL;
 	unsigned items = 0;
 	const errno_t ret = mixer_iface->get_info(fun, &name, &items);
 	const size_t name_size = name ? str_size(name) + 1 : 0;
-	async_answer_2(chandle, ret, name_size, items);
+	async_answer_2(icall, ret, name_size, items);
+
 	/* Send the name. */
 	if (ret == EOK && name_size > 0) {
+		ipc_call_t call;
 		size_t size;
-		cap_call_handle_t name_id;
-		if (!async_data_read_receive(&name_id, &size)) {
-			async_answer_0(name_id, EPARTY);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EPARTY);
 			return;
 		}
+
 		if (size != name_size) {
-			async_answer_0(name_id, ELIMIT);
+			async_answer_0(&call, ELIMIT);
 			return;
 		}
-		async_data_read_finalize(name_id, name, name_size);
-	}
-}
-
-void remote_audio_mixer_get_item_info(
-    ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+
+		async_data_read_finalize(&call, name, name_size);
+	}
+}
+
+void remote_audio_mixer_get_item_info(ddf_fun_t *fun, void *iface,
+    ipc_call_t *icall)
 {
 	audio_mixer_iface_t *mixer_iface = iface;
 
 	if (!mixer_iface->get_item_info) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
 
-	const unsigned item = DEV_IPC_GET_ARG1(*call);
+	const unsigned item = DEV_IPC_GET_ARG1(*icall);
 	const char *name = NULL;
 	unsigned values = 0;
 	const errno_t ret = mixer_iface->get_item_info(fun, item, &name, &values);
 	const size_t name_size = name ? str_size(name) + 1 : 0;
-	async_answer_2(chandle, ret, name_size, values);
+	async_answer_2(icall, ret, name_size, values);
+
 	/* Send the name. */
 	if (ret == EOK && name_size > 0) {
+		ipc_call_t call;
 		size_t size;
-		cap_call_handle_t name_id;
-		if (!async_data_read_receive(&name_id, &size)) {
-			async_answer_0(name_id, EPARTY);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EPARTY);
 			return;
 		}
+
 		if (size != name_size) {
-			async_answer_0(name_id, ELIMIT);
+			async_answer_0(&call, ELIMIT);
 			return;
 		}
-		async_data_read_finalize(name_id, name, name_size);
-	}
-}
-
-void remote_audio_mixer_set_item_level(
-    ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+
+		async_data_read_finalize(&call, name, name_size);
+	}
+}
+
+void remote_audio_mixer_set_item_level(ddf_fun_t *fun, void *iface,
+    ipc_call_t *icall)
 {
 	audio_mixer_iface_t *mixer_iface = iface;
 
 	if (!mixer_iface->set_item_level) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
-	const unsigned item = DEV_IPC_GET_ARG1(*call);
-	const unsigned value = DEV_IPC_GET_ARG2(*call);
+
+	const unsigned item = DEV_IPC_GET_ARG1(*icall);
+	const unsigned value = DEV_IPC_GET_ARG2(*icall);
 	const errno_t ret = mixer_iface->set_item_level(fun, item, value);
-	async_answer_0(chandle, ret);
-}
-
-void remote_audio_mixer_get_item_level(
-    ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_0(icall, ret);
+}
+
+void remote_audio_mixer_get_item_level(ddf_fun_t *fun, void *iface,
+    ipc_call_t *icall)
 {
 	audio_mixer_iface_t *mixer_iface = iface;
 
 	if (!mixer_iface->get_item_level) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
-	const unsigned item = DEV_IPC_GET_ARG1(*call);
+
+	const unsigned item = DEV_IPC_GET_ARG1(*icall);
 	unsigned current = 0;
 	const errno_t ret =
 	    mixer_iface->get_item_level(fun, item, &current);
-	async_answer_1(chandle, ret, current);
+	async_answer_1(icall, ret, current);
 }
 
Index: uspace/lib/drv/generic/remote_audio_pcm.c
===================================================================
--- uspace/lib/drv/generic/remote_audio_pcm.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_audio_pcm.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -600,16 +600,16 @@
  * SERVER SIDE
  */
-static void remote_audio_pcm_get_info_str(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_query_caps(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_events_register(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_events_unregister(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_get_buffer_pos(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_test_format(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_get_buffer(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_release_buffer(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_start_playback(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_stop_playback(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_start_capture(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_audio_pcm_stop_capture(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
+static void remote_audio_pcm_get_info_str(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_query_caps(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_events_register(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_events_unregister(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_get_buffer_pos(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_test_format(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_get_buffer(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_release_buffer(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_start_playback(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_stop_playback(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_start_capture(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_audio_pcm_stop_capture(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote audio pcm buffer interface operations. */
@@ -636,34 +636,38 @@
 
 void remote_audio_pcm_get_info_str(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
 
 	if (!pcm_iface->get_info_str) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
 	const char *name = NULL;
 	const errno_t ret = pcm_iface->get_info_str(fun, &name);
 	const size_t name_size = name ? str_size(name) + 1 : 0;
-	async_answer_1(chandle, ret, name_size);
+	async_answer_1(call, ret, name_size);
+
 	/* Send the string. */
 	if (ret == EOK && name_size > 0) {
+		ipc_call_t call;
 		size_t size;
-		cap_call_handle_t name_id;
-		if (!async_data_read_receive(&name_id, &size)) {
-			async_answer_0(name_id, EPARTY);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EPARTY);
 			return;
 		}
+
 		if (size != name_size) {
-			async_answer_0(name_id, ELIMIT);
+			async_answer_0(&call, ELIMIT);
 			return;
 		}
-		async_data_read_finalize(name_id, name, name_size);
+
+		async_data_read_finalize(&call, name, name_size);
 	}
 }
 
 void remote_audio_pcm_query_caps(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -671,50 +675,53 @@
 	if (pcm_iface->query_cap) {
 		const unsigned value = pcm_iface->query_cap(fun, cap);
-		async_answer_1(chandle, EOK, value);
+		async_answer_1(call, EOK, value);
 	} else {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 	}
 }
 
 static void remote_audio_pcm_events_register(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
 	if (!pcm_iface->get_event_session ||
 	    !pcm_iface->set_event_session) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
-
-	async_answer_0(chandle, EOK);
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	async_answer_0(call, EOK);
 
 	ipc_call_t callback_call;
-	cap_call_handle_t callback_handle = async_get_call(&callback_call);
+	async_get_call(&callback_call);
 	async_sess_t *sess =
 	    async_callback_receive_start(EXCHANGE_ATOMIC, &callback_call);
 	if (sess == NULL) {
 		ddf_msg(LVL_DEBUG, "Failed to create event callback");
-		async_answer_0(callback_handle, EAGAIN);
-		return;
-	}
+		async_answer_0(&callback_call, EAGAIN);
+		return;
+	}
+
 	const errno_t ret = pcm_iface->set_event_session(fun, sess);
 	if (ret != EOK) {
 		ddf_msg(LVL_DEBUG, "Failed to set event callback.");
 		async_hangup(sess);
-		async_answer_0(callback_handle, ret);
-		return;
-	}
-	async_answer_0(callback_handle, EOK);
+		async_answer_0(&callback_call, ret);
+		return;
+	}
+
+	async_answer_0(&callback_call, EOK);
 }
 
 static void remote_audio_pcm_events_unregister(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
 	if (!pcm_iface->get_event_session ||
 	    !pcm_iface->set_event_session) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
 	async_sess_t *sess = pcm_iface->get_event_session(fun);
 	if (sess) {
@@ -722,9 +729,10 @@
 		pcm_iface->set_event_session(fun, NULL);
 	}
-	async_answer_0(chandle, EOK);
+
+	async_answer_0(call, EOK);
 }
 
 void remote_audio_pcm_get_buffer_pos(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -732,9 +740,9 @@
 	const errno_t ret = pcm_iface->get_buffer_pos ?
 	    pcm_iface->get_buffer_pos(fun, &pos) : ENOTSUP;
-	async_answer_1(chandle, ret, pos);
+	async_answer_1(call, ret, pos);
 }
 
 void remote_audio_pcm_test_format(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -744,9 +752,9 @@
 	const errno_t ret = pcm_iface->test_format ?
 	    pcm_iface->test_format(fun, &channels, &rate, &format) : ENOTSUP;
-	async_answer_3(chandle, ret, channels, rate, format);
+	async_answer_3(call, ret, channels, rate, format);
 }
 
 void remote_audio_pcm_get_buffer(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -754,5 +762,5 @@
 	if (!pcm_iface->get_buffer ||
 	    !pcm_iface->release_buffer) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -760,17 +768,17 @@
 	size_t size = DEV_IPC_GET_ARG1(*call);
 	errno_t ret = pcm_iface->get_buffer(fun, &buffer, &size);
-	async_answer_1(chandle, ret, size);
+	async_answer_1(call, ret, size);
 	if (ret != EOK || size == 0)
 		return;
 
 	/* Share the buffer. */
+	ipc_call_t share;
 	size_t share_size = 0;
-	cap_call_handle_t share_id = 0;
 
 	ddf_msg(LVL_DEBUG2, "Receiving share request.");
-	if (!async_share_in_receive(&share_id, &share_size)) {
+	if (!async_share_in_receive(&share, &share_size)) {
 		ddf_msg(LVL_DEBUG, "Failed to share pcm buffer.");
 		pcm_iface->release_buffer(fun);
-		async_answer_0(share_id, EPARTY);
+		async_answer_0(&share, EPARTY);
 		return;
 	}
@@ -780,10 +788,10 @@
 		ddf_msg(LVL_DEBUG, "Incorrect pcm buffer size requested.");
 		pcm_iface->release_buffer(fun);
-		async_answer_0(share_id, ELIMIT);
+		async_answer_0(&share, ELIMIT);
 		return;
 	}
 
 	ddf_msg(LVL_DEBUG2, "Calling share finalize.");
-	ret = async_share_in_finalize(share_id, buffer, AS_AREA_WRITE |
+	ret = async_share_in_finalize(&share, buffer, AS_AREA_WRITE |
 	    AS_AREA_READ);
 	if (ret != EOK) {
@@ -797,5 +805,5 @@
 
 void remote_audio_pcm_release_buffer(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -803,9 +811,9 @@
 	const errno_t ret = pcm_iface->release_buffer ?
 	    pcm_iface->release_buffer(fun) : ENOTSUP;
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 void remote_audio_pcm_start_playback(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -819,9 +827,9 @@
 	    pcm_iface->start_playback(fun, frames, channels, rate, format) :
 	    ENOTSUP;
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 void remote_audio_pcm_stop_playback(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -830,9 +838,9 @@
 	const errno_t ret = pcm_iface->stop_playback ?
 	    pcm_iface->stop_playback(fun, immediate) : ENOTSUP;
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 void remote_audio_pcm_start_capture(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -846,9 +854,9 @@
 	    pcm_iface->start_capture(fun, frames, channels, rate, format) :
 	    ENOTSUP;
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 void remote_audio_pcm_stop_capture(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const audio_pcm_iface_t *pcm_iface = iface;
@@ -857,5 +865,5 @@
 	const errno_t ret = pcm_iface->stop_capture ?
 	    pcm_iface->stop_capture(fun, immediate) : ENOTSUP;
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
@@ -863,3 +871,2 @@
  * @}
  */
-
Index: uspace/lib/drv/generic/remote_battery_dev.c
===================================================================
--- uspace/lib/drv/generic/remote_battery_dev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_battery_dev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -90,8 +90,6 @@
 }
 
-static void remote_battery_status_get(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_battery_charge_level_get(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_battery_status_get(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_battery_charge_level_get(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote battery interface operations */
@@ -114,9 +112,9 @@
 /** Process the status_get() request from the remote client
  *
- * @param fun    The function from which the battery status is read
- * @param ops    The local ops structure
+ * @param fun The function from which the battery status is read
+ * @param ops The local ops structure
+ *
  */
-static void
-remote_battery_status_get(ddf_fun_t *fun, void *ops, cap_call_handle_t chandle,
+static void remote_battery_status_get(ddf_fun_t *fun, void *ops,
     ipc_call_t *call)
 {
@@ -124,5 +122,5 @@
 
 	if (bops->battery_status_get == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -132,17 +130,16 @@
 
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	else
-		async_answer_1(chandle, rc, batt_status);
+		async_answer_1(call, rc, batt_status);
 }
 
 /** Process the battery_charge_level_get() request from the remote client
  *
- * @param fun    The function from which the battery charge level is read
- * @param ops    The local ops structure
+ * @param fun  The function from which the battery charge level is read
+ * @param ops The local ops structure
  *
  */
-static void
-remote_battery_charge_level_get(ddf_fun_t *fun, void *ops, cap_call_handle_t chandle,
+static void remote_battery_charge_level_get(ddf_fun_t *fun, void *ops,
     ipc_call_t *call)
 {
@@ -150,5 +147,5 @@
 
 	if (bops->battery_charge_level_get == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -158,7 +155,6 @@
 
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	else
-		async_answer_1(chandle, rc, battery_level);
+		async_answer_1(call, rc, battery_level);
 }
-
Index: uspace/lib/drv/generic/remote_clock_dev.c
===================================================================
--- uspace/lib/drv/generic/remote_clock_dev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_clock_dev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,8 +42,6 @@
 #include <ddf/driver.h>
 
-static void remote_clock_time_get(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_clock_time_set(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_clock_time_get(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_clock_time_set(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote clock interface operations */
@@ -65,20 +63,19 @@
 /** Process the time_get() request from the remote client
  *
- * @param fun   The function from which the time is read
- * @param ops   The local ops structure
+ * @param fun The function from which the time is read
+ * @param ops The local ops structure
+ *
  */
-static void
-remote_clock_time_get(ddf_fun_t *fun, void *ops, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void remote_clock_time_get(ddf_fun_t *fun, void *ops, ipc_call_t *call)
 {
 	clock_dev_ops_t *clock_dev_ops = (clock_dev_ops_t *) ops;
-	cap_call_handle_t call_handle;
 	struct tm t;
 	errno_t rc;
+
+	ipc_call_t data;
 	size_t len;
-
-	if (!async_data_read_receive(&call_handle, &len)) {
+	if (!async_data_read_receive(&data, &len)) {
 		/* TODO: Handle protocol error */
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -86,6 +83,6 @@
 	if (!clock_dev_ops->time_get) {
 		/* The driver does not provide the time_get() functionality */
-		async_answer_0(call_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&data, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -95,31 +92,32 @@
 	if (rc != EOK) {
 		/* Some error occurred */
-		async_answer_0(call_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&data, rc);
+		async_answer_0(call, rc);
 		return;
 	}
 
 	/* The operation was successful */
-	async_data_read_finalize(call_handle, &t, sizeof(struct tm));
-	async_answer_0(chandle, rc);
+	async_data_read_finalize(&data, &t, sizeof(struct tm));
+	async_answer_0(call, rc);
 }
 
 /** Process the time_set() request from the remote client
  *
- * @param fun   The function to which the data are written
- * @param ops   The local ops structure
+ * @param fun The function to which the data are written
+ * @param ops The local ops structure
+ *
  */
-static void remote_clock_time_set(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+static void remote_clock_time_set(ddf_fun_t *fun, void *ops, ipc_call_t *call)
 {
 	clock_dev_ops_t *clock_dev_ops = (clock_dev_ops_t *) ops;
-	errno_t      rc;
-	struct tm    t;
-	cap_call_handle_t call_handle;
-	size_t       len;
+	errno_t rc;
+	struct tm t;
 
-	if (!async_data_write_receive(&call_handle, &len)) {
+	ipc_call_t data;
+	size_t len;
+
+	if (!async_data_write_receive(&data, &len)) {
 		/* TODO: Handle protocol error */
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -127,14 +125,14 @@
 	if (!clock_dev_ops->time_set) {
 		/* The driver does not support the time_set() functionality */
-		async_answer_0(call_handle, ENOTSUP);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&data, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
-	async_data_write_finalize(call_handle, &t, sizeof(struct tm));
+	async_data_write_finalize(&data, &t, sizeof(struct tm));
 
 	rc = (*clock_dev_ops->time_set)(fun, &t);
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
@@ -142,3 +140,2 @@
  * @}
  */
-
Index: uspace/lib/drv/generic/remote_hw_res.c
===================================================================
--- uspace/lib/drv/generic/remote_hw_res.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_hw_res.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,16 +41,10 @@
 #include "ddf/driver.h"
 
-static void remote_hw_res_get_resource_list(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_hw_res_enable_interrupt(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_hw_res_disable_interrupt(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_hw_res_clear_interrupt(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_hw_res_dma_channel_setup(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
-static void remote_hw_res_dma_channel_remain(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_hw_res_get_resource_list(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_enable_interrupt(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_disable_interrupt(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_clear_interrupt(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_dma_channel_setup(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_dma_channel_remain(ddf_fun_t *, void *, ipc_call_t *);
 
 static const remote_iface_func_ptr_t remote_hw_res_iface_ops [] = {
@@ -69,10 +63,10 @@
 
 static void remote_hw_res_enable_interrupt(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = (hw_res_ops_t *) ops;
 
 	if (hw_res_ops->enable_interrupt == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -80,14 +74,14 @@
 	const int irq = DEV_IPC_GET_ARG1(*call);
 	const errno_t ret = hw_res_ops->enable_interrupt(fun, irq);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_hw_res_disable_interrupt(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = (hw_res_ops_t *) ops;
 
 	if (hw_res_ops->disable_interrupt == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -95,14 +89,14 @@
 	const int irq = DEV_IPC_GET_ARG1(*call);
 	const errno_t ret = hw_res_ops->disable_interrupt(fun, irq);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_hw_res_clear_interrupt(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = (hw_res_ops_t *) ops;
 
 	if (hw_res_ops->clear_interrupt == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -110,14 +104,14 @@
 	const int irq = DEV_IPC_GET_ARG1(*call);
 	const errno_t ret = hw_res_ops->enable_interrupt(fun, irq);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_hw_res_get_resource_list(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = (hw_res_ops_t *) ops;
 
 	if (hw_res_ops->get_resource_list == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -125,27 +119,30 @@
 	hw_resource_list_t *hw_resources = hw_res_ops->get_resource_list(fun);
 	if (hw_resources == NULL) {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
 
-	async_answer_1(chandle, EOK, hw_resources->count);
+	async_answer_1(call, EOK, hw_resources->count);
 
+	ipc_call_t data;
 	size_t len;
-	if (!async_data_read_receive(&chandle, &len)) {
+	if (!async_data_read_receive(&data, &len)) {
 		/* Protocol error - the recipient is not accepting data */
 		return;
 	}
-	async_data_read_finalize(chandle, hw_resources->resources, len);
+
+	async_data_read_finalize(&data, hw_resources->resources, len);
 }
 
 static void remote_hw_res_dma_channel_setup(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = ops;
 
 	if (hw_res_ops->dma_channel_setup == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
+
 	const unsigned channel = DEV_IPC_GET_ARG1(*call) & 0xffff;
 	const uint8_t  mode = DEV_IPC_GET_ARG1(*call) >> 16;
@@ -155,21 +152,23 @@
 	const errno_t ret = hw_res_ops->dma_channel_setup(
 	    fun, channel, address, size, mode);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_hw_res_dma_channel_remain(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	hw_res_ops_t *hw_res_ops = ops;
 
 	if (hw_res_ops->dma_channel_setup == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
+
 	const unsigned channel = DEV_IPC_GET_ARG1(*call);
 	size_t remain = 0;
 	const errno_t ret = hw_res_ops->dma_channel_remain(fun, channel, &remain);
-	async_answer_1(chandle, ret, remain);
+	async_answer_1(call, ret, remain);
 }
+
 /**
  * @}
Index: uspace/lib/drv/generic/remote_ieee80211.c
===================================================================
--- uspace/lib/drv/generic/remote_ieee80211.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_ieee80211.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -268,5 +268,5 @@
 
 static void remote_ieee80211_get_scan_results(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
@@ -280,27 +280,27 @@
 	errno_t rc = ieee80211_iface->get_scan_results(fun, &scan_results, now);
 	if (rc == EOK) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t max_len;
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len < sizeof(ieee80211_scan_results_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
 			return;
 		}
 
-		async_data_read_finalize(data_chandle, &scan_results,
+		async_data_read_finalize(&data, &scan_results,
 		    sizeof(ieee80211_scan_results_t));
 	}
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_ieee80211_connect(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
@@ -310,41 +310,41 @@
 	char password[MAX_STRING_SIZE];
 
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t len;
-	if (!async_data_write_receive(&data_chandle, &len)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&data, &len)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (len > MAX_STRING_SIZE) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(data_chandle, ssid_start, len);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&data, ssid_start, len);
 	if (rc != EOK) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	if (!async_data_write_receive(&data_chandle, &len)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	if (!async_data_write_receive(&data, &len)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (len > MAX_STRING_SIZE) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(data_chandle, password, len);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&data, password, len);
 	if (rc != EOK) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -352,14 +352,14 @@
 	rc = ieee80211_iface->connect(fun, ssid_start, password);
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_ieee80211_disconnect(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
 	assert(ieee80211_iface->disconnect);
 	errno_t rc = ieee80211_iface->disconnect(fun);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
Index: uspace/lib/drv/generic/remote_led_dev.c
===================================================================
--- uspace/lib/drv/generic/remote_led_dev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_led_dev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,6 +41,5 @@
 #include <ddf/driver.h>
 
-static void remote_led_color_set(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_led_color_set(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote LED interface operations */
@@ -66,6 +65,5 @@
  *
  */
-static void remote_led_color_set(ddf_fun_t *fun, void *ops, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void remote_led_color_set(ddf_fun_t *fun, void *ops, ipc_call_t *call)
 {
 	led_dev_ops_t *led_dev_ops = (led_dev_ops_t *) ops;
@@ -73,10 +71,10 @@
 
 	if (!led_dev_ops->color_set) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	errno_t rc = (*led_dev_ops->color_set)(fun, color);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
Index: uspace/lib/drv/generic/remote_nic.c
===================================================================
--- uspace/lib/drv/generic/remote_nic.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_nic.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -1337,5 +1337,5 @@
 
 static void remote_nic_send_frame(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1348,15 +1348,15 @@
 	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
 	if (rc != EOK) {
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	rc = nic_iface->send_frame(dev, data, size);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 	free(data);
 }
 
 static void remote_nic_callback_create(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1364,9 +1364,9 @@
 
 	errno_t rc = nic_iface->callback_create(dev);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_get_state(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1376,9 +1376,9 @@
 
 	errno_t rc = nic_iface->get_state(dev, &state);
-	async_answer_1(chandle, rc, state);
+	async_answer_1(call, rc, state);
 }
 
 static void remote_nic_set_state(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1388,9 +1388,9 @@
 
 	errno_t rc = nic_iface->set_state(dev, state);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_get_address(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1402,49 +1402,49 @@
 	errno_t rc = nic_iface->get_address(dev, &address);
 	if (rc == EOK) {
+		ipc_call_t data;
 		size_t max_len;
-		cap_call_handle_t data_chandle;
 
 		/* All errors will be translated into EPARTY anyway */
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len != sizeof(nic_address_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
-			return;
-		}
-
-		async_data_read_finalize(data_chandle, &address,
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
+			return;
+		}
+
+		async_data_read_finalize(&data, &address,
 		    sizeof(nic_address_t));
 	}
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_set_address(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
-{
-	nic_iface_t *nic_iface = (nic_iface_t *) iface;
-
+    ipc_call_t *call)
+{
+	nic_iface_t *nic_iface = (nic_iface_t *) iface;
+
+	ipc_call_t data;
 	size_t length;
-	cap_call_handle_t data_chandle;
-	if (!async_data_write_receive(&data_chandle, &length)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&data, &length)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (length > sizeof(nic_address_t)) {
-		async_answer_0(data_chandle, ELIMIT);
-		async_answer_0(chandle, ELIMIT);
+		async_answer_0(&data, ELIMIT);
+		async_answer_0(call, ELIMIT);
 		return;
 	}
 
 	nic_address_t address;
-	if (async_data_write_finalize(data_chandle, &address, length) != EOK) {
-		async_answer_0(chandle, EINVAL);
+	if (async_data_write_finalize(&data, &address, length) != EOK) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -1452,15 +1452,15 @@
 	if (nic_iface->set_address != NULL) {
 		errno_t rc = nic_iface->set_address(dev, &address);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 }
 
 static void remote_nic_get_stats(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->get_stats == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1471,31 +1471,31 @@
 	errno_t rc = nic_iface->get_stats(dev, &stats);
 	if (rc == EOK) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t max_len;
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len < sizeof(nic_device_stats_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
-			return;
-		}
-
-		async_data_read_finalize(data_chandle, &stats,
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
+			return;
+		}
+
+		async_data_read_finalize(&data, &stats,
 		    sizeof(nic_device_stats_t));
 	}
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_get_device_info(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->get_device_info == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1506,31 +1506,31 @@
 	errno_t rc = nic_iface->get_device_info(dev, &info);
 	if (rc == EOK) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t max_len;
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len < sizeof (nic_device_info_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
-			return;
-		}
-
-		async_data_read_finalize(data_chandle, &info,
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
+			return;
+		}
+
+		async_data_read_finalize(&data, &info,
 		    sizeof(nic_device_info_t));
 	}
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_get_cable_state(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->get_cable_state == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1539,13 +1539,13 @@
 
 	errno_t rc = nic_iface->get_cable_state(dev, &cs);
-	async_answer_1(chandle, rc, (sysarg_t) cs);
+	async_answer_1(call, rc, (sysarg_t) cs);
 }
 
 static void remote_nic_get_operation_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->get_operation_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1556,14 +1556,14 @@
 
 	errno_t rc = nic_iface->get_operation_mode(dev, &speed, &duplex, &role);
-	async_answer_3(chandle, rc, (sysarg_t) speed, (sysarg_t) duplex,
+	async_answer_3(call, rc, (sysarg_t) speed, (sysarg_t) duplex,
 	    (sysarg_t) role);
 }
 
 static void remote_nic_set_operation_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->set_operation_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1574,13 +1574,13 @@
 
 	errno_t rc = nic_iface->set_operation_mode(dev, speed, duplex, role);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_autoneg_enable(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->autoneg_enable == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1589,26 +1589,26 @@
 
 	errno_t rc = nic_iface->autoneg_enable(dev, advertisement);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_autoneg_disable(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->autoneg_disable == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	errno_t rc = nic_iface->autoneg_disable(dev);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_autoneg_probe(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->autoneg_probe == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1621,27 +1621,27 @@
 	errno_t rc = nic_iface->autoneg_probe(dev, &our_adv, &their_adv, &result,
 	    &their_result);
-	async_answer_4(chandle, rc, our_adv, their_adv, (sysarg_t) result,
+	async_answer_4(call, rc, our_adv, their_adv, (sysarg_t) result,
 	    (sysarg_t) their_result);
 }
 
 static void remote_nic_autoneg_restart(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->autoneg_restart == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	errno_t rc = nic_iface->autoneg_restart(dev);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_get_pause(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->get_pause == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1652,13 +1652,13 @@
 
 	errno_t rc = nic_iface->get_pause(dev, &we_send, &we_receive, &pause);
-	async_answer_3(chandle, rc, we_send, we_receive, pause);
+	async_answer_3(call, rc, we_send, we_receive, pause);
 }
 
 static void remote_nic_set_pause(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->set_pause == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1670,13 +1670,13 @@
 	errno_t rc = nic_iface->set_pause(dev, allow_send, allow_receive,
 	    pause);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_unicast_get_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->unicast_get_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1688,5 +1688,5 @@
 		address_list = malloc(max_count * sizeof (nic_address_t));
 		if (!address_list) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return;
 		}
@@ -1702,13 +1702,13 @@
 	if ((rc != EOK) || (max_count == 0) || (address_count == 0)) {
 		free(address_list);
-		async_answer_2(chandle, rc, mode, address_count);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_2(call, rc, mode, address_count);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t max_len;
-	if (!async_data_read_receive(&data_chandle, &max_len)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_2(chandle, rc, mode, address_count);
+	if (!async_data_read_receive(&data, &max_len)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_2(call, rc, mode, address_count);
 		free(address_list);
 		return;
@@ -1721,13 +1721,12 @@
 		max_len = max_count * sizeof(nic_address_t);
 
-	async_data_read_finalize(data_chandle, address_list, max_len);
-	async_answer_0(data_chandle, EINVAL);
+	async_data_read_finalize(&data, address_list, max_len);
 
 	free(address_list);
-	async_answer_2(chandle, rc, mode, address_count);
+	async_answer_2(call, rc, mode, address_count);
 }
 
 static void remote_nic_unicast_set_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1739,14 +1738,14 @@
 
 	if (address_count) {
-		cap_call_handle_t data_chandle;
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		ipc_call_t data;
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (length != address_count * sizeof(nic_address_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
 			return;
 		}
@@ -1754,12 +1753,12 @@
 		address_list = malloc(length);
 		if (address_list == NULL) {
-			async_answer_0(data_chandle, ENOMEM);
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-
-		if (async_data_write_finalize(data_chandle, address_list,
+			async_answer_0(&data, ENOMEM);
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+
+		if (async_data_write_finalize(&data, address_list,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(call, EINVAL);
 			free(address_list);
 			return;
@@ -1770,7 +1769,7 @@
 		errno_t rc = nic_iface->unicast_set_mode(dev, mode, address_list,
 		    address_count);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 
 	free(address_list);
@@ -1778,9 +1777,9 @@
 
 static void remote_nic_multicast_get_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->multicast_get_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1792,5 +1791,5 @@
 		address_list = malloc(max_count * sizeof(nic_address_t));
 		if (!address_list) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return;
 		}
@@ -1807,13 +1806,13 @@
 	if ((rc != EOK) || (max_count == 0) || (address_count == 0)) {
 		free(address_list);
-		async_answer_2(chandle, rc, mode, address_count);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_2(call, rc, mode, address_count);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t max_len;
-	if (!async_data_read_receive(&data_chandle, &max_len)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_2(chandle, rc, mode, address_count);
+	if (!async_data_read_receive(&data, &max_len)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_2(call, rc, mode, address_count);
 		free(address_list);
 		return;
@@ -1826,12 +1825,12 @@
 		max_len = max_count * sizeof(nic_address_t);
 
-	async_data_read_finalize(data_chandle, address_list, max_len);
+	async_data_read_finalize(&data, address_list, max_len);
 
 	free(address_list);
-	async_answer_2(chandle, rc, mode, address_count);
+	async_answer_2(call, rc, mode, address_count);
 }
 
 static void remote_nic_multicast_set_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -1842,15 +1841,15 @@
 
 	if (address_count) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t length;
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (length != address_count * sizeof (nic_address_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
 			return;
 		}
@@ -1858,12 +1857,12 @@
 		address_list = malloc(length);
 		if (address_list == NULL) {
-			async_answer_0(data_chandle, ENOMEM);
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-
-		if (async_data_write_finalize(data_chandle, address_list,
+			async_answer_0(&data, ENOMEM);
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+
+		if (async_data_write_finalize(&data, address_list,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(call, EINVAL);
 			free(address_list);
 			return;
@@ -1874,7 +1873,7 @@
 		errno_t rc = nic_iface->multicast_set_mode(dev, mode, address_list,
 		    address_count);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 
 	free(address_list);
@@ -1882,9 +1881,9 @@
 
 static void remote_nic_broadcast_get_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->broadcast_get_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1893,13 +1892,13 @@
 
 	errno_t rc = nic_iface->broadcast_get_mode(dev, &mode);
-	async_answer_1(chandle, rc, mode);
+	async_answer_1(call, rc, mode);
 }
 
 static void remote_nic_broadcast_set_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->broadcast_set_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1908,13 +1907,13 @@
 
 	errno_t rc = nic_iface->broadcast_set_mode(dev, mode);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_defective_get_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->defective_get_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1923,13 +1922,13 @@
 
 	errno_t rc = nic_iface->defective_get_mode(dev, &mode);
-	async_answer_1(chandle, rc, mode);
+	async_answer_1(call, rc, mode);
 }
 
 static void remote_nic_defective_set_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->defective_set_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1938,13 +1937,13 @@
 
 	errno_t rc = nic_iface->defective_set_mode(dev, mode);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_blocked_sources_get(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->blocked_sources_get == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -1956,5 +1955,5 @@
 		address_list = malloc(max_count * sizeof(nic_address_t));
 		if (!address_list) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return;
 		}
@@ -1968,14 +1967,14 @@
 
 	if ((rc != EOK) || (max_count == 0) || (address_count == 0)) {
-		async_answer_1(chandle, rc, address_count);
+		async_answer_1(call, rc, address_count);
 		free(address_list);
 		return;
 	}
 
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t max_len;
-	if (!async_data_read_receive(&data_chandle, &max_len)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_1(chandle, rc, address_count);
+	if (!async_data_read_receive(&data, &max_len)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_1(call, rc, address_count);
 		free(address_list);
 		return;
@@ -1988,13 +1987,12 @@
 		max_len = max_count * sizeof(nic_address_t);
 
-	async_data_read_finalize(data_chandle, address_list, max_len);
-	async_answer_0(data_chandle, EINVAL);
+	async_data_read_finalize(&data, address_list, max_len);
 
 	free(address_list);
-	async_answer_1(chandle, rc, address_count);
+	async_answer_1(call, rc, address_count);
 }
 
 static void remote_nic_blocked_sources_set(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -2005,14 +2003,14 @@
 
 	if (address_count) {
-		cap_call_handle_t data_chandle;
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		ipc_call_t data;
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (length != address_count * sizeof(nic_address_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
 			return;
 		}
@@ -2020,12 +2018,12 @@
 		address_list = malloc(length);
 		if (address_list == NULL) {
-			async_answer_0(data_chandle, ENOMEM);
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-
-		if (async_data_write_finalize(data_chandle, address_list,
+			async_answer_0(&data, ENOMEM);
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+
+		if (async_data_write_finalize(&data, address_list,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(call, EINVAL);
 			free(address_list);
 			return;
@@ -2036,7 +2034,7 @@
 		errno_t rc = nic_iface->blocked_sources_set(dev, address_list,
 		    address_count);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 
 	free(address_list);
@@ -2044,9 +2042,9 @@
 
 static void remote_nic_vlan_get_mask(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->vlan_get_mask == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2057,26 +2055,26 @@
 	errno_t rc = nic_iface->vlan_get_mask(dev, &vlan_mask);
 	if (rc == EOK) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t max_len;
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len != sizeof(nic_vlan_mask_t)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
-			return;
-		}
-
-		async_data_read_finalize(data_chandle, &vlan_mask, max_len);
-	}
-
-	async_answer_0(chandle, rc);
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
+			return;
+		}
+
+		async_data_read_finalize(&data, &vlan_mask, max_len);
+	}
+
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_vlan_set_mask(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -2087,21 +2085,21 @@
 
 	if (vlan_mask_set) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t length;
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (length != sizeof(nic_vlan_mask_t)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
-			return;
-		}
-
-		if (async_data_write_finalize(data_chandle, &vlan_mask,
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
+			return;
+		}
+
+		if (async_data_write_finalize(&data, &vlan_mask,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
@@ -2112,16 +2110,16 @@
 	if (nic_iface->vlan_set_mask != NULL) {
 		errno_t rc = nic_iface->vlan_set_mask(dev, vlan_mask_pointer);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 }
 
 static void remote_nic_vlan_set_tag(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 
 	if (nic_iface->vlan_set_tag == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2132,45 +2130,45 @@
 
 	errno_t rc = nic_iface->vlan_set_tag(dev, tag, add, strip);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_wol_virtue_add(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 
 	int send_data = (int) IPC_GET_ARG3(*call);
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 
 	if (nic_iface->wol_virtue_add == NULL) {
 		if (send_data) {
-			async_data_write_receive(&data_chandle, NULL);
-			async_answer_0(data_chandle, ENOTSUP);
-		}
-
-		async_answer_0(chandle, ENOTSUP);
+			async_data_write_receive(&data, NULL);
+			async_answer_0(&data, ENOTSUP);
+		}
+
+		async_answer_0(call, ENOTSUP);
 	}
 
 	size_t length = 0;
-	void *data = NULL;
+	void *virtue = NULL;
 
 	if (send_data) {
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
-			return;
-		}
-
-		data = malloc(length);
-		if (data == NULL) {
-			async_answer_0(data_chandle, ENOMEM);
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-
-		if (async_data_write_finalize(data_chandle, data,
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
+			return;
+		}
+
+		virtue = malloc(length);
+		if (virtue == NULL) {
+			async_answer_0(&data, ENOMEM);
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+
+		if (async_data_write_finalize(&data, virtue,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
-			free(data);
+			async_answer_0(call, EINVAL);
+			free(virtue);
 			return;
 		}
@@ -2180,16 +2178,16 @@
 	nic_wv_type_t type = (nic_wv_type_t) IPC_GET_ARG2(*call);
 
-	errno_t rc = nic_iface->wol_virtue_add(dev, type, data, length, &id);
-	async_answer_1(chandle, rc, (sysarg_t) id);
-	free(data);
+	errno_t rc = nic_iface->wol_virtue_add(dev, type, virtue, length, &id);
+	async_answer_1(call, rc, (sysarg_t) id);
+	free(virtue);
 }
 
 static void remote_nic_wol_virtue_remove(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 
 	if (nic_iface->wol_virtue_remove == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2198,14 +2196,14 @@
 
 	errno_t rc = nic_iface->wol_virtue_remove(dev, id);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_wol_virtue_probe(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 
 	if (nic_iface->wol_virtue_probe == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2215,26 +2213,26 @@
 	nic_wv_type_t type = NIC_WV_NONE;
 	size_t length = 0;
-	cap_call_handle_t data_chandle;
-	void *data = NULL;
+	ipc_call_t data;
+	void *virtue = NULL;
 
 	if (max_length != 0) {
-		data = malloc(max_length);
-		if (data == NULL) {
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-	}
-
-	memset(data, 0, max_length);
+		virtue = malloc(max_length);
+		if (virtue == NULL) {
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+	}
+
+	memset(virtue, 0, max_length);
 
 	errno_t rc = nic_iface->wol_virtue_probe(dev, id, &type, max_length,
-	    data, &length);
+	    virtue, &length);
 
 	if ((max_length != 0) && (length != 0)) {
 		size_t req_length;
-		if (!async_data_read_receive(&data_chandle, &req_length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
-			free(data);
+		if (!async_data_read_receive(&data, &req_length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
+			free(virtue);
 			return;
 		}
@@ -2246,17 +2244,17 @@
 			req_length = max_length;
 
-		async_data_read_finalize(data_chandle, data, req_length);
-	}
-
-	async_answer_2(chandle, rc, (sysarg_t) type, (sysarg_t) length);
-	free(data);
+		async_data_read_finalize(&data, virtue, req_length);
+	}
+
+	async_answer_2(call, rc, (sysarg_t) type, (sysarg_t) length);
+	free(virtue);
 }
 
 static void remote_nic_wol_virtue_list(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->wol_virtue_list == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2266,10 +2264,10 @@
 	size_t count = 0;
 	nic_wv_id_t *id_list = NULL;
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 
 	if (max_count != 0) {
 		id_list = malloc(max_count * sizeof(nic_wv_id_t));
 		if (id_list == NULL) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return;
 		}
@@ -2283,7 +2281,7 @@
 	if ((max_count != 0) && (count != 0)) {
 		size_t req_length;
-		if (!async_data_read_receive(&data_chandle, &req_length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&data, &req_length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			free(id_list);
 			return;
@@ -2296,17 +2294,17 @@
 			req_length = max_count * sizeof(nic_wv_id_t);
 
-		rc = async_data_read_finalize(data_chandle, id_list, req_length);
-	}
-
-	async_answer_1(chandle, rc, (sysarg_t) count);
+		rc = async_data_read_finalize(&data, id_list, req_length);
+	}
+
+	async_answer_1(call, rc, (sysarg_t) count);
 	free(id_list);
 }
 
 static void remote_nic_wol_virtue_get_caps(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->wol_virtue_get_caps == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2316,13 +2314,13 @@
 
 	errno_t rc = nic_iface->wol_virtue_get_caps(dev, type, &count);
-	async_answer_1(chandle, rc, (sysarg_t) count);
+	async_answer_1(call, rc, (sysarg_t) count);
 }
 
 static void remote_nic_wol_load_info(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->wol_load_info == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2331,25 +2329,25 @@
 	size_t frame_length = 0;
 	nic_wv_type_t type = NIC_WV_NONE;
-	uint8_t *data = NULL;
+	uint8_t *info = NULL;
 
 	if (max_length != 0) {
-		data = malloc(max_length);
-		if (data == NULL) {
-			async_answer_0(chandle, ENOMEM);
-			return;
-		}
-	}
-
-	memset(data, 0, max_length);
-
-	errno_t rc = nic_iface->wol_load_info(dev, &type, max_length, data,
+		info = malloc(max_length);
+		if (info == NULL) {
+			async_answer_0(call, ENOMEM);
+			return;
+		}
+	}
+
+	memset(info, 0, max_length);
+
+	errno_t rc = nic_iface->wol_load_info(dev, &type, max_length, info,
 	    &frame_length);
 	if (rc == EOK) {
-		cap_call_handle_t data_chandle;
+		ipc_call_t data;
 		size_t req_length;
-		if (!async_data_read_receive(&data_chandle, &req_length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
-			free(data);
+		if (!async_data_read_receive(&data, &req_length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
+			free(info);
 			return;
 		}
@@ -2357,17 +2355,17 @@
 		req_length = req_length > max_length ? max_length : req_length;
 		req_length = req_length > frame_length ? frame_length : req_length;
-		async_data_read_finalize(data_chandle, data, req_length);
-	}
-
-	async_answer_2(chandle, rc, (sysarg_t) type, (sysarg_t) frame_length);
-	free(data);
+		async_data_read_finalize(&data, info, req_length);
+	}
+
+	async_answer_2(call, rc, (sysarg_t) type, (sysarg_t) frame_length);
+	free(info);
 }
 
 static void remote_nic_offload_probe(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->offload_probe == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2377,13 +2375,13 @@
 
 	errno_t rc = nic_iface->offload_probe(dev, &supported, &active);
-	async_answer_2(chandle, rc, supported, active);
+	async_answer_2(call, rc, supported, active);
 }
 
 static void remote_nic_offload_set(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->offload_set == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2393,13 +2391,13 @@
 
 	errno_t rc = nic_iface->offload_set(dev, mask, active);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
 static void remote_nic_poll_get_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->poll_get_mode == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -2414,28 +2412,28 @@
 	errno_t rc = nic_iface->poll_get_mode(dev, &mode, &period);
 	if ((rc == EOK) && (request_data)) {
+		ipc_call_t data;
 		size_t max_len;
-		cap_call_handle_t data_chandle;
-
-		if (!async_data_read_receive(&data_chandle, &max_len)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+
+		if (!async_data_read_receive(&data, &max_len)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (max_len != sizeof(struct timeval)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
-			return;
-		}
-
-		async_data_read_finalize(data_chandle, &period,
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
+			return;
+		}
+
+		async_data_read_finalize(&data, &period,
 		    sizeof(struct timeval));
 	}
 
-	async_answer_1(chandle, rc, (sysarg_t) mode);
+	async_answer_1(call, rc, (sysarg_t) mode);
 }
 
 static void remote_nic_poll_set_mode(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
@@ -2448,21 +2446,21 @@
 
 	if (has_period) {
-		cap_call_handle_t data_chandle;
-		if (!async_data_write_receive(&data_chandle, &length)) {
-			async_answer_0(data_chandle, EINVAL);
-			async_answer_0(chandle, EINVAL);
+		ipc_call_t data;
+		if (!async_data_write_receive(&data, &length)) {
+			async_answer_0(&data, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
 
 		if (length != sizeof(struct timeval)) {
-			async_answer_0(data_chandle, ELIMIT);
-			async_answer_0(chandle, ELIMIT);
+			async_answer_0(&data, ELIMIT);
+			async_answer_0(call, ELIMIT);
 			return;
 		}
 
 		period = &period_buf;
-		if (async_data_write_finalize(data_chandle, period,
+		if (async_data_write_finalize(&data, period,
 		    length) != EOK) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(call, EINVAL);
 			return;
 		}
@@ -2471,20 +2469,20 @@
 	if (nic_iface->poll_set_mode != NULL) {
 		errno_t rc = nic_iface->poll_set_mode(dev, mode, period);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 	} else
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 }
 
 static void remote_nic_poll_now(ddf_fun_t *dev, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	nic_iface_t *nic_iface = (nic_iface_t *) iface;
 	if (nic_iface->poll_now == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	errno_t rc = nic_iface->poll_now(dev);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
Index: uspace/lib/drv/generic/remote_pci.c
===================================================================
--- uspace/lib/drv/generic/remote_pci.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_pci.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -124,11 +124,11 @@
 }
 
-static void remote_config_space_read_8(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_config_space_read_16(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_config_space_read_32(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-
-static void remote_config_space_write_8(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_config_space_write_16(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_config_space_write_32(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
+static void remote_config_space_read_8(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_config_space_read_16(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_config_space_read_32(ddf_fun_t *, void *, ipc_call_t *);
+
+static void remote_config_space_write_8(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_config_space_write_16(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_config_space_write_32(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote USB interface operations. */
@@ -150,10 +150,10 @@
 };
 
-void remote_config_space_read_8(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+void remote_config_space_read_8(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_read_8 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -162,16 +162,16 @@
 	errno_t ret = pci_iface->config_space_read_8(fun, address, &value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_1(chandle, EOK, value);
-	}
-}
-
-void remote_config_space_read_16(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(call, ret);
+	} else {
+		async_answer_1(call, EOK, value);
+	}
+}
+
+void remote_config_space_read_16(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_read_16 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -180,15 +180,15 @@
 	errno_t ret = pci_iface->config_space_read_16(fun, address, &value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_1(chandle, EOK, value);
-	}
-}
-void remote_config_space_read_32(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(call, ret);
+	} else {
+		async_answer_1(call, EOK, value);
+	}
+}
+void remote_config_space_read_32(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_read_32 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -197,16 +197,16 @@
 	errno_t ret = pci_iface->config_space_read_32(fun, address, &value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_1(chandle, EOK, value);
-	}
-}
-
-void remote_config_space_write_8(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(call, ret);
+	} else {
+		async_answer_1(call, EOK, value);
+	}
+}
+
+void remote_config_space_write_8(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_write_8 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -215,16 +215,16 @@
 	errno_t ret = pci_iface->config_space_write_8(fun, address, value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_0(chandle, EOK);
-	}
-}
-
-void remote_config_space_write_16(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(call, ret);
+	} else {
+		async_answer_0(call, EOK);
+	}
+}
+
+void remote_config_space_write_16(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_write_16 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -233,16 +233,16 @@
 	errno_t ret = pci_iface->config_space_write_16(fun, address, value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_0(chandle, EOK);
-	}
-}
-
-void remote_config_space_write_32(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(call, ret);
+	} else {
+		async_answer_0(call, EOK);
+	}
+}
+
+void remote_config_space_write_32(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(iface);
 	pci_dev_iface_t *pci_iface = (pci_dev_iface_t *)iface;
 	if (pci_iface->config_space_write_32 == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -251,13 +251,11 @@
 	errno_t ret = pci_iface->config_space_write_32(fun, address, value);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-	} else {
-		async_answer_0(chandle, EOK);
-	}
-}
-
+		async_answer_0(call, ret);
+	} else {
+		async_answer_0(call, EOK);
+	}
+}
 
 /**
  * @}
  */
-
Index: uspace/lib/drv/generic/remote_pio_window.c
===================================================================
--- uspace/lib/drv/generic/remote_pio_window.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_pio_window.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -40,6 +40,5 @@
 #include "ddf/driver.h"
 
-static void remote_pio_window_get(ddf_fun_t *, void *, cap_call_handle_t,
-    ipc_call_t *);
+static void remote_pio_window_get(ddf_fun_t *, void *, ipc_call_t *);
 
 static const remote_iface_func_ptr_t remote_pio_window_iface_ops [] = {
@@ -53,11 +52,10 @@
 
 static void remote_pio_window_get(ddf_fun_t *fun, void *ops,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	pio_window_ops_t *pio_win_ops = (pio_window_ops_t *) ops;
-	size_t len;
 
 	if (!pio_win_ops->get_pio_window) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -65,16 +63,18 @@
 	pio_window_t *pio_window = pio_win_ops->get_pio_window(fun);
 	if (!pio_window) {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
 
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 
-	if (!async_data_read_receive(&chandle, &len)) {
+	ipc_call_t data;
+	size_t len;
+	if (!async_data_read_receive(&data, &len)) {
 		/* Protocol error - the recipient is not accepting data */
 		return;
 	}
 
-	async_data_read_finalize(chandle, pio_window, len);
+	async_data_read_finalize(&data, pio_window, len);
 }
 
Index: uspace/lib/drv/generic/remote_usb.c
===================================================================
--- uspace/lib/drv/generic/remote_usb.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_usb.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -95,6 +95,5 @@
 }
 
-static void remote_usb_get_my_description(ddf_fun_t *, void *,
-    cap_call_handle_t, ipc_call_t *);
+static void remote_usb_get_my_description(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote USB interface operations. */
@@ -111,10 +110,10 @@
 
 void remote_usb_get_my_description(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const usb_iface_t *usb_iface = (usb_iface_t *) iface;
 
 	if (usb_iface->get_my_description == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -123,7 +122,7 @@
 	const errno_t ret = usb_iface->get_my_description(fun, &desc);
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
+		async_answer_0(call, ret);
 	} else {
-		async_answer_5(chandle, EOK,
+		async_answer_5(call, EOK,
 		    (sysarg_t) desc.address,
 		    (sysarg_t) desc.depth,
Index: uspace/lib/drv/generic/remote_usbdiag.c
===================================================================
--- uspace/lib/drv/generic/remote_usbdiag.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_usbdiag.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -126,8 +126,6 @@
 }
 
-static void remote_usbdiag_test_in(ddf_fun_t *, void *,
-    cap_call_handle_t, ipc_call_t *);
-static void remote_usbdiag_test_out(ddf_fun_t *, void *,
-    cap_call_handle_t, ipc_call_t *);
+static void remote_usbdiag_test_in(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbdiag_test_out(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote USB diagnostic interface operations. */
@@ -143,26 +141,25 @@
 };
 
-void remote_usbdiag_test_in(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+void remote_usbdiag_test_in(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
 
+	ipc_call_t data;
 	size_t size;
-	cap_call_handle_t data_chandle;
-	if (!async_data_write_receive(&data_chandle, &size)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&data, &size)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(usbdiag_test_params_t)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	usbdiag_test_params_t params;
-	if (async_data_write_finalize(data_chandle, &params, size) != EOK) {
-		async_answer_0(chandle, EINVAL);
+	if (async_data_write_finalize(&data, &params, size) != EOK) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -173,50 +170,49 @@
 
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-		return;
-	}
-
-	if (!async_data_read_receive(&data_chandle, &size)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, ret);
+		return;
+	}
+
+	if (!async_data_read_receive(&data, &size)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(usbdiag_test_results_t)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	if (async_data_read_finalize(data_chandle, &results, size) != EOK) {
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	async_answer_0(chandle, ret);
-}
-
-void remote_usbdiag_test_out(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	if (async_data_read_finalize(&data, &results, size) != EOK) {
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	async_answer_0(call, ret);
+}
+
+void remote_usbdiag_test_out(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
 
+	ipc_call_t data;
 	size_t size;
-	cap_call_handle_t data_chandle;
-	if (!async_data_write_receive(&data_chandle, &size)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&data, &size)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(usbdiag_test_params_t)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	usbdiag_test_params_t params;
-	if (async_data_write_finalize(data_chandle, &params, size) != EOK) {
-		async_answer_0(chandle, EINVAL);
+	if (async_data_write_finalize(&data, &params, size) != EOK) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -227,26 +223,26 @@
 
 	if (ret != EOK) {
-		async_answer_0(chandle, ret);
-		return;
-	}
-
-	if (!async_data_read_receive(&data_chandle, &size)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, ret);
+		return;
+	}
+
+	if (!async_data_read_receive(&data, &size)) {
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(usbdiag_test_results_t)) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	if (async_data_read_finalize(data_chandle, &results, size) != EOK) {
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-
-	async_answer_0(chandle, ret);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	if (async_data_read_finalize(&data, &results, size) != EOK) {
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	async_answer_0(call, ret);
 }
 
Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -227,10 +227,10 @@
 }
 
-static void remote_usbhc_default_address_reservation(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhc_device_enumerate(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhc_device_remove(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhc_register_endpoint(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhc_unregister_endpoint(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhc_transfer(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call);
+static void remote_usbhc_default_address_reservation(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhc_device_enumerate(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhc_device_remove(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhc_register_endpoint(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhc_unregister_endpoint(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhc_transfer(ddf_fun_t *fun, void *iface, ipc_call_t *call);
 
 /** Remote USB interface operations. */
@@ -252,15 +252,15 @@
 
 typedef struct {
-	cap_call_handle_t caller;
+	ipc_call_t call;
 	usbhc_iface_transfer_request_t request;
 } async_transaction_t;
 
 void remote_usbhc_default_address_reservation(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const usbhc_iface_t *usbhc_iface = (usbhc_iface_t *) iface;
 
 	if (usbhc_iface->default_address_reservation == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -268,15 +268,15 @@
 	const bool reserve = IPC_GET_ARG2(*call);
 	const errno_t ret = usbhc_iface->default_address_reservation(fun, reserve);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 
 static void remote_usbhc_device_enumerate(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const usbhc_iface_t *usbhc_iface = (usbhc_iface_t *) iface;
 
 	if (usbhc_iface->device_enumerate == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -285,14 +285,14 @@
 	usb_speed_t speed = DEV_IPC_GET_ARG2(*call);
 	const errno_t ret = usbhc_iface->device_enumerate(fun, port, speed);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_usbhc_device_remove(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	const usbhc_iface_t *usbhc_iface = (usbhc_iface_t *) iface;
 
 	if (usbhc_iface->device_remove == NULL) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -300,9 +300,9 @@
 	const unsigned port = DEV_IPC_GET_ARG1(*call);
 	const errno_t ret = usbhc_iface->device_remove(fun, port);
-	async_answer_0(chandle, ret);
+	async_answer_0(call, ret);
 }
 
 static void remote_usbhc_register_endpoint(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	assert(fun);
@@ -313,33 +313,34 @@
 
 	if (!usbhc_iface->register_endpoint) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	usb_endpoint_descriptors_t ep_desc;
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t len;
 
-	if (!async_data_write_receive(&data_chandle, &len) ||
+	if (!async_data_write_receive(&data, &len) ||
 	    len != sizeof(ep_desc)) {
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-	async_data_write_finalize(data_chandle, &ep_desc, sizeof(ep_desc));
+		async_answer_0(call, EINVAL);
+		return;
+	}
+
+	async_data_write_finalize(&data, &ep_desc, sizeof(ep_desc));
 
 	usb_pipe_desc_t pipe_desc;
 
 	const errno_t rc = usbhc_iface->register_endpoint(fun, &pipe_desc, &ep_desc);
-	async_answer_0(chandle, rc);
-
-	if (!async_data_read_receive(&data_chandle, &len) ||
+	async_answer_0(call, rc);
+
+	if (!async_data_read_receive(&data, &len) ||
 	    len != sizeof(pipe_desc)) {
 		return;
 	}
-	async_data_read_finalize(data_chandle, &pipe_desc, sizeof(pipe_desc));
+	async_data_read_finalize(&data, &pipe_desc, sizeof(pipe_desc));
 }
 
 static void remote_usbhc_unregister_endpoint(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	assert(fun);
@@ -350,21 +351,21 @@
 
 	if (!usbhc_iface->unregister_endpoint) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	usb_pipe_desc_t pipe_desc;
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t len;
 
-	if (!async_data_write_receive(&data_chandle, &len) ||
+	if (!async_data_write_receive(&data, &len) ||
 	    len != sizeof(pipe_desc)) {
-		async_answer_0(chandle, EINVAL);
-		return;
-	}
-	async_data_write_finalize(data_chandle, &pipe_desc, sizeof(pipe_desc));
+		async_answer_0(call, EINVAL);
+		return;
+	}
+	async_data_write_finalize(&data, &pipe_desc, sizeof(pipe_desc));
 
 	const errno_t rc = usbhc_iface->unregister_endpoint(fun, &pipe_desc);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
@@ -381,10 +382,10 @@
 }
 
-static async_transaction_t *async_transaction_create(cap_call_handle_t caller)
+static async_transaction_t *async_transaction_create(ipc_call_t *call)
 {
 	async_transaction_t *trans = calloc(1, sizeof(async_transaction_t));
 
 	if (trans != NULL)
-		trans->caller = caller;
+		trans->call = *call;
 
 	return trans;
@@ -394,5 +395,5 @@
 {
 	async_transaction_t *trans = arg;
-	const errno_t err = async_answer_1(trans->caller, error, transferred_size);
+	const errno_t err = async_answer_1(&trans->call, error, transferred_size);
 	async_transaction_destroy(trans);
 	return err;
@@ -410,17 +411,17 @@
 
 	errno_t err;
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t size;
 	unsigned flags;
 
-	if (!async_share_out_receive(&data_chandle, &size, &flags))
+	if (!async_share_out_receive(&data, &size, &flags))
 		return EPARTY;
 
 	if (size < required_size || (flags & required_flags) != required_flags) {
-		async_answer_0(data_chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
 		return EINVAL;
 	}
 
-	if ((err = async_share_out_finalize(data_chandle, &trans->request.buffer.virt)))
+	if ((err = async_share_out_finalize(&data, &trans->request.buffer.virt)))
 		return err;
 
@@ -445,5 +446,5 @@
 }
 
-void remote_usbhc_transfer(ddf_fun_t *fun, void *iface, cap_call_handle_t chandle, ipc_call_t *call)
+void remote_usbhc_transfer(ddf_fun_t *fun, void *iface, ipc_call_t *call)
 {
 	assert(fun);
@@ -454,11 +455,12 @@
 
 	if (!usbhc_iface->transfer) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
-
-	async_transaction_t *trans = async_transaction_create(chandle);
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	async_transaction_t *trans =
+	    async_transaction_create(call);
 	if (trans == NULL) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -466,13 +468,13 @@
 	errno_t err = EPARTY;
 
-	cap_call_handle_t data_chandle;
+	ipc_call_t data;
 	size_t len;
-	if (!async_data_write_receive(&data_chandle, &len) ||
+	if (!async_data_write_receive(&data, &len) ||
 	    len != sizeof(trans->request)) {
-		async_answer_0(data_chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
 		goto err;
 	}
 
-	if ((err = async_data_write_finalize(data_chandle,
+	if ((err = async_data_write_finalize(&data,
 	    &trans->request, sizeof(trans->request))))
 		goto err;
@@ -494,5 +496,5 @@
 
 err:
-	async_answer_0(chandle, err);
+	async_answer_0(call, err);
 	async_transaction_destroy(trans);
 }
Index: uspace/lib/drv/generic/remote_usbhid.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhid.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/generic/remote_usbhid.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -283,8 +283,8 @@
 }
 
-static void remote_usbhid_get_event_length(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhid_get_event(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhid_get_report_descriptor_length(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
-static void remote_usbhid_get_report_descriptor(ddf_fun_t *, void *, cap_call_handle_t, ipc_call_t *);
+static void remote_usbhid_get_event_length(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhid_get_event(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhid_get_report_descriptor_length(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_usbhid_get_report_descriptor(ddf_fun_t *, void *, ipc_call_t *);
 
 /** Remote USB HID interface operations. */
@@ -306,5 +306,5 @@
 
 void remote_usbhid_get_event_length(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	printf("remote_usbhid_get_event_length()\n");
@@ -314,19 +314,19 @@
 	if (!hid_iface->get_event_length) {
 		printf("Get event length not set!\n");
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	size_t len = hid_iface->get_event_length(fun);
-	async_answer_1(chandle, EOK, len);
+	async_answer_1(call, EOK, len);
 }
 
 void remote_usbhid_get_event(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	usbhid_iface_t *hid_iface = (usbhid_iface_t *) iface;
 
 	if (!hid_iface->get_event) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
@@ -334,14 +334,14 @@
 	unsigned int flags = DEV_IPC_GET_ARG1(*call);
 
+	ipc_call_t data;
 	size_t len;
-	cap_call_handle_t data_chandle;
-	if (!async_data_read_receive(&data_chandle, &len)) {
-		async_answer_0(chandle, EPARTY);
+	if (!async_data_read_receive(&data, &len)) {
+		async_answer_0(call, EPARTY);
 		return;
 	}
 
 	if (len == 0) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -349,8 +349,8 @@
 	errno_t rc;
 
-	uint8_t *data = malloc(len);
-	if (data == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+	uint8_t *event = malloc(len);
+	if (event == NULL) {
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -358,9 +358,9 @@
 	size_t act_length;
 	int event_nr;
-	rc = hid_iface->get_event(fun, data, len, &act_length, &event_nr, flags);
+	rc = hid_iface->get_event(fun, event, len, &act_length, &event_nr, flags);
 	if (rc != EOK) {
-		free(data);
-		async_answer_0(data_chandle, rc);
-		async_answer_0(chandle, rc);
+		free(event);
+		async_answer_0(&data, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -371,45 +371,45 @@
 	}
 
-	async_data_read_finalize(data_chandle, data, act_length);
-
-	free(data);
-
-	async_answer_1(chandle, EOK, event_nr);
+	async_data_read_finalize(&data, event, act_length);
+
+	free(event);
+
+	async_answer_1(call, EOK, event_nr);
 }
 
 void remote_usbhid_get_report_descriptor_length(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	usbhid_iface_t *hid_iface = (usbhid_iface_t *) iface;
 
 	if (!hid_iface->get_report_descriptor_length) {
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return;
 	}
 
 	size_t len = hid_iface->get_report_descriptor_length(fun);
-	async_answer_1(chandle, EOK, (sysarg_t) len);
+	async_answer_1(call, EOK, (sysarg_t) len);
 }
 
 void remote_usbhid_get_report_descriptor(ddf_fun_t *fun, void *iface,
-    cap_call_handle_t chandle, ipc_call_t *call)
+    ipc_call_t *call)
 {
 	usbhid_iface_t *hid_iface = (usbhid_iface_t *) iface;
 
 	if (!hid_iface->get_report_descriptor) {
-		async_answer_0(chandle, ENOTSUP);
-		return;
-	}
-
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t len;
-	cap_call_handle_t data_chandle;
-	if (!async_data_read_receive(&data_chandle, &len)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_read_receive(&data, &len)) {
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	if (len == 0) {
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
@@ -417,6 +417,6 @@
 	uint8_t *descriptor = malloc(len);
 	if (descriptor == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -430,16 +430,14 @@
 	if (rc != EOK) {
 		free(descriptor);
-		async_answer_0(data_chandle, rc);
-		async_answer_0(chandle, rc);
-		return;
-	}
-
-	async_data_read_finalize(data_chandle, descriptor, act_len);
-	async_answer_0(chandle, EOK);
+		async_answer_0(&data, rc);
+		async_answer_0(call, rc);
+		return;
+	}
+
+	async_data_read_finalize(&data, descriptor, act_len);
+	async_answer_0(call, EOK);
 
 	free(descriptor);
 }
-
-
 
 /**
Index: uspace/lib/drv/include/dev_iface.h
===================================================================
--- uspace/lib/drv/include/dev_iface.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/drv/include/dev_iface.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -49,8 +49,7 @@
  * devices driver.
  */
-typedef void remote_iface_func_t(struct ddf_fun *, void *, cap_call_handle_t,
-    ipc_call_t *);
+typedef void remote_iface_func_t(struct ddf_fun *, void *, ipc_call_t *);
 typedef remote_iface_func_t *remote_iface_func_ptr_t;
-typedef void remote_handler_t(struct ddf_fun *, cap_call_handle_t, ipc_call_t *);
+typedef void remote_handler_t(struct ddf_fun *, ipc_call_t *);
 
 typedef struct {
Index: uspace/lib/ext4/src/ops.c
===================================================================
--- uspace/lib/ext4/src/ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/ext4/src/ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -58,7 +58,7 @@
 /* Forward declarations of auxiliary functions */
 
-static errno_t ext4_read_directory(cap_call_handle_t, aoff64_t, size_t,
+static errno_t ext4_read_directory(ipc_call_t *, aoff64_t, size_t,
     ext4_instance_t *, ext4_inode_ref_t *, size_t *);
-static errno_t ext4_read_file(cap_call_handle_t, aoff64_t, size_t, ext4_instance_t *,
+static errno_t ext4_read_file(ipc_call_t *, aoff64_t, size_t, ext4_instance_t *,
     ext4_inode_ref_t *, size_t *);
 static bool ext4_is_dots(const uint8_t *, size_t);
@@ -1021,8 +1021,8 @@
 	 * Receive the read request.
 	 */
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1031,5 +1031,5 @@
 	errno_t rc = ext4_instance_get(service_id, &inst);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		return rc;
 	}
@@ -1039,5 +1039,5 @@
 	rc = ext4_filesystem_get_inode_ref(inst->filesystem, index, &inode_ref);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		return rc;
 	}
@@ -1046,13 +1046,13 @@
 	if (ext4_inode_is_type(inst->filesystem->superblock, inode_ref->inode,
 	    EXT4_INODE_MODE_FILE)) {
-		rc = ext4_read_file(chandle, pos, size, inst, inode_ref,
+		rc = ext4_read_file(&call, pos, size, inst, inode_ref,
 		    rbytes);
 	} else if (ext4_inode_is_type(inst->filesystem->superblock,
 	    inode_ref->inode, EXT4_INODE_MODE_DIRECTORY)) {
-		rc = ext4_read_directory(chandle, pos, size, inst, inode_ref,
+		rc = ext4_read_directory(&call, pos, size, inst, inode_ref,
 		    rbytes);
 	} else {
 		/* Other inode types not supported */
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&call, ENOTSUP);
 		rc = ENOTSUP;
 	}
@@ -1084,5 +1084,5 @@
 /** Read data from directory.
  *
- * @param chandle    IPC id of call (for communication)
+ * @param call      IPC call
  * @param pos       Position to start reading from
  * @param size      How many bytes to read
@@ -1094,5 +1094,5 @@
  *
  */
-errno_t ext4_read_directory(cap_call_handle_t chandle, aoff64_t pos, size_t size,
+errno_t ext4_read_directory(ipc_call_t *call, aoff64_t pos, size_t size,
     ext4_instance_t *inst, ext4_inode_ref_t *inode_ref, size_t *rbytes)
 {
@@ -1100,5 +1100,5 @@
 	errno_t rc = ext4_directory_iterator_init(&it, inode_ref, pos);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return rc;
 	}
@@ -1129,5 +1129,5 @@
 		if (buf == NULL) {
 			ext4_directory_iterator_fini(&it);
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return ENOMEM;
 		}
@@ -1137,5 +1137,5 @@
 		found = true;
 
-		(void) async_data_read_finalize(chandle, buf, name_size + 1);
+		(void) async_data_read_finalize(call, buf, name_size + 1);
 		free(buf);
 		break;
@@ -1145,5 +1145,5 @@
 		if (rc != EOK) {
 			ext4_directory_iterator_fini(&it);
-			async_answer_0(chandle, rc);
+			async_answer_0(call, rc);
 			return rc;
 		}
@@ -1168,5 +1168,5 @@
 		return EOK;
 	} else {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return ENOENT;
 	}
@@ -1175,5 +1175,5 @@
 /** Read data from file.
  *
- * @param chandle    IPC id of call (for communication)
+ * @param call      IPC call
  * @param pos       Position to start reading from
  * @param size      How many bytes to read
@@ -1185,5 +1185,5 @@
  *
  */
-errno_t ext4_read_file(cap_call_handle_t chandle, aoff64_t pos, size_t size,
+errno_t ext4_read_file(ipc_call_t *call, aoff64_t pos, size_t size,
     ext4_instance_t *inst, ext4_inode_ref_t *inode_ref, size_t *rbytes)
 {
@@ -1193,5 +1193,5 @@
 	if (pos >= file_size) {
 		/* Read 0 bytes successfully */
-		async_data_read_finalize(chandle, NULL, 0);
+		async_data_read_finalize(call, NULL, 0);
 		*rbytes = 0;
 		return EOK;
@@ -1213,5 +1213,5 @@
 	    file_block, &fs_block);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return rc;
 	}
@@ -1227,5 +1227,5 @@
 		buffer = malloc(bytes);
 		if (buffer == NULL) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(call, ENOMEM);
 			return ENOMEM;
 		}
@@ -1233,5 +1233,5 @@
 		memset(buffer, 0, bytes);
 
-		rc = async_data_read_finalize(chandle, buffer, bytes);
+		rc = async_data_read_finalize(call, buffer, bytes);
 		*rbytes = bytes;
 
@@ -1244,10 +1244,10 @@
 	rc = block_get(&block, inst->service_id, fs_block, BLOCK_FLAGS_NONE);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return rc;
 	}
 
 	assert(offset_in_block + bytes <= block_size);
-	rc = async_data_read_finalize(chandle, block->data + offset_in_block, bytes);
+	rc = async_data_read_finalize(call, block->data + offset_in_block, bytes);
 	if (rc != EOK) {
 		block_put(block);
@@ -1283,9 +1283,9 @@
 		return rc;
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_write_receive(&chandle, &len)) {
+	if (!async_data_write_receive(&call, &len)) {
 		rc = EINVAL;
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		goto exit;
 	}
@@ -1311,5 +1311,5 @@
 	    &fblock);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		goto exit;
 	}
@@ -1328,5 +1328,5 @@
 				    &fblock, true);
 				if (rc != EOK) {
-					async_answer_0(chandle, rc);
+					async_answer_0(&call, rc);
 					goto exit;
 				}
@@ -1336,5 +1336,5 @@
 			    &fblock, false);
 			if (rc != EOK) {
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				goto exit;
 			}
@@ -1342,5 +1342,5 @@
 			rc = ext4_balloc_alloc_block(inode_ref, &fblock);
 			if (rc != EOK) {
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				goto exit;
 			}
@@ -1350,5 +1350,5 @@
 			if (rc != EOK) {
 				ext4_balloc_free_block(inode_ref, fblock);
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				goto exit;
 			}
@@ -1363,5 +1363,5 @@
 	rc = block_get(&write_block, service_id, fblock, flags);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		goto exit;
 	}
@@ -1370,5 +1370,5 @@
 		memset(write_block->data, 0, block_size);
 
-	rc = async_data_write_finalize(chandle, write_block->data +
+	rc = async_data_write_finalize(&call, write_block->data +
 	    (pos % block_size), bytes);
 	if (rc != EOK) {
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/fs/libfs.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -58,7 +58,7 @@
 	((rc1) == EOK ? (rc2) : (rc1))
 
-#define answer_and_return(chandle, rc) \
+#define answer_and_return(call, rc) \
 	do { \
-		async_answer_0((chandle), (rc)); \
+		async_answer_0((call), (rc)); \
 		return; \
 	} while (0)
@@ -71,16 +71,11 @@
 static char fs_name[FS_NAME_MAXLEN + 1];
 
-static void libfs_link(libfs_ops_t *, fs_handle_t, cap_call_handle_t,
-    ipc_call_t *);
-static void libfs_lookup(libfs_ops_t *, fs_handle_t, cap_call_handle_t,
-    ipc_call_t *);
-static void libfs_stat(libfs_ops_t *, fs_handle_t, cap_call_handle_t,
-    ipc_call_t *);
-static void libfs_open_node(libfs_ops_t *, fs_handle_t, cap_call_handle_t,
-    ipc_call_t *);
-static void libfs_statfs(libfs_ops_t *, fs_handle_t, cap_call_handle_t,
-    ipc_call_t *);
-
-static void vfs_out_fsprobe(cap_call_handle_t req_handle, ipc_call_t *req)
+static void libfs_link(libfs_ops_t *, fs_handle_t, ipc_call_t *);
+static void libfs_lookup(libfs_ops_t *, fs_handle_t, ipc_call_t *);
+static void libfs_stat(libfs_ops_t *, fs_handle_t, ipc_call_t *);
+static void libfs_open_node(libfs_ops_t *, fs_handle_t, ipc_call_t *);
+static void libfs_statfs(libfs_ops_t *, fs_handle_t, ipc_call_t *);
+
+static void vfs_out_fsprobe(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -88,10 +83,10 @@
 	vfs_fs_probe_info_t info;
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if ((!async_data_read_receive(&chandle, &size)) ||
+	if ((!async_data_read_receive(&call, &size)) ||
 	    (size != sizeof(info))) {
-		async_answer_0(chandle, EIO);
-		async_answer_0(req_handle, EIO);
+		async_answer_0(&call, EIO);
+		async_answer_0(req, EIO);
 		return;
 	}
@@ -100,14 +95,14 @@
 	rc = vfs_out_ops->fsprobe(service_id, &info);
 	if (rc != EOK) {
-		async_answer_0(chandle, EIO);
-		async_answer_0(req_handle, rc);
+		async_answer_0(&call, EIO);
+		async_answer_0(req, rc);
 		return;
 	}
 
-	async_data_read_finalize(chandle, &info, sizeof(info));
-	async_answer_0(req_handle, EOK);
-}
-
-static void vfs_out_mounted(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_data_read_finalize(&call, &info, sizeof(info));
+	async_answer_0(req, EOK);
+}
+
+static void vfs_out_mounted(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -118,5 +113,5 @@
 	rc = async_data_write_accept((void **) &opts, true, 0, 0, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
@@ -127,13 +122,13 @@
 
 	if (rc == EOK) {
-		async_answer_3(req_handle, EOK, index, LOWER32(size),
+		async_answer_3(req, EOK, index, LOWER32(size),
 		    UPPER32(size));
 	} else
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 
 	free(opts);
 }
 
-static void vfs_out_unmounted(cap_call_handle_t req_handle, ipc_call_t *req)
+static void vfs_out_unmounted(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -142,18 +137,18 @@
 	rc = vfs_out_ops->unmounted(service_id);
 
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_link(cap_call_handle_t req_handle, ipc_call_t *req)
-{
-	libfs_link(libfs_ops, reg.fs_handle, req_handle, req);
-}
-
-static void vfs_out_lookup(cap_call_handle_t req_handle, ipc_call_t *req)
-{
-	libfs_lookup(libfs_ops, reg.fs_handle, req_handle, req);
-}
-
-static void vfs_out_read(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_answer_0(req, rc);
+}
+
+static void vfs_out_link(ipc_call_t *req)
+{
+	libfs_link(libfs_ops, reg.fs_handle, req);
+}
+
+static void vfs_out_lookup(ipc_call_t *req)
+{
+	libfs_lookup(libfs_ops, reg.fs_handle, req);
+}
+
+static void vfs_out_read(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -167,10 +162,10 @@
 
 	if (rc == EOK)
-		async_answer_1(req_handle, EOK, rbytes);
+		async_answer_1(req, EOK, rbytes);
 	else
-		async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_write(cap_call_handle_t req_handle, ipc_call_t *req)
+		async_answer_0(req, rc);
+}
+
+static void vfs_out_write(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -185,11 +180,11 @@
 
 	if (rc == EOK) {
-		async_answer_3(req_handle, EOK, wbytes, LOWER32(nsize),
+		async_answer_3(req, EOK, wbytes, LOWER32(nsize),
 		    UPPER32(nsize));
 	} else
-		async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_truncate(cap_call_handle_t req_handle, ipc_call_t *req)
+		async_answer_0(req, rc);
+}
+
+static void vfs_out_truncate(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -201,8 +196,8 @@
 	rc = vfs_out_ops->truncate(service_id, index, size);
 
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_close(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_answer_0(req, rc);
+}
+
+static void vfs_out_close(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -212,8 +207,8 @@
 	rc = vfs_out_ops->close(service_id, index);
 
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_destroy(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_answer_0(req, rc);
+}
+
+static void vfs_out_destroy(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -229,18 +224,18 @@
 			rc = vfs_out_ops->destroy(service_id, index);
 	}
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_open_node(cap_call_handle_t req_handle, ipc_call_t *req)
-{
-	libfs_open_node(libfs_ops, reg.fs_handle, req_handle, req);
-}
-
-static void vfs_out_stat(cap_call_handle_t req_handle, ipc_call_t *req)
-{
-	libfs_stat(libfs_ops, reg.fs_handle, req_handle, req);
-}
-
-static void vfs_out_sync(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_answer_0(req, rc);
+}
+
+static void vfs_out_open_node(ipc_call_t *req)
+{
+	libfs_open_node(libfs_ops, reg.fs_handle, req);
+}
+
+static void vfs_out_stat(ipc_call_t *req)
+{
+	libfs_stat(libfs_ops, reg.fs_handle, req);
+}
+
+static void vfs_out_sync(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -250,13 +245,13 @@
 	rc = vfs_out_ops->sync(service_id, index);
 
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_out_statfs(cap_call_handle_t req_handle, ipc_call_t *req)
-{
-	libfs_statfs(libfs_ops, reg.fs_handle, req_handle, req);
-}
-
-static void vfs_out_is_empty(cap_call_handle_t req_handle, ipc_call_t *req)
+	async_answer_0(req, rc);
+}
+
+static void vfs_out_statfs(ipc_call_t *req)
+{
+	libfs_statfs(libfs_ops, reg.fs_handle, req);
+}
+
+static void vfs_out_is_empty(ipc_call_t *req)
 {
 	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
@@ -267,7 +262,7 @@
 	rc = libfs_ops->node_get(&node, service_id, index);
 	if (rc != EOK)
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 	if (node == NULL)
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 
 	bool children = false;
@@ -276,12 +271,11 @@
 
 	if (rc != EOK)
-		async_answer_0(req_handle, rc);
-	async_answer_0(req_handle, children ? ENOTEMPTY : EOK);
-}
-
-static void vfs_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
-{
-	if (icall_handle) {
+		async_answer_0(req, rc);
+	async_answer_0(req, children ? ENOTEMPTY : EOK);
+}
+
+static void vfs_connection(ipc_call_t *icall, void *arg)
+{
+	if (icall->cap_handle) {
 		/*
 		 * This only happens for connections opened by
@@ -289,10 +283,10 @@
 		 * created by IPC_M_CONNECT_TO_ME.
 		 */
-		async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EOK);
 	}
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -301,50 +295,50 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_OUT_FSPROBE:
-			vfs_out_fsprobe(chandle, &call);
+			vfs_out_fsprobe(&call);
 			break;
 		case VFS_OUT_MOUNTED:
-			vfs_out_mounted(chandle, &call);
+			vfs_out_mounted(&call);
 			break;
 		case VFS_OUT_UNMOUNTED:
-			vfs_out_unmounted(chandle, &call);
+			vfs_out_unmounted(&call);
 			break;
 		case VFS_OUT_LINK:
-			vfs_out_link(chandle, &call);
+			vfs_out_link(&call);
 			break;
 		case VFS_OUT_LOOKUP:
-			vfs_out_lookup(chandle, &call);
+			vfs_out_lookup(&call);
 			break;
 		case VFS_OUT_READ:
-			vfs_out_read(chandle, &call);
+			vfs_out_read(&call);
 			break;
 		case VFS_OUT_WRITE:
-			vfs_out_write(chandle, &call);
+			vfs_out_write(&call);
 			break;
 		case VFS_OUT_TRUNCATE:
-			vfs_out_truncate(chandle, &call);
+			vfs_out_truncate(&call);
 			break;
 		case VFS_OUT_CLOSE:
-			vfs_out_close(chandle, &call);
+			vfs_out_close(&call);
 			break;
 		case VFS_OUT_DESTROY:
-			vfs_out_destroy(chandle, &call);
+			vfs_out_destroy(&call);
 			break;
 		case VFS_OUT_OPEN_NODE:
-			vfs_out_open_node(chandle, &call);
+			vfs_out_open_node(&call);
 			break;
 		case VFS_OUT_STAT:
-			vfs_out_stat(chandle, &call);
+			vfs_out_stat(&call);
 			break;
 		case VFS_OUT_SYNC:
-			vfs_out_sync(chandle, &call);
+			vfs_out_sync(&call);
 			break;
 		case VFS_OUT_STATFS:
-			vfs_out_statfs(chandle, &call);
+			vfs_out_statfs(&call);
 			break;
 		case VFS_OUT_IS_EMPTY:
-			vfs_out_is_empty(chandle, &call);
+			vfs_out_is_empty(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
@@ -481,20 +475,22 @@
 static errno_t receive_fname(char *buffer)
 {
+	ipc_call_t call;
 	size_t size;
-	cap_call_handle_t wcall;
-
-	if (!async_data_write_receive(&wcall, &size))
+
+	if (!async_data_write_receive(&call, &size))
 		return ENOENT;
+
 	if (size > NAME_MAX + 1) {
-		async_answer_0(wcall, ERANGE);
+		async_answer_0(&call, ERANGE);
 		return ERANGE;
 	}
-	return async_data_write_finalize(wcall, buffer, size);
+
+	return async_data_write_finalize(&call, buffer, size);
 }
 
 /** Link a file at a path.
+ *
  */
-void libfs_link(libfs_ops_t *ops, fs_handle_t fs_handle,
-    cap_call_handle_t req_handle, ipc_call_t *req)
+void libfs_link(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_call_t *req)
 {
 	service_id_t parent_sid = IPC_GET_ARG1(*req);
@@ -505,5 +501,5 @@
 	errno_t rc = receive_fname(component);
 	if (rc != EOK) {
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
@@ -512,5 +508,5 @@
 	rc = ops->node_get(&parent, parent_sid, parent_index);
 	if (parent == NULL) {
-		async_answer_0(req_handle, rc == EOK ? EBADF : rc);
+		async_answer_0(req, rc == EOK ? EBADF : rc);
 		return;
 	}
@@ -519,5 +515,5 @@
 	rc = ops->node_get(&child, parent_sid, child_index);
 	if (child == NULL) {
-		async_answer_0(req_handle, rc == EOK ? EBADF : rc);
+		async_answer_0(req, rc == EOK ? EBADF : rc);
 		ops->node_put(parent);
 		return;
@@ -527,5 +523,5 @@
 	ops->node_put(parent);
 	ops->node_put(child);
-	async_answer_0(req_handle, rc);
+	async_answer_0(req, rc);
 }
 
@@ -535,14 +531,12 @@
  * as returned by the canonify() function.
  *
- * @param ops         libfs operations structure with function pointers to
- *                    file system implementation
- * @param fs_handle   File system handle of the file system where to perform
- *                    the lookup.
- * @param req_handle  Call handle of the VFS_OUT_LOOKUP request.
- * @param request     VFS_OUT_LOOKUP request data itself.
+ * @param ops       libfs operations structure with function pointers to
+ *                  file system implementation
+ * @param fs_handle File system handle of the file system where to perform
+ *                  the lookup.
+ * @param req       VFS_OUT_LOOKUP request data itself.
  *
  */
-void libfs_lookup(libfs_ops_t *ops, fs_handle_t fs_handle,
-    cap_call_handle_t req_handle, ipc_call_t *req)
+void libfs_lookup(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_call_t *req)
 {
 	unsigned first = IPC_GET_ARG1(*req);
@@ -567,5 +561,5 @@
 	rc = ops->node_get(&cur, service_id, index);
 	if (rc != EOK) {
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		goto out;
 	}
@@ -584,5 +578,5 @@
 
 		if (!ops->is_directory(cur)) {
-			async_answer_0(req_handle, ENOTDIR);
+			async_answer_0(req, ENOTDIR);
 			goto out;
 		}
@@ -593,5 +587,5 @@
 		assert(rc != ERANGE);
 		if (rc != EOK) {
-			async_answer_0(req_handle, rc);
+			async_answer_0(req, rc);
 			goto out;
 		}
@@ -607,5 +601,5 @@
 		rc = ops->match(&tmp, cur, component);
 		if (rc != EOK) {
-			async_answer_0(req_handle, rc);
+			async_answer_0(req, rc);
 			goto out;
 		}
@@ -615,5 +609,5 @@
 			rc = ops->node_put(par);
 			if (rc != EOK) {
-				async_answer_0(req_handle, rc);
+				async_answer_0(req, rc);
 				goto out;
 			}
@@ -636,10 +630,10 @@
 
 	if (cur && (lflag & L_FILE) && (ops->is_directory(cur))) {
-		async_answer_0(req_handle, EISDIR);
+		async_answer_0(req, EISDIR);
 		goto out;
 	}
 
 	if (cur && (lflag & L_DIRECTORY) && (ops->is_file(cur))) {
-		async_answer_0(req_handle, ENOTDIR);
+		async_answer_0(req, ENOTDIR);
 		goto out;
 	}
@@ -649,9 +643,9 @@
 	if (lflag & L_UNLINK) {
 		if (!cur) {
-			async_answer_0(req_handle, ENOENT);
+			async_answer_0(req, ENOENT);
 			goto out;
 		}
 		if (!par) {
-			async_answer_0(req_handle, EINVAL);
+			async_answer_0(req, EINVAL);
 			goto out;
 		}
@@ -660,10 +654,10 @@
 		if (rc == EOK) {
 			aoff64_t size = ops->size_get(cur);
-			async_answer_5(req_handle, EOK, fs_handle,
+			async_answer_5(req, EOK, fs_handle,
 			    ops->index_get(cur),
 			    (ops->is_directory(cur) << 16) | last,
 			    LOWER32(size), UPPER32(size));
 		} else {
-			async_answer_0(req_handle, rc);
+			async_answer_0(req, rc);
 		}
 		goto out;
@@ -674,5 +668,5 @@
 	if (lflag & L_CREATE) {
 		if (cur && (lflag & L_EXCLUSIVE)) {
-			async_answer_0(req_handle, EEXIST);
+			async_answer_0(req, EEXIST);
 			goto out;
 		}
@@ -682,9 +676,9 @@
 			    lflag & (L_FILE | L_DIRECTORY));
 			if (rc != EOK) {
-				async_answer_0(req_handle, rc);
+				async_answer_0(req, rc);
 				goto out;
 			}
 			if (!cur) {
-				async_answer_0(req_handle, ENOSPC);
+				async_answer_0(req, ENOSPC);
 				goto out;
 			}
@@ -694,5 +688,5 @@
 				(void) ops->destroy(cur);
 				cur = NULL;
-				async_answer_0(req_handle, rc);
+				async_answer_0(req, rc);
 				goto out;
 			}
@@ -703,5 +697,5 @@
 out1:
 	if (!cur) {
-		async_answer_5(req_handle, EOK, fs_handle, ops->index_get(par),
+		async_answer_5(req, EOK, fs_handle, ops->index_get(par),
 		    (ops->is_directory(par) << 16) | last_next,
 		    LOWER32(ops->size_get(par)), UPPER32(ops->size_get(par)));
@@ -709,5 +703,5 @@
 	}
 
-	async_answer_5(req_handle, EOK, fs_handle, ops->index_get(cur),
+	async_answer_5(req, EOK, fs_handle, ops->index_get(cur),
 	    (ops->is_directory(cur) << 16) | last, LOWER32(ops->size_get(cur)),
 	    UPPER32(ops->size_get(cur)));
@@ -724,21 +718,20 @@
 }
 
-void libfs_stat(libfs_ops_t *ops, fs_handle_t fs_handle,
-    cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);
-	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*request);
+void libfs_stat(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_call_t *req)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
+	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*req);
 
 	fs_node_t *fn;
 	errno_t rc = ops->node_get(&fn, service_id, index);
-	on_error(rc, answer_and_return(req_handle, rc));
-
-	cap_call_handle_t chandle;
+	on_error(rc, answer_and_return(req, rc));
+
+	ipc_call_t call;
 	size_t size;
-	if ((!async_data_read_receive(&chandle, &size)) ||
+	if ((!async_data_read_receive(&call, &size)) ||
 	    (size != sizeof(vfs_stat_t))) {
 		ops->node_put(fn);
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -758,22 +751,20 @@
 	ops->node_put(fn);
 
-
-	async_data_read_finalize(chandle, &stat, sizeof(vfs_stat_t));
-	async_answer_0(req_handle, EOK);
-}
-
-void libfs_statfs(libfs_ops_t *ops, fs_handle_t fs_handle,
-    cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);
-	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*request);
+	async_data_read_finalize(&call, &stat, sizeof(vfs_stat_t));
+	async_answer_0(req, EOK);
+}
+
+void libfs_statfs(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_call_t *req)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
+	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*req);
 
 	fs_node_t *fn;
 	errno_t rc = ops->node_get(&fn, service_id, index);
-	on_error(rc, answer_and_return(req_handle, rc));
-
-	cap_call_handle_t chandle;
+	on_error(rc, answer_and_return(req, rc));
+
+	ipc_call_t call;
 	size_t size;
-	if ((!async_data_read_receive(&chandle, &size)) ||
+	if ((!async_data_read_receive(&call, &size)) ||
 	    (size != sizeof(vfs_statfs_t))) {
 		goto error;
@@ -804,12 +795,12 @@
 
 	ops->node_put(fn);
-	async_data_read_finalize(chandle, &st, sizeof(vfs_statfs_t));
-	async_answer_0(req_handle, EOK);
+	async_data_read_finalize(&call, &st, sizeof(vfs_statfs_t));
+	async_answer_0(req, EOK);
 	return;
 
 error:
 	ops->node_put(fn);
-	async_answer_0(chandle, EINVAL);
-	async_answer_0(req_handle, EINVAL);
+	async_answer_0(&call, EINVAL);
+	async_answer_0(req, EINVAL);
 }
 
@@ -817,22 +808,20 @@
 /** Open VFS triplet.
  *
- * @param ops         libfs operations structure with function pointers to
- *                    file system implementation
- * @param req_handle  Call handle of the VFS_OUT_OPEN_NODE request.
- * @param request     VFS_OUT_OPEN_NODE request data itself.
+ * @param ops libfs operations structure with function pointers to
+ *            file system implementation
+ * @param req VFS_OUT_OPEN_NODE request data itself.
  *
  */
-void libfs_open_node(libfs_ops_t *ops, fs_handle_t fs_handle,
-    cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	service_id_t service_id = IPC_GET_ARG1(*request);
-	fs_index_t index = IPC_GET_ARG2(*request);
+void libfs_open_node(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_call_t *req)
+{
+	service_id_t service_id = IPC_GET_ARG1(*req);
+	fs_index_t index = IPC_GET_ARG2(*req);
 
 	fs_node_t *fn;
 	errno_t rc = ops->node_get(&fn, service_id, index);
-	on_error(rc, answer_and_return(req_handle, rc));
+	on_error(rc, answer_and_return(req, rc));
 
 	if (fn == NULL) {
-		async_answer_0(req_handle, ENOENT);
+		async_answer_0(req, ENOENT);
 		return;
 	}
@@ -840,5 +829,5 @@
 	rc = ops->node_open(fn);
 	aoff64_t size = ops->size_get(fn);
-	async_answer_4(req_handle, rc, LOWER32(size), UPPER32(size),
+	async_answer_4(req, rc, LOWER32(size), UPPER32(size),
 	    ops->lnkcnt_get(fn),
 	    (ops->is_file(fn) ? L_FILE : 0) |
@@ -891,4 +880,5 @@
 {
 	fibril_mutex_lock(&instances_mutex);
+
 	list_foreach(instances_list, link, fs_instance_t, inst) {
 		if (inst->service_id == service_id) {
@@ -898,4 +888,5 @@
 		}
 	}
+
 	fibril_mutex_unlock(&instances_mutex);
 	return ENOENT;
@@ -905,4 +896,5 @@
 {
 	fibril_mutex_lock(&instances_mutex);
+
 	list_foreach(instances_list, link, fs_instance_t, inst) {
 		if (inst->service_id == service_id) {
@@ -913,4 +905,5 @@
 		}
 	}
+
 	fibril_mutex_unlock(&instances_mutex);
 	return ENOENT;
Index: uspace/lib/graph/graph.c
===================================================================
--- uspace/lib/graph/graph.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/graph/graph.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -239,12 +239,12 @@
 }
 
-static void vs_claim(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void vs_claim(visualizer_t *vs, ipc_call_t *icall)
 {
 	vs->client_side_handle = IPC_GET_ARG1(*icall);
 	errno_t rc = vs->ops.claim(vs);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vs_yield(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void vs_yield(visualizer_t *vs, ipc_call_t *icall)
 {
 	/* Deallocate resources for the current mode. */
@@ -266,15 +266,15 @@
 		vs->mode_set = false;
 
-	async_answer_0(icall_handle, rc);
-}
-
-static void vs_enumerate_modes(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, rc);
+}
+
+static void vs_enumerate_modes(visualizer_t *vs, ipc_call_t *icall)
+{
 	size_t len;
 
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	ipc_call_t call;
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -287,9 +287,9 @@
 		    list_get_instance(link, vslmode_list_element_t, link);
 
-		errno_t rc = async_data_read_finalize(chandle, &mode_elem->mode, len);
-		async_answer_0(icall_handle, rc);
+		errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len);
+		async_answer_0(icall, rc);
 	} else {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 	}
 
@@ -297,12 +297,11 @@
 }
 
-static void vs_get_default_mode(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void vs_get_default_mode(visualizer_t *vs, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t len;
-
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -319,10 +318,10 @@
 
 	if (mode_elem != NULL) {
-		errno_t rc = async_data_read_finalize(chandle, &mode_elem->mode, len);
-		async_answer_0(icall_handle, rc);
+		errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len);
+		async_answer_0(icall, rc);
 	} else {
 		fibril_mutex_unlock(&vs->mode_mtx);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 	}
 
@@ -330,32 +329,30 @@
 }
 
-static void vs_get_current_mode(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void vs_get_current_mode(visualizer_t *vs, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t len;
-
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (vs->mode_set) {
-		errno_t rc = async_data_read_finalize(chandle, &vs->cur_mode, len);
-		async_answer_0(icall_handle, rc);
+		errno_t rc = async_data_read_finalize(&call, &vs->cur_mode, len);
+		async_answer_0(icall, rc);
 	} else {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
-	}
-}
-
-static void vs_get_mode(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
+	}
+}
+
+static void vs_get_mode(visualizer_t *vs, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t len;
-
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -374,9 +371,9 @@
 
 	if (mode_elem != NULL) {
-		errno_t rc = async_data_read_finalize(chandle, &mode_elem->mode, len);
-		async_answer_0(icall_handle, rc);
+		errno_t rc = async_data_read_finalize(&call, &mode_elem->mode, len);
+		async_answer_0(icall, rc);
 	} else {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 	}
 
@@ -384,14 +381,14 @@
 }
 
-static void vs_set_mode(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void vs_set_mode(visualizer_t *vs, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	unsigned int flags;
 
 	/* Retrieve the shared cell storage for the new mode. */
-	if (!async_share_out_receive(&chandle, &size, &flags)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_share_out_receive(&call, &size, &flags)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -414,6 +411,6 @@
 	if (mode_elem == NULL) {
 		fibril_mutex_unlock(&vs->mode_mtx);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -425,13 +422,13 @@
 	/* Check whether the mode is still up-to-date. */
 	if (new_mode.version != mode_version) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	void *new_cell_storage;
-	errno_t rc = async_share_out_finalize(chandle, &new_cell_storage);
+	errno_t rc = async_share_out_finalize(&call, &new_cell_storage);
 	if ((rc != EOK) || (new_cell_storage == AS_MAP_FAILED)) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -443,5 +440,5 @@
 	if (rc != EOK) {
 		as_area_destroy(new_cell_storage);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -466,8 +463,8 @@
 	vs->mode_set = true;
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vs_update_damaged_region(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void vs_update_damaged_region(visualizer_t *vs, ipc_call_t *icall)
 {
 	sysarg_t x_offset = (IPC_GET_ARG5(*icall) >> 16);
@@ -478,48 +475,45 @@
 	    IPC_GET_ARG3(*icall), IPC_GET_ARG4(*icall),
 	    x_offset, y_offset);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vs_suspend(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void vs_suspend(visualizer_t *vs, ipc_call_t *icall)
 {
 	errno_t rc = vs->ops.suspend(vs);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vs_wakeup(visualizer_t *vs, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void vs_wakeup(visualizer_t *vs, ipc_call_t *icall)
 {
 	errno_t rc = vs->ops.wakeup(vs);
-	async_answer_0(icall_handle, rc);
-}
-
-void graph_visualizer_connection(visualizer_t *vs,
-    cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	ipc_call_t call;
-	cap_call_handle_t chandle;
-
+	async_answer_0(icall, rc);
+}
+
+void graph_visualizer_connection(visualizer_t *vs, ipc_call_t *icall, void *arg)
+{
 	/* Claim the visualizer. */
 	if (!cas(&vs->ref_cnt, 0, 1)) {
-		async_answer_0(icall_handle, ELIMIT);
+		async_answer_0(icall, ELIMIT);
 		return;
 	}
 
 	/* Accept the connection. */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	/* Establish callback session. */
-	chandle = async_get_call(&call);
+	ipc_call_t call;
+	async_get_call(&call);
 	vs->notif_sess = async_callback_receive_start(EXCHANGE_SERIALIZE, &call);
 	if (vs->notif_sess != NULL)
-		async_answer_0(chandle, EOK);
+		async_answer_0(&call, EOK);
 	else
-		async_answer_0(chandle, ELIMIT);
+		async_answer_0(&call, ELIMIT);
 
 	/* Enter command loop. */
 	while (true) {
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
@@ -527,35 +521,35 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case VISUALIZER_CLAIM:
-			vs_claim(vs, chandle, &call);
+			vs_claim(vs, &call);
 			break;
 		case VISUALIZER_YIELD:
-			vs_yield(vs, chandle, &call);
+			vs_yield(vs, &call);
 			goto terminate;
 		case VISUALIZER_ENUMERATE_MODES:
-			vs_enumerate_modes(vs, chandle, &call);
+			vs_enumerate_modes(vs, &call);
 			break;
 		case VISUALIZER_GET_DEFAULT_MODE:
-			vs_get_default_mode(vs, chandle, &call);
+			vs_get_default_mode(vs, &call);
 			break;
 		case VISUALIZER_GET_CURRENT_MODE:
-			vs_get_current_mode(vs, chandle, &call);
+			vs_get_current_mode(vs, &call);
 			break;
 		case VISUALIZER_GET_MODE:
-			vs_get_mode(vs, chandle, &call);
+			vs_get_mode(vs, &call);
 			break;
 		case VISUALIZER_SET_MODE:
-			vs_set_mode(vs, chandle, &call);
+			vs_set_mode(vs, &call);
 			break;
 		case VISUALIZER_UPDATE_DAMAGED_REGION:
-			vs_update_damaged_region(vs, chandle, &call);
+			vs_update_damaged_region(vs, &call);
 			break;
 		case VISUALIZER_SUSPEND:
-			vs_suspend(vs, chandle, &call);
+			vs_suspend(vs, &call);
 			break;
 		case VISUALIZER_WAKE_UP:
-			vs_wakeup(vs, chandle, &call);
+			vs_wakeup(vs, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			goto terminate;
 		}
@@ -568,22 +562,19 @@
 }
 
-void graph_renderer_connection(renderer_t *rnd,
-    cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void graph_renderer_connection(renderer_t *rnd, ipc_call_t *icall, void *arg)
 {
 	// TODO
-
-	ipc_call_t call;
-	cap_call_handle_t chandle;
 
 	/* Accept the connection. */
 	atomic_inc(&rnd->ref_cnt);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	/* Enter command loop. */
 	while (true) {
-		chandle = async_get_call(&call);
+		ipc_call_t call;
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
@@ -591,5 +582,5 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			goto terminate;
 		}
@@ -600,5 +591,5 @@
 }
 
-void graph_client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void graph_client_connection(ipc_call_t *icall, void *arg)
 {
 	/* Find the visualizer or renderer with the given service ID. */
@@ -607,9 +598,9 @@
 
 	if (vs != NULL)
-		graph_visualizer_connection(vs, icall_handle, icall, arg);
+		graph_visualizer_connection(vs, icall, arg);
 	else if (rnd != NULL)
-		graph_renderer_connection(rnd, icall_handle, icall, arg);
+		graph_renderer_connection(rnd, icall, arg);
 	else
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 }
 
Index: uspace/lib/graph/graph.h
===================================================================
--- uspace/lib/graph/graph.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/graph/graph.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -359,11 +359,11 @@
 
 /** Shall be registered to libdrv by physical device driver. */
-extern void graph_visualizer_connection(visualizer_t *, cap_call_handle_t, ipc_call_t *, void *);
+extern void graph_visualizer_connection(visualizer_t *, ipc_call_t *, void *);
 
 /** Shall be registered to libdrv by physical device driver. */
-extern void graph_renderer_connection(renderer_t *, cap_call_handle_t, ipc_call_t *, void *);
+extern void graph_renderer_connection(renderer_t *, ipc_call_t *, void *);
 
 /** Shall be registered to location service by emulated device driver. */
-extern void graph_client_connection(cap_call_handle_t, ipc_call_t *, void *);
+extern void graph_client_connection(ipc_call_t *, void *);
 
 #endif
Index: uspace/lib/gui/terminal.c
===================================================================
--- uspace/lib/gui/terminal.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/gui/terminal.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -678,5 +678,5 @@
 }
 
-static void term_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void term_connection(ipc_call_t *icall, void *arg)
 {
 	terminal_t *term = NULL;
@@ -690,5 +690,5 @@
 
 	if (term == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -697,5 +697,5 @@
 		chargrid_set_cursor_visibility(term->frontbuf, true);
 
-	con_conn(icall_handle, icall, &term->srvs);
+	con_conn(icall, &term->srvs);
 }
 
Index: uspace/lib/hound/include/hound/protocol.h
===================================================================
--- uspace/lib/hound/include/hound/protocol.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/hound/include/hound/protocol.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -56,5 +56,7 @@
 
 typedef async_sess_t hound_sess_t;
-typedef cap_call_handle_t hound_context_id_t;
+
+typedef struct {
+} *hound_context_id_t;
 
 hound_sess_t *hound_service_connect(const char *service);
@@ -125,7 +127,6 @@
 } hound_server_iface_t;
 
-void hound_service_set_server_iface(const hound_server_iface_t *iface);
-
-void hound_connection_handler(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+extern void hound_service_set_server_iface(const hound_server_iface_t *);
+extern void hound_connection_handler(ipc_call_t *, void *);
 
 #endif
Index: uspace/lib/hound/src/protocol.c
===================================================================
--- uspace/lib/hound/src/protocol.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/hound/src/protocol.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -142,5 +142,5 @@
 	async_exchange_end(exch);
 	if (ret == EOK) {
-		*id = (hound_context_id_t)IPC_GET_ARG1(call);
+		*id = (hound_context_id_t) IPC_GET_ARG1(call);
 	}
 
@@ -384,12 +384,11 @@
 /** Server side implementation of the hound protocol. IPC connection handler.
  *
- * @param icall_handle   Initial call handle
- * @param icall          Pointer to initial call structure.
- * @param arg            (unused)
- */
-void hound_connection_handler(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
-{
-	hound_context_id_t id;
+ * @param icall Pointer to initial call structure.
+ * @param arg   (unused)
+ *
+ */
+void hound_connection_handler(ipc_call_t *icall, void *arg)
+{
+	hound_context_id_t context;
 	errno_t ret;
 	int flags;
@@ -399,7 +398,7 @@
 	/* Accept connection if there is a valid iface*/
 	if (server_iface) {
-		async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EOK);
 	} else {
-		async_answer_0(icall_handle, ENOTSUP);
+		async_answer_0(icall, ENOTSUP);
 		return;
 	}
@@ -407,10 +406,11 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
+
 		switch (IPC_GET_IMETHOD(call)) {
 		case IPC_M_HOUND_CONTEXT_REGISTER:
 			/* check interface functions */
 			if (!server_iface || !server_iface->add_context) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
@@ -421,17 +421,17 @@
 			ret = async_data_write_accept(&name, true, 0, 0, 0, 0);
 			if (ret != EOK) {
-				async_answer_0(chandle, ret);
-				break;
-			}
-
-			id = 0;
+				async_answer_0(&call, ret);
+				break;
+			}
+
+			context = 0;
 			ret = server_iface->add_context(server_iface->server,
-			    &id, name, record);
+			    &context, name, record);
 			/** new context should create a copy */
 			free(name);
 			if (ret != EOK) {
-				async_answer_0(chandle, ret);
+				async_answer_0(&call, ret);
 			} else {
-				async_answer_1(chandle, EOK, CAP_HANDLE_RAW(id));
+				async_answer_1(&call, EOK, CAP_HANDLE_RAW(context));
 			}
 			break;
@@ -439,18 +439,18 @@
 			/* check interface functions */
 			if (!server_iface || !server_iface->rem_context) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
 
 			/* get id, 1st param */
-			id = (cap_handle_t) IPC_GET_ARG1(call);
+			context = (hound_context_id_t) IPC_GET_ARG1(call);
 			ret = server_iface->rem_context(server_iface->server,
-			    id);
-			async_answer_0(chandle, ret);
+			    context);
+			async_answer_0(&call, ret);
 			break;
 		case IPC_M_HOUND_GET_LIST:
 			/* check interface functions */
 			if (!server_iface || !server_iface->get_list) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
@@ -480,5 +480,5 @@
 			if (count && !sizes)
 				ret = ENOMEM;
-			async_answer_1(chandle, ret, count);
+			async_answer_1(&call, ret, count);
 
 			/* We are done */
@@ -491,7 +491,7 @@
 
 			/* Send sizes table */
-			cap_call_handle_t id;
+			ipc_call_t id;
 			if (async_data_read_receive(&id, NULL)) {
-				ret = async_data_read_finalize(id, sizes,
+				ret = async_data_read_finalize(&id, sizes,
 				    count * sizeof(size_t));
 			}
@@ -501,8 +501,8 @@
 			for (unsigned i = 0; i < count; ++i) {
 				size_t size = str_size(list[i]);
-				cap_call_handle_t id;
+				ipc_call_t id;
 				if (ret == EOK &&
 				    async_data_read_receive(&id, NULL)) {
-					ret = async_data_read_finalize(id,
+					ret = async_data_read_finalize(&id,
 					    list[i], size);
 				}
@@ -514,5 +514,5 @@
 			/* check interface functions */
 			if (!server_iface || !server_iface->connect) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
@@ -534,10 +534,10 @@
 			free(source);
 			free(sink);
-			async_answer_0(chandle, ret);
+			async_answer_0(&call, ret);
 			break;
 		case IPC_M_HOUND_DISCONNECT:
 			/* check interface functions */
 			if (!server_iface || !server_iface->disconnect) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
@@ -558,5 +558,5 @@
 			free(source);
 			free(sink);
-			async_answer_0(chandle, ret);
+			async_answer_0(&call, ret);
 			break;
 		case IPC_M_HOUND_STREAM_ENTER:
@@ -565,10 +565,10 @@
 			    !server_iface->add_stream ||
 			    !server_iface->rem_stream) {
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				break;
 			}
 
 			/* get parameters */
-			id = (cap_handle_t) IPC_GET_ARG1(call);
+			context = (hound_context_id_t) IPC_GET_ARG1(call);
 			flags = IPC_GET_ARG2(call);
 			const format_convert_t c = { .arg = IPC_GET_ARG3(call) };
@@ -582,14 +582,14 @@
 			void *stream;
 			ret = server_iface->add_stream(server_iface->server,
-			    id, flags, f, bsize, &stream);
+			    context, flags, f, bsize, &stream);
 			if (ret != EOK) {
-				async_answer_0(chandle, ret);
+				async_answer_0(&call, ret);
 				break;
 			}
 			const bool rec = server_iface->is_record_context(
-			    server_iface->server, id);
+			    server_iface->server, context);
 			if (rec) {
 				if (server_iface->stream_data_read) {
-					async_answer_0(chandle, EOK);
+					async_answer_0(&call, EOK);
 					/* start answering read calls */
 					hound_server_write_data(stream);
@@ -597,9 +597,9 @@
 					    server_iface->server, stream);
 				} else {
-					async_answer_0(chandle, ENOTSUP);
+					async_answer_0(&call, ENOTSUP);
 				}
 			} else {
 				if (server_iface->stream_data_write) {
-					async_answer_0(chandle, EOK);
+					async_answer_0(&call, EOK);
 					/* accept write calls */
 					hound_server_read_data(stream);
@@ -607,5 +607,5 @@
 					    server_iface->server, stream);
 				} else {
-					async_answer_0(chandle, ENOTSUP);
+					async_answer_0(&call, ENOTSUP);
 				}
 			}
@@ -614,8 +614,8 @@
 		case IPC_M_HOUND_STREAM_DRAIN:
 			/* Stream exit/drain is only allowed in stream context*/
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			return;
 		}
@@ -629,10 +629,10 @@
 static void hound_server_read_data(void *stream)
 {
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	size_t size = 0;
 	errno_t ret_answer = EOK;
+
 	/* accept data write or drain */
-	while (async_data_write_receive_call(&chandle, &call, &size) ||
+	while (async_data_write_receive(&call, &size) ||
 	    (IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_DRAIN)) {
 		/* check drain first */
@@ -641,5 +641,5 @@
 			if (server_iface->drain_stream)
 				ret = server_iface->drain_stream(stream);
-			async_answer_0(chandle, ret);
+			async_answer_0(&call, ret);
 			continue;
 		}
@@ -647,5 +647,5 @@
 		/* there was an error last time */
 		if (ret_answer != EOK) {
-			async_answer_0(chandle, ret_answer);
+			async_answer_0(&call, ret_answer);
 			continue;
 		}
@@ -653,8 +653,8 @@
 		char *buffer = malloc(size);
 		if (!buffer) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(&call, ENOMEM);
 			continue;
 		}
-		const errno_t ret = async_data_write_finalize(chandle, buffer, size);
+		const errno_t ret = async_data_write_finalize(&call, buffer, size);
 		if (ret == EOK) {
 			/* push data to stream */
@@ -666,5 +666,5 @@
 	    EOK : EINVAL;
 
-	async_answer_0(chandle, ret);
+	async_answer_0(&call, ret);
 }
 
@@ -676,10 +676,10 @@
 {
 
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	size_t size = 0;
 	errno_t ret_answer = EOK;
+
 	/* accept data read and drain */
-	while (async_data_read_receive_call(&chandle, &call, &size) ||
+	while (async_data_read_receive(&call, &size) ||
 	    (IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_DRAIN)) {
 		/* drain does not make much sense but it is allowed */
@@ -688,15 +688,15 @@
 			if (server_iface->drain_stream)
 				ret = server_iface->drain_stream(stream);
-			async_answer_0(chandle, ret);
+			async_answer_0(&call, ret);
 			continue;
 		}
 		/* there was an error last time */
 		if (ret_answer != EOK) {
-			async_answer_0(chandle, ret_answer);
+			async_answer_0(&call, ret_answer);
 			continue;
 		}
 		char *buffer = malloc(size);
 		if (!buffer) {
-			async_answer_0(chandle, ENOMEM);
+			async_answer_0(&call, ENOMEM);
 			continue;
 		}
@@ -704,5 +704,5 @@
 		if (ret == EOK) {
 			ret_answer =
-			    async_data_read_finalize(chandle, buffer, size);
+			    async_data_read_finalize(&call, buffer, size);
 		}
 	}
@@ -710,5 +710,5 @@
 	    EOK : EINVAL;
 
-	async_answer_0(chandle, ret);
+	async_answer_0(&call, ret);
 }
 
Index: uspace/lib/nic/include/nic_impl.h
===================================================================
--- uspace/lib/nic/include/nic_impl.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/nic/include/nic_impl.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -83,6 +83,5 @@
 extern errno_t nic_poll_now_impl(ddf_fun_t *);
 
-extern void nic_default_handler_impl(ddf_fun_t *dev_fun,
-    cap_call_handle_t chandle, ipc_call_t *call);
+extern void nic_default_handler_impl(ddf_fun_t *dev_fun, ipc_call_t *call);
 extern errno_t nic_open_impl(ddf_fun_t *fun);
 extern void nic_close_impl(ddf_fun_t *fun);
Index: uspace/lib/nic/src/nic_impl.c
===================================================================
--- uspace/lib/nic/src/nic_impl.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/nic/src/nic_impl.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -810,12 +810,11 @@
  * Logs a warning message and returns ENOTSUP to the caller.
  *
- * @param fun      The DDF function where the method should be called.
- * @param chandle  IPC call handle
- * @param call     IPC call data
- */
-void nic_default_handler_impl(ddf_fun_t *fun, cap_call_handle_t chandle,
-    ipc_call_t *call)
-{
-	async_answer_0(chandle, ENOTSUP);
+ * @param fun  The DDF function where the method should be called.
+ * @param call IPC call data
+ *
+ */
+void nic_default_handler_impl(ddf_fun_t *fun, ipc_call_t *call)
+{
+	async_answer_0(call, ENOTSUP);
 }
 
Index: uspace/lib/usbvirt/include/usbvirt/ipc.h
===================================================================
--- uspace/lib/usbvirt/include/usbvirt/ipc.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/usbvirt/include/usbvirt/ipc.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -64,6 +64,5 @@
 
 extern bool usbvirt_is_usbvirt_method(sysarg_t);
-extern bool usbvirt_ipc_handle_call(usbvirt_device_t *, cap_call_handle_t,
-    ipc_call_t *);
+extern bool usbvirt_ipc_handle_call(usbvirt_device_t *, ipc_call_t *);
 
 #endif
Index: uspace/lib/usbvirt/src/device.c
===================================================================
--- uspace/lib/usbvirt/src/device.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/usbvirt/src/device.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -50,26 +50,25 @@
 /** Main IPC call handling from virtual host controller.
  *
- * @param iid   Caller identification
  * @param icall Initial incoming call
  * @param arg   Local argument
+ *
  */
-static void callback_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void callback_connection(ipc_call_t *icall, void *arg)
 {
 	assert(DEV != NULL);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
-		cap_call_handle_t chandle;
 		ipc_call_t call;
+		async_get_call(&call);
 
-		chandle = async_get_call(&call);
-		bool processed = usbvirt_ipc_handle_call(DEV, chandle, &call);
+		bool processed = usbvirt_ipc_handle_call(DEV, &call);
 		if (!processed) {
 			if (!IPC_GET_IMETHOD(call)) {
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 				return;
 			} else
-				async_answer_0(chandle, EINVAL);
+				async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/lib/usbvirt/src/ipc_dev.c
===================================================================
--- uspace/lib/usbvirt/src/ipc_dev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/lib/usbvirt/src/ipc_dev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -44,21 +44,20 @@
 /** Handle VHC request for device name.
  *
- * @param dev Target virtual device.
- * @param iid Caller id.
- * @param icall The call with the request.
- */
-static void ipc_get_name(usbvirt_device_t *dev,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param dev   Target virtual device.
+ * @param icall The call with the request.
+ *
+ */
+static void ipc_get_name(usbvirt_device_t *dev, ipc_call_t *icall)
 {
 	if (dev->name == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 	}
 
 	size_t size = str_size(dev->name);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t accepted_size;
-	if (!async_data_read_receive(&chandle, &accepted_size)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&call, &accepted_size)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -67,17 +66,16 @@
 		accepted_size = size;
 	}
-	async_data_read_finalize(chandle, dev->name, accepted_size);
-
-	async_answer_1(icall_handle, EOK, accepted_size);
+	async_data_read_finalize(&call, dev->name, accepted_size);
+
+	async_answer_1(icall, EOK, accepted_size);
 }
 
 /** Handle VHC request for control read from the device.
  *
- * @param dev Target virtual device.
- * @param iid Caller id.
- * @param icall The call with the request.
- */
-static void ipc_control_read(usbvirt_device_t *dev,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param dev   Target virtual device.
+ * @param icall The call with the request.
+ *
+ */
+static void ipc_control_read(usbvirt_device_t *dev, ipc_call_t *icall)
 {
 	errno_t rc;
@@ -90,11 +88,11 @@
 	    1, 1024, 0, &setup_packet_len);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EPARTY);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t data;
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EPARTY);
 		free(setup_packet);
 		return;
@@ -103,5 +101,5 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		free(setup_packet);
 		return;
@@ -113,6 +111,6 @@
 
 	if (rc != EOK) {
-		async_answer_0(data_chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&data, rc);
+		async_answer_0(icall, rc);
 		free(setup_packet);
 		free(buffer);
@@ -120,6 +118,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, buffer, actual_len);
-	async_answer_0(icall_handle, EOK);
+	async_data_read_finalize(&data, buffer, actual_len);
+	async_answer_0(icall, EOK);
 
 	free(setup_packet);
@@ -129,10 +127,9 @@
 /** Handle VHC request for control write to the device.
  *
- * @param dev Target virtual device.
- * @param iid Caller id.
- * @param icall The call with the request.
- */
-static void ipc_control_write(usbvirt_device_t *dev,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param dev   Target virtual device.
+ * @param icall The call with the request.
+ *
+ */
+static void ipc_control_write(usbvirt_device_t *dev, ipc_call_t *icall)
 {
 	size_t data_buffer_len = IPC_GET_ARG1(*icall);
@@ -146,5 +143,5 @@
 	    1, 0, 0, &setup_packet_len);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -154,5 +151,5 @@
 		    1, 0, 0, &data_buffer_len);
 		if (rc != EOK) {
-			async_answer_0(icall_handle, rc);
+			async_answer_0(icall, rc);
 			free(setup_packet);
 			return;
@@ -163,5 +160,5 @@
 	    data_buffer, data_buffer_len);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 
 	free(setup_packet);
@@ -173,11 +170,10 @@
 /** Handle VHC request for data read from the device (in transfer).
  *
- * @param dev Target virtual device.
- * @param iid Caller id.
- * @param icall The call with the request.
+ * @param dev   Target virtual device.
+ * @param icall The call with the request.
+ *
  */
 static void ipc_data_in(usbvirt_device_t *dev,
-    usb_transfer_type_t transfer_type,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+    usb_transfer_type_t transfer_type, ipc_call_t *icall)
 {
 	usb_endpoint_t endpoint = IPC_GET_ARG1(*icall);
@@ -186,7 +182,7 @@
 
 	size_t data_len = 0;
-	cap_call_handle_t data_chandle;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EPARTY);
+	ipc_call_t data;
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EPARTY);
 		return;
 	}
@@ -194,5 +190,5 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -203,12 +199,12 @@
 
 	if (rc != EOK) {
-		async_answer_0(data_chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&data, rc);
+		async_answer_0(icall, rc);
 		free(buffer);
 		return;
 	}
 
-	async_data_read_finalize(data_chandle, buffer, actual_len);
-	async_answer_0(icall_handle, EOK);
+	async_data_read_finalize(&data, buffer, actual_len);
+	async_answer_0(icall, EOK);
 
 	free(buffer);
@@ -217,11 +213,10 @@
 /** Handle VHC request for data write to the device (out transfer).
  *
- * @param dev Target virtual device.
- * @param iid Caller id.
- * @param icall The call with the request.
+ * @param dev   Target virtual device.
+ * @param icall The call with the request.
+ *
  */
 static void ipc_data_out(usbvirt_device_t *dev,
-    usb_transfer_type_t transfer_type,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+    usb_transfer_type_t transfer_type, ipc_call_t *icall)
 {
 	usb_endpoint_t endpoint = IPC_GET_ARG1(*icall);
@@ -233,5 +228,5 @@
 	    1, 0, 0, &data_buffer_size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -240,5 +235,5 @@
 	    data_buffer, data_buffer_size);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 
 	free(data_buffer);
@@ -247,41 +242,40 @@
 /** Handle incoming IPC call for virtual USB device.
  *
- * @param dev Target USB device.
- * @param chandle Caller id.
+ * @param dev  Target USB device.
  * @param call Incoming call.
+ *
  * @return Whether the call was handled.
- */
-bool usbvirt_ipc_handle_call(usbvirt_device_t *dev,
-    cap_call_handle_t chandle, ipc_call_t *call)
+ *
+ */
+bool usbvirt_ipc_handle_call(usbvirt_device_t *dev, ipc_call_t *call)
 {
 	switch (IPC_GET_IMETHOD(*call)) {
 	case IPC_M_USBVIRT_GET_NAME:
-		ipc_get_name(dev, chandle, call);
+		ipc_get_name(dev, call);
 		break;
 
 	case IPC_M_USBVIRT_CONTROL_READ:
-		ipc_control_read(dev, chandle, call);
+		ipc_control_read(dev, call);
 		break;
 
 	case IPC_M_USBVIRT_CONTROL_WRITE:
-		ipc_control_write(dev, chandle, call);
+		ipc_control_write(dev, call);
 		break;
 
 	case IPC_M_USBVIRT_INTERRUPT_IN:
-		ipc_data_in(dev, USB_TRANSFER_INTERRUPT, chandle, call);
+		ipc_data_in(dev, USB_TRANSFER_INTERRUPT, call);
 		break;
 
 	case IPC_M_USBVIRT_BULK_IN:
-		ipc_data_in(dev, USB_TRANSFER_BULK, chandle, call);
+		ipc_data_in(dev, USB_TRANSFER_BULK, call);
 		break;
 
 	case IPC_M_USBVIRT_INTERRUPT_OUT:
-		ipc_data_out(dev, USB_TRANSFER_INTERRUPT, chandle, call);
+		ipc_data_out(dev, USB_TRANSFER_INTERRUPT, call);
 		break;
 
 	case IPC_M_USBVIRT_BULK_OUT:
-		ipc_data_out(dev, USB_TRANSFER_BULK, chandle, call);
-		break;
-
+		ipc_data_out(dev, USB_TRANSFER_BULK, call);
+		break;
 
 	default:
Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/audio/hound/audio_device.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -54,5 +54,5 @@
 static errno_t device_sink_connection_callback(audio_sink_t *sink, bool new);
 static errno_t device_source_connection_callback(audio_source_t *source, bool new);
-static void device_event_callback(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void device_event_callback(ipc_call_t *icall, void *arg);
 static errno_t device_check_format(audio_sink_t *sink);
 static errno_t get_buffer(audio_device_t *dev);
@@ -260,10 +260,9 @@
 /** Audio device event handler.
  *
- * @param icall_handle  Initial call handle.
- * @param icall         Initial call structure.
- * @param arg           (unused)
- */
-static void device_event_callback(cap_call_handle_t icall_handle,
-    ipc_call_t *icall, void *arg)
+ * @param icall Initial call structure.
+ * @param arg   (unused)
+ *
+ */
+static void device_event_callback(ipc_call_t *icall, void *arg)
 {
 	struct timeval time1;
@@ -271,11 +270,12 @@
 
 	/* Answer initial request */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 	audio_device_t *dev = arg;
 	assert(dev);
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
-		async_answer_0(chandle, EOK);
+		async_get_call(&call);
+		async_answer_0(&call, EOK);
+
 		switch (IPC_GET_IMETHOD(call)) {
 		case PCM_EVENT_FRAMES_PLAYED:
Index: uspace/srv/bd/file_bd/file_bd.c
===================================================================
--- uspace/srv/bd/file_bd/file_bd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/file_bd/file_bd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -68,5 +68,5 @@
 static void print_usage(void);
 static errno_t file_bd_init(const char *fname);
-static void file_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *);
+static void file_bd_connection(ipc_call_t *icall, void *);
 
 static errno_t file_bd_open(bd_srvs_t *, bd_srv_t *);
@@ -204,7 +204,7 @@
 }
 
-static void file_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	bd_conn(icall_handle, icall, &bd_srvs);
+static void file_bd_connection(ipc_call_t *icall, void *arg)
+{
+	bd_conn(icall, &bd_srvs);
 }
 
Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/rd/rd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -94,7 +94,7 @@
 static bd_srvs_t bd_srvs;
 
-static void rd_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	bd_conn(icall_handle, icall, &bd_srvs);
+static void rd_client_conn(ipc_call_t *icall, void *arg)
+{
+	bd_conn(icall, &bd_srvs);
 }
 
Index: uspace/srv/bd/sata_bd/sata_bd.c
===================================================================
--- uspace/srv/bd/sata_bd/sata_bd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/sata_bd/sata_bd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -167,5 +167,5 @@
 
 /** Block device connection handler. */
-static void sata_bd_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void sata_bd_connection(ipc_call_t *icall, void *arg)
 {
 	service_id_t dsid;
@@ -182,9 +182,9 @@
 
 	if (disk_id < 0) {
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
-	bd_conn(icall_handle, icall, &disk[disk_id].bds);
+	bd_conn(icall, &disk[disk_id].bds);
 }
 
Index: uspace/srv/bd/vbd/disk.c
===================================================================
--- uspace/srv/bd/vbd/disk.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/vbd/disk.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -1070,5 +1070,5 @@
 }
 
-void vbds_bd_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void vbds_bd_conn(ipc_call_t *icall, void *arg)
 {
 	vbds_part_t *part;
@@ -1086,10 +1086,10 @@
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_bd_conn() - partition "
 		    "not found.");
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_bd_conn() - call bd_conn");
-	bd_conn(icall_handle, icall, &part->bds);
+	bd_conn(icall, &part->bds);
 	vbds_part_del_ref(part);
 }
Index: uspace/srv/bd/vbd/disk.h
===================================================================
--- uspace/srv/bd/vbd/disk.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/vbd/disk.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -55,5 +55,5 @@
 extern errno_t vbds_part_delete(vbds_part_id_t);
 extern errno_t vbds_suggest_ptype(service_id_t, label_pcnt_t, label_ptype_t *);
-extern void vbds_bd_conn(cap_call_handle_t, ipc_call_t *, void *);
+extern void vbds_bd_conn(ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/bd/vbd/vbd.c
===================================================================
--- uspace/srv/bd/vbd/vbd.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/bd/vbd/vbd.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -53,5 +53,5 @@
 #define NAME  "vbd"
 
-static void vbds_client_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void vbds_client_conn(ipc_call_t *, void *);
 
 static service_id_t ctl_sid;
@@ -87,14 +87,14 @@
 }
 
-static void vbds_get_disks_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void vbds_get_disks_srv(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -102,6 +102,6 @@
 	service_id_t *id_buf = (service_id_t *) malloc(size);
 	if (id_buf == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -110,16 +110,16 @@
 	if (rc != EOK) {
 		free(id_buf);
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, id_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-static void vbds_disk_info_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_1(icall, retval, act_size);
+}
+
+static void vbds_disk_info_srv(ipc_call_t *icall)
 {
 	service_id_t disk_sid;
@@ -132,34 +132,34 @@
 	rc = vbds_disk_info(disk_sid, &dinfo);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(vbd_disk_info_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &dinfo,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &dinfo,
 	    min(size, sizeof(dinfo)));
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vbds_label_create_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
+}
+
+static void vbds_label_create_srv(ipc_call_t *icall)
 {
 	service_id_t disk_sid;
@@ -172,8 +172,8 @@
 	ltype = IPC_GET_ARG2(*icall);
 	rc = vbds_label_create(disk_sid, ltype);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vbds_label_delete_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void vbds_label_delete_srv(ipc_call_t *icall)
 {
 	service_id_t disk_sid;
@@ -184,10 +184,10 @@
 	disk_sid = IPC_GET_ARG1(*icall);
 	rc = vbds_label_delete(disk_sid);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vbds_label_get_parts_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, rc);
+}
+
+static void vbds_label_get_parts_srv(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
@@ -197,7 +197,7 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_get_parts_srv()");
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -207,6 +207,6 @@
 	category_id_t *id_buf = (category_id_t *) malloc(size);
 	if (id_buf == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -214,16 +214,16 @@
 	rc = vbds_get_parts(sid, id_buf, size, &act_size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, id_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-static void vbds_part_get_info_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_1(icall, retval, act_size);
+}
+
+static void vbds_part_get_info_srv(ipc_call_t *icall)
 {
 	vbds_part_id_t part;
@@ -236,34 +236,34 @@
 	rc = vbds_part_get_info(part, &pinfo);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(vbd_part_info_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &pinfo,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &pinfo,
 	    min(size, sizeof(pinfo)));
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vbds_part_create_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
+}
+
+static void vbds_part_create_srv(ipc_call_t *icall)
 {
 	service_id_t disk_sid;
@@ -276,22 +276,22 @@
 	disk_sid = IPC_GET_ARG1(*icall);
 
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(vbd_part_spec_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &pspec, sizeof(vbd_part_spec_t));
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &pspec, sizeof(vbd_part_spec_t));
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -299,12 +299,12 @@
 	rc = vbds_part_create(disk_sid, &pspec, &part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_1(icall_handle, rc, (sysarg_t)part);
-}
-
-static void vbds_part_delete_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_1(icall, rc, (sysarg_t)part);
+}
+
+static void vbds_part_delete_srv(ipc_call_t *icall)
 {
 	vbds_part_id_t part;
@@ -315,8 +315,8 @@
 	part = IPC_GET_ARG1(*icall);
 	rc = vbds_part_delete(part);
-	async_answer_0(icall_handle, rc);
-}
-
-static void vbds_suggest_ptype_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void vbds_suggest_ptype_srv(ipc_call_t *icall)
 {
 	service_id_t disk_sid;
@@ -332,47 +332,47 @@
 	rc = vbds_suggest_ptype(disk_sid, pcnt, &ptype);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
-	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
+	size_t size;
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(label_ptype_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &ptype, sizeof(label_ptype_t));
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vbds_ctl_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &ptype, sizeof(label_ptype_t));
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
+}
+
+static void vbds_ctl_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_client_conn()");
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -380,37 +380,37 @@
 		switch (method) {
 		case VBD_GET_DISKS:
-			vbds_get_disks_srv(chandle, &call);
+			vbds_get_disks_srv(&call);
 			break;
 		case VBD_DISK_INFO:
-			vbds_disk_info_srv(chandle, &call);
+			vbds_disk_info_srv(&call);
 			break;
 		case VBD_LABEL_CREATE:
-			vbds_label_create_srv(chandle, &call);
+			vbds_label_create_srv(&call);
 			break;
 		case VBD_LABEL_DELETE:
-			vbds_label_delete_srv(chandle, &call);
+			vbds_label_delete_srv(&call);
 			break;
 		case VBD_LABEL_GET_PARTS:
-			vbds_label_get_parts_srv(chandle, &call);
+			vbds_label_get_parts_srv(&call);
 			break;
 		case VBD_PART_GET_INFO:
-			vbds_part_get_info_srv(chandle, &call);
+			vbds_part_get_info_srv(&call);
 			break;
 		case VBD_PART_CREATE:
-			vbds_part_create_srv(chandle, &call);
+			vbds_part_create_srv(&call);
 			break;
 		case VBD_PART_DELETE:
-			vbds_part_delete_srv(chandle, &call);
+			vbds_part_delete_srv(&call);
 			break;
 		case VBD_SUGGEST_PTYPE:
-			vbds_suggest_ptype_srv(chandle, &call);
+			vbds_suggest_ptype_srv(&call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
 }
 
-static void vbds_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void vbds_client_conn(ipc_call_t *icall, void *arg)
 {
 	service_id_t sid;
@@ -418,10 +418,10 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_client_conn()");
 
-	sid = (service_id_t)IPC_GET_ARG2(*icall);
+	sid = (service_id_t) IPC_GET_ARG2(*icall);
 
 	if (sid == ctl_sid)
-		vbds_ctl_conn(icall_handle, icall, arg);
+		vbds_ctl_conn(icall, arg);
 	else
-		vbds_bd_conn(icall_handle, icall, arg);
+		vbds_bd_conn(icall, arg);
 }
 
Index: uspace/srv/clipboard/clipboard.c
===================================================================
--- uspace/srv/clipboard/clipboard.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/clipboard/clipboard.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -47,5 +47,5 @@
 static service_id_t svc_id;
 
-static void clip_put_data(cap_call_handle_t req_handle, ipc_call_t *request)
+static void clip_put_data(ipc_call_t *req)
 {
 	char *data;
@@ -53,5 +53,5 @@
 	size_t size;
 
-	switch (IPC_GET_ARG1(*request)) {
+	switch (IPC_GET_ARG1(*req)) {
 	case CLIPBOARD_TAG_NONE:
 		fibril_mutex_lock(&clip_mtx);
@@ -65,10 +65,10 @@
 
 		fibril_mutex_unlock(&clip_mtx);
-		async_answer_0(req_handle, EOK);
+		async_answer_0(req, EOK);
 		break;
 	case CLIPBOARD_TAG_DATA:
 		rc = async_data_write_accept((void **) &data, false, 0, 0, 0, &size);
 		if (rc != EOK) {
-			async_answer_0(req_handle, rc);
+			async_answer_0(req, rc);
 			break;
 		}
@@ -84,24 +84,24 @@
 
 		fibril_mutex_unlock(&clip_mtx);
-		async_answer_0(req_handle, EOK);
+		async_answer_0(req, EOK);
 		break;
 	default:
-		async_answer_0(req_handle, EINVAL);
-	}
-}
-
-static void clip_get_data(cap_call_handle_t req_handle, ipc_call_t *request)
+		async_answer_0(req, EINVAL);
+	}
+}
+
+static void clip_get_data(ipc_call_t *req)
 {
 	fibril_mutex_lock(&clip_mtx);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
 
 	/* Check for clipboard data tag compatibility */
-	switch (IPC_GET_ARG1(*request)) {
+	switch (IPC_GET_ARG1(*req)) {
 	case CLIPBOARD_TAG_DATA:
-		if (!async_data_read_receive(&chandle, &size)) {
-			async_answer_0(chandle, EINVAL);
-			async_answer_0(req_handle, EINVAL);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EINVAL);
+			async_answer_0(req, EINVAL);
 			break;
 		}
@@ -109,6 +109,6 @@
 		if (clip_tag != CLIPBOARD_TAG_DATA) {
 			/* So far we only understand binary data */
-			async_answer_0(chandle, EOVERFLOW);
-			async_answer_0(req_handle, EOVERFLOW);
+			async_answer_0(&call, EOVERFLOW);
+			async_answer_0(req, EOVERFLOW);
 			break;
 		}
@@ -116,16 +116,16 @@
 		if (clip_size != size) {
 			/* The client expects different size of data */
-			async_answer_0(chandle, EOVERFLOW);
-			async_answer_0(req_handle, EOVERFLOW);
-			break;
-		}
-
-		errno_t retval = async_data_read_finalize(chandle, clip_data, size);
+			async_answer_0(&call, EOVERFLOW);
+			async_answer_0(req, EOVERFLOW);
+			break;
+		}
+
+		errno_t retval = async_data_read_finalize(&call, clip_data, size);
 		if (retval != EOK) {
-			async_answer_0(req_handle, retval);
-			break;
-		}
-
-		async_answer_0(req_handle, EOK);
+			async_answer_0(req, retval);
+			break;
+		}
+
+		async_answer_0(req, EOK);
 		break;
 	default:
@@ -134,5 +134,5 @@
 		 * data from the clipbard
 		 */
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		break;
 	}
@@ -141,5 +141,5 @@
 }
 
-static void clip_content(cap_call_handle_t req_handle, ipc_call_t *request)
+static void clip_content(ipc_call_t *req)
 {
 	fibril_mutex_lock(&clip_mtx);
@@ -149,16 +149,15 @@
 
 	fibril_mutex_unlock(&clip_mtx);
-	async_answer_2(req_handle, EOK, (sysarg_t) size, (sysarg_t) tag);
-}
-
-static void clip_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+	async_answer_2(req, EOK, (sysarg_t) size, (sysarg_t) tag);
+}
+
+static void clip_connection(ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -167,14 +166,14 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case CLIPBOARD_PUT_DATA:
-			clip_put_data(chandle, &call);
+			clip_put_data(&call);
 			break;
 		case CLIPBOARD_GET_DATA:
-			clip_get_data(chandle, &call);
+			clip_get_data(&call);
 			break;
 		case CLIPBOARD_CONTENT:
-			clip_content(chandle, &call);
+			clip_content(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 		}
 	}
Index: uspace/srv/devman/client_conn.c
===================================================================
--- uspace/srv/devman/client_conn.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/devman/client_conn.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -62,5 +62,5 @@
  * device tree.
  */
-static void devman_function_get_handle(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_function_get_handle(ipc_call_t *icall)
 {
 	char *pathname;
@@ -69,5 +69,5 @@
 	errno_t rc = async_data_write_accept((void **) &pathname, true, 0, 0, 0, 0);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -78,5 +78,5 @@
 
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -87,5 +87,5 @@
 	if (fun->state == FUN_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -97,9 +97,9 @@
 	fun_del_ref(fun);
 
-	async_answer_1(icall_handle, EOK, handle);
+	async_answer_1(icall, EOK, handle);
 }
 
 /** Get device match ID. */
-static void devman_fun_get_match_id(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_get_match_id(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -109,12 +109,12 @@
 	fun_node_t *fun = find_fun_node(&device_tree, handle);
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		fun_del_ref(fun);
 		return;
@@ -123,6 +123,6 @@
 	buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		fun_del_ref(fun);
 		return;
@@ -146,6 +146,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, mid->id, sent_length);
-	async_answer_1(icall_handle, EOK, mid->score);
+	async_data_read_finalize(&data, mid->id, sent_length);
+	async_answer_1(icall, EOK, mid->score);
 
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -158,11 +158,11 @@
 	free(buffer);
 
-	async_answer_0(data_chandle, ENOENT);
-	async_answer_0(icall_handle, ENOENT);
+	async_answer_0(&data, ENOENT);
+	async_answer_0(icall, ENOENT);
 	fun_del_ref(fun);
 }
 
 /** Get device name. */
-static void devman_fun_get_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_get_name(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -170,12 +170,12 @@
 	fun_node_t *fun = find_fun_node(&device_tree, handle);
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		fun_del_ref(fun);
 		return;
@@ -184,6 +184,6 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		fun_del_ref(fun);
 		return;
@@ -197,6 +197,6 @@
 		free(buffer);
 
-		async_answer_0(data_chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&data, ENOENT);
+		async_answer_0(icall, ENOENT);
 		fun_del_ref(fun);
 		return;
@@ -208,6 +208,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, fun->name, sent_length);
-	async_answer_0(icall_handle, EOK);
+	async_data_read_finalize(&data, fun->name, sent_length);
+	async_answer_0(icall, EOK);
 
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -217,5 +217,5 @@
 
 /** Get function driver name. */
-static void devman_fun_get_driver_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_get_driver_name(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -223,12 +223,12 @@
 	fun_node_t *fun = find_fun_node(&device_tree, handle);
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		fun_del_ref(fun);
 		return;
@@ -237,6 +237,6 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		fun_del_ref(fun);
 		return;
@@ -250,6 +250,6 @@
 		free(buffer);
 
-		async_answer_0(data_chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&data, ENOENT);
+		async_answer_0(icall, ENOENT);
 		fun_del_ref(fun);
 		return;
@@ -261,6 +261,6 @@
 		free(buffer);
 
-		async_answer_0(data_chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&data, EINVAL);
+		async_answer_0(icall, EINVAL);
 		fun_del_ref(fun);
 		return;
@@ -272,7 +272,7 @@
 	}
 
-	async_data_read_finalize(data_chandle, fun->child->drv->name,
+	async_data_read_finalize(&data, fun->child->drv->name,
 	    sent_length);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -282,5 +282,5 @@
 
 /** Get device path. */
-static void devman_fun_get_path(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_get_path(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -288,12 +288,12 @@
 	fun_node_t *fun = find_fun_node(&device_tree, handle);
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		fun_del_ref(fun);
 		return;
@@ -302,6 +302,6 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		fun_del_ref(fun);
 		return;
@@ -315,6 +315,6 @@
 		free(buffer);
 
-		async_answer_0(data_chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&data, ENOENT);
+		async_answer_0(icall, ENOENT);
 		fun_del_ref(fun);
 		return;
@@ -326,6 +326,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, fun->pathname, sent_length);
-	async_answer_0(icall_handle, EOK);
+	async_data_read_finalize(&data, fun->pathname, sent_length);
+	async_answer_0(icall, EOK);
 
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -335,5 +335,5 @@
 
 /** Get handle for parent function of a device. */
-static void devman_dev_get_parent(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_dev_get_parent(ipc_call_t *icall)
 {
 	dev_node_t *dev;
@@ -344,5 +344,5 @@
 	if (dev == NULL || dev->state == DEVICE_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -350,23 +350,23 @@
 	if (dev->pfun == NULL) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, dev->pfun->handle);
-
-	fibril_rwlock_read_unlock(&device_tree.rwlock);
-}
-
-static void devman_dev_get_functions(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	async_answer_1(icall, EOK, dev->pfun->handle);
+
+	fibril_rwlock_read_unlock(&device_tree.rwlock);
+}
+
+static void devman_dev_get_functions(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -378,6 +378,6 @@
 	if (dev == NULL || dev->state == DEVICE_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -386,6 +386,6 @@
 	if (hdl_buf == NULL) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -394,19 +394,19 @@
 	if (rc != EOK) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	fibril_rwlock_read_unlock(&device_tree.rwlock);
-
-	errno_t retval = async_data_read_finalize(chandle, hdl_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	fibril_rwlock_read_unlock(&device_tree.rwlock);
+
+	errno_t retval = async_data_read_finalize(&call, hdl_buf, size);
 	free(hdl_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
+	async_answer_1(icall, retval, act_size);
 }
 
 /** Get handle for child device of a function. */
-static void devman_fun_get_child(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_get_child(ipc_call_t *icall)
 {
 	fun_node_t *fun;
@@ -417,5 +417,5 @@
 	if (fun == NULL || fun->state == FUN_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -423,9 +423,9 @@
 	if (fun->child == NULL) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, fun->child->handle);
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	async_answer_1(icall, EOK, fun->child->handle);
 
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
@@ -438,5 +438,5 @@
  * of this function is linked to state of another function somehow).
  */
-static void devman_fun_online(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_online(ipc_call_t *icall)
 {
 	fun_node_t *fun;
@@ -445,5 +445,5 @@
 	fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall));
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -452,5 +452,5 @@
 	fun_del_ref(fun);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -463,5 +463,5 @@
  * function somehow).
  */
-static void devman_fun_offline(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_offline(ipc_call_t *icall)
 {
 	fun_node_t *fun;
@@ -470,5 +470,5 @@
 	fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall));
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -477,9 +477,9 @@
 	fun_del_ref(fun);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
 /** Find handle for the function instance identified by its service ID. */
-static void devman_fun_sid_to_handle(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_fun_sid_to_handle(ipc_call_t *icall)
 {
 	fun_node_t *fun;
@@ -488,5 +488,5 @@
 
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -497,9 +497,9 @@
 	if (fun->state == FUN_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, fun->handle);
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	async_answer_1(icall, EOK, fun->handle);
 	fibril_rwlock_read_unlock(&device_tree.rwlock);
 	fun_del_ref(fun);
@@ -507,13 +507,13 @@
 
 /** Get list of all registered drivers. */
-static void devman_get_drivers(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void devman_get_drivers(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -521,6 +521,6 @@
 	devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size);
 	if (hdl_buf == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -528,24 +528,24 @@
 	rc = driver_get_list(&drivers_list, hdl_buf, size, &act_size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, hdl_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, hdl_buf, size);
 	free(hdl_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-static void devman_driver_get_devices(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_1(icall, retval, act_size);
+}
+
+static void devman_driver_get_devices(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -553,6 +553,6 @@
 	driver_t *drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
 	if (drv == NULL) {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -560,6 +560,6 @@
 	devman_handle_t *hdl_buf = (devman_handle_t *) malloc(size);
 	if (hdl_buf == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -568,18 +568,18 @@
 	if (rc != EOK) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, hdl_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, hdl_buf, size);
 	free(hdl_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
+	async_answer_1(icall, retval, act_size);
 }
 
 
 /** Find driver by name. */
-static void devman_driver_get_handle(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_get_handle(ipc_call_t *icall)
 {
 	char *drvname;
@@ -587,5 +587,5 @@
 	errno_t rc = async_data_write_accept((void **) &drvname, true, 0, 0, 0, 0);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -596,13 +596,13 @@
 
 	if (driver == NULL) {
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, driver->handle);
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	async_answer_1(icall, EOK, driver->handle);
 }
 
 /** Get driver match ID. */
-static void devman_driver_get_match_id(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_get_match_id(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -611,12 +611,12 @@
 	driver_t *drv = driver_find(&drivers_list, handle);
 	if (drv == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -624,6 +624,6 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -634,6 +634,6 @@
 		fibril_mutex_unlock(&drv->driver_mutex);
 		free(buffer);
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -646,6 +646,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, mid->id, sent_length);
-	async_answer_1(icall_handle, EOK, mid->score);
+	async_data_read_finalize(&data, mid->id, sent_length);
+	async_answer_1(icall, EOK, mid->score);
 
 	fibril_mutex_unlock(&drv->driver_mutex);
@@ -655,5 +655,5 @@
 
 /** Get driver name. */
-static void devman_driver_get_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_get_name(ipc_call_t *icall)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*icall);
@@ -661,12 +661,12 @@
 	driver_t *drv = driver_find(&drivers_list, handle);
 	if (drv == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	cap_call_handle_t data_chandle;
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	ipc_call_t data;
 	size_t data_len;
-	if (!async_data_read_receive(&data_chandle, &data_len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&data, &data_len)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -674,6 +674,6 @@
 	void *buffer = malloc(data_len);
 	if (buffer == NULL) {
-		async_answer_0(data_chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&data, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -686,6 +686,6 @@
 	}
 
-	async_data_read_finalize(data_chandle, drv->name, sent_length);
-	async_answer_0(icall_handle, EOK);
+	async_data_read_finalize(&data, drv->name, sent_length);
+	async_answer_0(icall, EOK);
 
 	fibril_mutex_unlock(&drv->driver_mutex);
@@ -695,5 +695,5 @@
 
 /** Get driver state. */
-static void devman_driver_get_state(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_get_state(ipc_call_t *icall)
 {
 	driver_t *drv;
@@ -701,13 +701,13 @@
 	drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
 	if (drv == NULL) {
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, (sysarg_t) drv->state);
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	async_answer_1(icall, EOK, (sysarg_t) drv->state);
 }
 
 /** Forcibly load a driver. */
-static void devman_driver_load(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_load(ipc_call_t *icall)
 {
 	driver_t *drv;
@@ -716,5 +716,5 @@
 	drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
 	if (drv == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -724,9 +724,9 @@
 	fibril_mutex_unlock(&drv->driver_mutex);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
 /** Unload a driver by user request. */
-static void devman_driver_unload(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void devman_driver_unload(ipc_call_t *icall)
 {
 	driver_t *drv;
@@ -735,5 +735,5 @@
 	drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
 	if (drv == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -743,16 +743,16 @@
 	fibril_mutex_unlock(&drv->driver_mutex);
 
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
 /** Function for handling connections from a client to the device manager. */
-void devman_connection_client(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void devman_connection_client(ipc_call_t *icall, void *arg)
 {
 	/* Accept connection. */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -761,66 +761,65 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case DEVMAN_DEVICE_GET_HANDLE:
-			devman_function_get_handle(chandle, &call);
+			devman_function_get_handle(&call);
 			break;
 		case DEVMAN_DEV_GET_PARENT:
-			devman_dev_get_parent(chandle, &call);
+			devman_dev_get_parent(&call);
 			break;
 		case DEVMAN_DEV_GET_FUNCTIONS:
-			devman_dev_get_functions(chandle, &call);
+			devman_dev_get_functions(&call);
 			break;
 		case DEVMAN_FUN_GET_CHILD:
-			devman_fun_get_child(chandle, &call);
+			devman_fun_get_child(&call);
 			break;
 		case DEVMAN_FUN_GET_MATCH_ID:
-			devman_fun_get_match_id(chandle, &call);
+			devman_fun_get_match_id(&call);
 			break;
 		case DEVMAN_FUN_GET_NAME:
-			devman_fun_get_name(chandle, &call);
+			devman_fun_get_name(&call);
 			break;
 		case DEVMAN_FUN_GET_DRIVER_NAME:
-			devman_fun_get_driver_name(chandle, &call);
+			devman_fun_get_driver_name(&call);
 			break;
 		case DEVMAN_FUN_GET_PATH:
-			devman_fun_get_path(chandle, &call);
+			devman_fun_get_path(&call);
 			break;
 		case DEVMAN_FUN_ONLINE:
-			devman_fun_online(chandle, &call);
+			devman_fun_online(&call);
 			break;
 		case DEVMAN_FUN_OFFLINE:
-			devman_fun_offline(chandle, &call);
+			devman_fun_offline(&call);
 			break;
 		case DEVMAN_FUN_SID_TO_HANDLE:
-			devman_fun_sid_to_handle(chandle, &call);
+			devman_fun_sid_to_handle(&call);
 			break;
 		case DEVMAN_GET_DRIVERS:
-			devman_get_drivers(chandle, &call);
+			devman_get_drivers(&call);
 			break;
 		case DEVMAN_DRIVER_GET_DEVICES:
-			devman_driver_get_devices(chandle, &call);
+			devman_driver_get_devices(&call);
 			break;
 		case DEVMAN_DRIVER_GET_HANDLE:
-			devman_driver_get_handle(chandle, &call);
+			devman_driver_get_handle(&call);
 			break;
 		case DEVMAN_DRIVER_GET_MATCH_ID:
-			devman_driver_get_match_id(chandle, &call);
+			devman_driver_get_match_id(&call);
 			break;
 		case DEVMAN_DRIVER_GET_NAME:
-			devman_driver_get_name(chandle, &call);
+			devman_driver_get_name(&call);
 			break;
 		case DEVMAN_DRIVER_GET_STATE:
-			devman_driver_get_state(chandle, &call);
+			devman_driver_get_state(&call);
 			break;
 		case DEVMAN_DRIVER_LOAD:
-			devman_driver_load(chandle, &call);
+			devman_driver_load(&call);
 			break;
 		case DEVMAN_DRIVER_UNLOAD:
-			devman_driver_unload(chandle, &call);
+			devman_driver_unload(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 		}
 	}
 }
-
 
 /** @}
Index: uspace/srv/devman/client_conn.h
===================================================================
--- uspace/srv/devman/client_conn.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/devman/client_conn.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -36,5 +36,5 @@
 #include "devman.h"
 
-extern void devman_connection_client(cap_call_handle_t, ipc_call_t *, void *);
+extern void devman_connection_client(ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/devman/drv_conn.c
===================================================================
--- uspace/srv/devman/drv_conn.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/devman/drv_conn.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -64,5 +64,5 @@
 
 /** Register running driver. */
-static driver_t *devman_driver_register(cap_call_handle_t chandle, ipc_call_t *call)
+static driver_t *devman_driver_register(ipc_call_t *call)
 {
 	driver_t *driver = NULL;
@@ -74,5 +74,5 @@
 	errno_t rc = async_data_write_accept((void **) &drv_name, true, 0, 0, 0, 0);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return NULL;
 	}
@@ -87,5 +87,5 @@
 		free(drv_name);
 		drv_name = NULL;
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return NULL;
 	}
@@ -101,5 +101,5 @@
 		    driver->name);
 		fibril_mutex_unlock(&driver->driver_mutex);
-		async_answer_0(chandle, EEXIST);
+		async_answer_0(call, EEXIST);
 		return NULL;
 	}
@@ -126,5 +126,5 @@
 	if (!driver->sess) {
 		fibril_mutex_unlock(&driver->driver_mutex);
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(call, ENOTSUP);
 		return NULL;
 	}
@@ -146,5 +146,5 @@
 		    "for driver `%s'.", driver->name);
 		fibril_mutex_unlock(&driver->driver_mutex);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return NULL;
 	}
@@ -153,5 +153,5 @@
 	fibril_mutex_unlock(&driver->driver_mutex);
 
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 	return driver;
 }
@@ -166,13 +166,12 @@
 {
 	match_id_t *match_id = create_match_id();
-	cap_call_handle_t chandle;
 	ipc_call_t call;
 	errno_t rc = 0;
 
-	chandle = async_get_call(&call);
+	async_get_call(&call);
 	if (DEVMAN_ADD_MATCH_ID != IPC_GET_IMETHOD(call)) {
 		log_msg(LOG_DEFAULT, LVL_ERROR,
 		    "Invalid protocol when trying to receive match id.");
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		delete_match_id(match_id);
 		return EINVAL;
@@ -181,9 +180,9 @@
 	if (match_id == NULL) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to allocate match id.");
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
 		return ENOMEM;
 	}
 
-	async_answer_0(chandle, EOK);
+	async_answer_0(&call, EOK);
 
 	match_id->score = IPC_GET_ARG1(call);
@@ -230,5 +229,5 @@
  * Child devices are registered by their parent's device driver.
  */
-static void devman_add_function(cap_call_handle_t chandle, ipc_call_t *call)
+static void devman_add_function(ipc_call_t *call)
 {
 	fun_type_t ftype = (fun_type_t) IPC_GET_ARG1(*call);
@@ -239,5 +238,5 @@
 	dev_node_t *pdev = find_dev_node(&device_tree, dev_handle);
 	if (pdev == NULL) {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -250,13 +249,13 @@
 
 		dev_del_ref(pdev);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	char *fun_name = NULL;
-	errno_t rc = async_data_write_accept((void **)&fun_name, true, 0, 0, 0, 0);
+	errno_t rc = async_data_write_accept((void **) &fun_name, true, 0, 0, 0, 0);
 	if (rc != EOK) {
 		dev_del_ref(pdev);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -268,5 +267,5 @@
 		fibril_rwlock_write_unlock(&tree->rwlock);
 		dev_del_ref(pdev);
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -278,5 +277,5 @@
 		fibril_rwlock_write_unlock(&tree->rwlock);
 		dev_del_ref(pdev);
-		async_answer_0(chandle, EEXIST);
+		async_answer_0(call, EEXIST);
 		printf(NAME ": Warning, driver tried to register `%s' twice.\n",
 		    fun_name);
@@ -303,5 +302,5 @@
 		fun_del_ref(fun);
 		delete_fun_node(fun);
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -317,5 +316,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -325,8 +324,8 @@
 
 	/* Return device handle to parent's driver. */
-	async_answer_1(chandle, EOK, fun->handle);
-}
-
-static void devman_add_function_to_cat(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_1(call, EOK, fun->handle);
+}
+
+static void devman_add_function_to_cat(ipc_call_t *call)
 {
 	devman_handle_t handle = IPC_GET_ARG1(*call);
@@ -339,5 +338,5 @@
 	    0, 0, 0, 0);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -345,5 +344,5 @@
 	fun_node_t *fun = find_fun_node(&device_tree, handle);
 	if (fun == NULL) {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -354,5 +353,5 @@
 	if (fun->state == FUN_REMOVED) {
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -371,5 +370,5 @@
 	fun_del_ref(fun);
 
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
@@ -377,6 +376,5 @@
  *
  */
-static void devman_drv_fun_online(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    driver_t *drv)
+static void devman_drv_fun_online(ipc_call_t *icall, driver_t *drv)
 {
 	fun_node_t *fun;
@@ -387,5 +385,5 @@
 	fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall));
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -398,5 +396,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -407,5 +405,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -414,5 +412,5 @@
 	fun_del_ref(fun);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -421,6 +419,5 @@
  *
  */
-static void devman_drv_fun_offline(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    driver_t *drv)
+static void devman_drv_fun_offline(ipc_call_t *icall, driver_t *drv)
 {
 	fun_node_t *fun;
@@ -429,5 +426,5 @@
 	fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall));
 	if (fun == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -439,5 +436,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -448,5 +445,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -454,9 +451,9 @@
 	fun_busy_unlock(fun);
 	fun_del_ref(fun);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Remove function. */
-static void devman_remove_function(cap_call_handle_t chandle, ipc_call_t *call)
+static void devman_remove_function(ipc_call_t *call)
 {
 	devman_handle_t fun_handle = IPC_GET_ARG1(*call);
@@ -466,5 +463,5 @@
 	fun_node_t *fun = find_fun_node(&device_tree, fun_handle);
 	if (fun == NULL) {
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -481,5 +478,5 @@
 		fun_busy_unlock(fun);
 		fun_del_ref(fun);
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -523,5 +520,5 @@
 				fun_busy_unlock(fun);
 				fun_del_ref(fun);
-				async_answer_0(chandle, gone_rc);
+				async_answer_0(call, gone_rc);
 				return;
 			}
@@ -551,5 +548,5 @@
 				fun_busy_unlock(fun);
 				fun_del_ref(fun);
-				async_answer_0(chandle, EIO);
+				async_answer_0(call, EIO);
 				return;
 			}
@@ -567,5 +564,5 @@
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "devman_remove_function() succeeded.");
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 }
 
@@ -586,5 +583,5 @@
 
 /** Function for handling connections from a driver to the device manager. */
-void devman_connection_driver(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void devman_connection_driver(ipc_call_t *icall, void *arg)
 {
 	client_t *client;
@@ -592,5 +589,5 @@
 
 	/* Accept the connection. */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	client = async_get_client_data();
@@ -602,5 +599,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -613,5 +610,5 @@
 			if (driver == NULL) {
 				/* First call must be to DEVMAN_DRIVER_REGISTER */
-				async_answer_0(chandle, ENOTSUP);
+				async_answer_0(&call, ENOTSUP);
 				continue;
 			}
@@ -623,27 +620,27 @@
 			if (client->driver != NULL) {
 				fibril_mutex_unlock(&client->mutex);
-				async_answer_0(chandle, EINVAL);
+				async_answer_0(&call, EINVAL);
 				continue;
 			}
-			client->driver = devman_driver_register(chandle, &call);
+			client->driver = devman_driver_register(&call);
 			fibril_mutex_unlock(&client->mutex);
 			break;
 		case DEVMAN_ADD_FUNCTION:
-			devman_add_function(chandle, &call);
+			devman_add_function(&call);
 			break;
 		case DEVMAN_ADD_DEVICE_TO_CATEGORY:
-			devman_add_function_to_cat(chandle, &call);
+			devman_add_function_to_cat(&call);
 			break;
 		case DEVMAN_DRV_FUN_ONLINE:
-			devman_drv_fun_online(chandle, &call, driver);
+			devman_drv_fun_online(&call, driver);
 			break;
 		case DEVMAN_DRV_FUN_OFFLINE:
-			devman_drv_fun_offline(chandle, &call, driver);
+			devman_drv_fun_offline(&call, driver);
 			break;
 		case DEVMAN_REMOVE_FUNCTION:
-			devman_remove_function(chandle, &call);
+			devman_remove_function(&call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/srv/devman/drv_conn.h
===================================================================
--- uspace/srv/devman/drv_conn.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/devman/drv_conn.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -37,5 +37,5 @@
 #include "devman.h"
 
-extern void devman_connection_driver(cap_call_handle_t, ipc_call_t *, void *);
+extern void devman_connection_driver(ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/devman/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -66,6 +66,5 @@
 dev_tree_t device_tree;
 
-static void devman_connection_device(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void devman_connection_device(ipc_call_t *icall, void *arg)
 {
 	devman_handle_t handle = IPC_GET_ARG2(*icall);
@@ -94,5 +93,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding failed - no device or "
 		    "function with handle %" PRIun " was found.", handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
@@ -102,5 +101,5 @@
 		    "connect to handle %" PRIun ", refers to a device.",
 		    handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
@@ -116,5 +115,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding refused - "
 		    "the device %" PRIun " is not in usable state.", handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
@@ -123,5 +122,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR,
 		    "Could not forward to driver `%s'.", driver->name);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		goto cleanup;
 	}
@@ -138,5 +137,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall_handle, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE);
+	async_forward_fast(icall, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -149,6 +148,5 @@
 }
 
-static void devman_connection_parent(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void devman_connection_parent(ipc_call_t *icall, void *arg)
 {
 	devman_handle_t handle = IPC_GET_ARG2(*icall);
@@ -177,5 +175,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding failed - no device or "
 		    "function with handle %" PRIun " was found.", handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
@@ -196,5 +194,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR, "IPC forwarding refused - "
 		    "the device %" PRIun " is not in usable state.", handle);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
@@ -203,5 +201,5 @@
 		log_msg(LOG_DEFAULT, LVL_ERROR,
 		    "Could not forward to driver `%s'.", driver->name);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		goto cleanup;
 	}
@@ -218,5 +216,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall_handle, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE);
+	async_forward_fast(icall, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -229,5 +227,5 @@
 }
 
-static void devman_forward(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void devman_forward(ipc_call_t *icall, void *arg)
 {
 	iface_t iface = IPC_GET_ARG1(*icall);
@@ -242,5 +240,5 @@
 		    "not found.\n");
 		fibril_rwlock_read_unlock(&device_tree.rwlock);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -253,5 +251,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall_handle, exch, iface, handle, 0, IPC_FF_NONE);
+	async_forward_fast(icall, exch, iface, handle, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 
Index: uspace/srv/fs/cdfs/cdfs_ops.c
===================================================================
--- uspace/srv/fs/cdfs/cdfs_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/cdfs/cdfs_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -1273,8 +1273,8 @@
 	}
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1283,5 +1283,5 @@
 		if (pos >= node->size) {
 			*rbytes = 0;
-			async_data_read_finalize(chandle, NULL, 0);
+			async_data_read_finalize(&call, NULL, 0);
 		} else {
 			cdfs_lba_t lba = pos / BLOCK_SIZE;
@@ -1295,9 +1295,9 @@
 			    BLOCK_FLAGS_NONE);
 			if (rc != EOK) {
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				return rc;
 			}
 
-			async_data_read_finalize(chandle, block->data + offset,
+			async_data_read_finalize(&call, block->data + offset,
 			    *rbytes);
 			rc = block_put(block);
@@ -1308,5 +1308,5 @@
 		link_t *link = list_nth(&node->cs_list, pos);
 		if (link == NULL) {
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 			return ENOENT;
 		}
@@ -1316,5 +1316,5 @@
 
 		*rbytes = 1;
-		async_data_read_finalize(chandle, dentry->name,
+		async_data_read_finalize(&call, dentry->name,
 		    str_size(dentry->name) + 1);
 	}
Index: uspace/srv/fs/exfat/exfat_ops.c
===================================================================
--- uspace/srv/fs/exfat/exfat_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/exfat/exfat_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -1341,9 +1341,9 @@
 	nodep = EXFAT_NODE(fn);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_read_receive(&chandle, &len)) {
+	if (!async_data_read_receive(&call, &len)) {
 		exfat_node_put(fn);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1360,5 +1360,5 @@
 			/* reading beyond the EOF */
 			bytes = 0;
-			(void) async_data_read_finalize(chandle, NULL, 0);
+			(void) async_data_read_finalize(&call, NULL, 0);
 		} else {
 			bytes = min(len, BPS(bs) - pos % BPS(bs));
@@ -1368,8 +1368,8 @@
 			if (rc != EOK) {
 				exfat_node_put(fn);
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				return rc;
 			}
-			(void) async_data_read_finalize(chandle,
+			(void) async_data_read_finalize(&call,
 			    b->data + pos % BPS(bs), bytes);
 			rc = block_put(b);
@@ -1381,5 +1381,5 @@
 	} else {
 		if (nodep->type != EXFAT_DIRECTORY) {
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			return ENOTSUP;
 		}
@@ -1415,5 +1415,5 @@
 	err:
 		(void) exfat_node_put(fn);
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		return rc;
 
@@ -1423,5 +1423,5 @@
 			goto err;
 		rc = exfat_node_put(fn);
-		async_answer_0(chandle, rc != EOK ? rc : ENOENT);
+		async_answer_0(&call, rc != EOK ? rc : ENOENT);
 		*rbytes = 0;
 		return rc != EOK ? rc : ENOENT;
@@ -1432,5 +1432,5 @@
 		if (rc != EOK)
 			goto err;
-		(void) async_data_read_finalize(chandle, name,
+		(void) async_data_read_finalize(&call, name,
 		    str_size(name) + 1);
 		bytes = (pos - spos) + 1;
@@ -1485,9 +1485,9 @@
 	nodep = EXFAT_NODE(fn);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_write_receive(&chandle, &len)) {
+	if (!async_data_write_receive(&call, &len)) {
 		(void) exfat_node_put(fn);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1514,5 +1514,5 @@
 			/* could not expand node */
 			(void) exfat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
@@ -1533,9 +1533,9 @@
 	if (rc != EOK) {
 		(void) exfat_node_put(fn);
-		async_answer_0(chandle, rc);
-		return rc;
-	}
-
-	(void) async_data_write_finalize(chandle,
+		async_answer_0(&call, rc);
+		return rc;
+	}
+
+	(void) async_data_write_finalize(&call,
 	    b->data + pos % BPS(bs), bytes);
 	b->dirty = true;		/* need to sync block */
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -1226,9 +1226,9 @@
 	nodep = FAT_NODE(fn);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_read_receive(&chandle, &len)) {
+	if (!async_data_read_receive(&call, &len)) {
 		fat_node_put(fn);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1245,5 +1245,5 @@
 			/* reading beyond the EOF */
 			bytes = 0;
-			(void) async_data_read_finalize(chandle, NULL, 0);
+			(void) async_data_read_finalize(&call, NULL, 0);
 		} else {
 			bytes = min(len, BPS(bs) - pos % BPS(bs));
@@ -1253,8 +1253,8 @@
 			if (rc != EOK) {
 				fat_node_put(fn);
-				async_answer_0(chandle, rc);
+				async_answer_0(&call, rc);
 				return rc;
 			}
-			(void) async_data_read_finalize(chandle,
+			(void) async_data_read_finalize(&call,
 			    b->data + pos % BPS(bs), bytes);
 			rc = block_put(b);
@@ -1291,5 +1291,5 @@
 	err:
 		(void) fat_node_put(fn);
-		async_answer_0(chandle, rc);
+		async_answer_0(&call, rc);
 		return rc;
 
@@ -1299,5 +1299,5 @@
 			goto err;
 		rc = fat_node_put(fn);
-		async_answer_0(chandle, rc != EOK ? rc : ENOENT);
+		async_answer_0(&call, rc != EOK ? rc : ENOENT);
 		*rbytes = 0;
 		return rc != EOK ? rc : ENOENT;
@@ -1308,5 +1308,5 @@
 		if (rc != EOK)
 			goto err;
-		(void) async_data_read_finalize(chandle, name,
+		(void) async_data_read_finalize(&call, name,
 		    str_size(name) + 1);
 		bytes = (pos - spos) + 1;
@@ -1338,9 +1338,9 @@
 	nodep = FAT_NODE(fn);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
-	if (!async_data_write_receive(&chandle, &len)) {
+	if (!async_data_write_receive(&call, &len)) {
 		(void) fat_node_put(fn);
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -1370,5 +1370,5 @@
 		if (rc != EOK) {
 			(void) fat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
@@ -1376,8 +1376,8 @@
 		if (rc != EOK) {
 			(void) fat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
-		(void) async_data_write_finalize(chandle,
+		(void) async_data_write_finalize(&call,
 		    b->data + pos % BPS(bs), bytes);
 		b->dirty = true;		/* need to sync block */
@@ -1409,5 +1409,5 @@
 			/* could not allocate a chain of nclsts clusters */
 			(void) fat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
@@ -1417,5 +1417,5 @@
 			(void) fat_free_clusters(bs, service_id, mcl);
 			(void) fat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
@@ -1425,8 +1425,8 @@
 			(void) fat_free_clusters(bs, service_id, mcl);
 			(void) fat_node_put(fn);
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			return rc;
 		}
-		(void) async_data_write_finalize(chandle,
+		(void) async_data_write_finalize(&call,
 		    b->data + pos % BPS(bs), bytes);
 		b->dirty = true;		/* need to sync block */
Index: uspace/srv/fs/locfs/locfs_ops.c
===================================================================
--- uspace/srv/fs/locfs/locfs_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/locfs/locfs_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -478,8 +478,8 @@
 {
 	if (index == 0) {
-		cap_call_handle_t chandle;
+		ipc_call_t call;
 		size_t size;
-		if (!async_data_read_receive(&chandle, &size)) {
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EINVAL);
 			return EINVAL;
 		}
@@ -500,5 +500,5 @@
 
 		if (pos < count) {
-			async_data_read_finalize(chandle, desc[pos].name, str_size(desc[pos].name) + 1);
+			async_data_read_finalize(&call, desc[pos].name, str_size(desc[pos].name) + 1);
 			free(desc);
 			*rbytes = 1;
@@ -515,5 +515,5 @@
 
 			if (pos < count) {
-				async_data_read_finalize(chandle, desc[pos].name, str_size(desc[pos].name) + 1);
+				async_data_read_finalize(&call, desc[pos].name, str_size(desc[pos].name) + 1);
 				free(desc);
 				*rbytes = 1;
@@ -524,5 +524,5 @@
 		}
 
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(&call, ENOENT);
 		return ENOENT;
 	}
@@ -532,8 +532,8 @@
 	if (type == LOC_OBJECT_NAMESPACE) {
 		/* Namespace directory */
-		cap_call_handle_t chandle;
+		ipc_call_t call;
 		size_t size;
-		if (!async_data_read_receive(&chandle, &size)) {
-			async_answer_0(chandle, EINVAL);
+		if (!async_data_read_receive(&call, &size)) {
+			async_answer_0(&call, EINVAL);
 			return EINVAL;
 		}
@@ -543,5 +543,5 @@
 
 		if (pos < count) {
-			async_data_read_finalize(chandle, desc[pos].name, str_size(desc[pos].name) + 1);
+			async_data_read_finalize(&call, desc[pos].name, str_size(desc[pos].name) + 1);
 			free(desc);
 			*rbytes = 1;
@@ -550,5 +550,5 @@
 
 		free(desc);
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(&call, ENOENT);
 		return ENOENT;
 	}
@@ -568,8 +568,8 @@
 		assert(dev->sess);
 
-		cap_call_handle_t chandle;
-		if (!async_data_read_receive(&chandle, NULL)) {
+		ipc_call_t call;
+		if (!async_data_read_receive(&call, NULL)) {
 			fibril_mutex_unlock(&services_mutex);
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			return EINVAL;
 		}
@@ -583,5 +583,5 @@
 
 		/* Forward the IPC_M_DATA_READ request to the driver */
-		async_forward_fast(chandle, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_fast(&call, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
 
 		async_exchange_end(exch);
@@ -632,8 +632,8 @@
 		assert(dev->sess);
 
-		cap_call_handle_t chandle;
-		if (!async_data_write_receive(&chandle, NULL)) {
+		ipc_call_t call;
+		if (!async_data_write_receive(&call, NULL)) {
 			fibril_mutex_unlock(&services_mutex);
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			return EINVAL;
 		}
@@ -647,5 +647,5 @@
 
 		/* Forward the IPC_M_DATA_WRITE request to the driver */
-		async_forward_fast(chandle, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_fast(&call, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
 
 		async_exchange_end(exch);
Index: uspace/srv/fs/mfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/mfs/mfs_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/mfs/mfs_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -839,10 +839,10 @@
 	struct mfs_ino_info *ino_i;
 	size_t len, bytes = 0;
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 
 	mnode = fn->data;
 	ino_i = mnode->ino_i;
 
-	if (!async_data_read_receive(&chandle, &len)) {
+	if (!async_data_read_receive(&call, &len)) {
 		rc = EINVAL;
 		goto out_error;
@@ -871,8 +871,8 @@
 
 		rc = mfs_node_put(fn);
-		async_answer_0(chandle, rc != EOK ? rc : ENOENT);
+		async_answer_0(&call, rc != EOK ? rc : ENOENT);
 		return rc;
 	found:
-		async_data_read_finalize(chandle, d_info.d_name,
+		async_data_read_finalize(&call, d_info.d_name,
 		    str_size(d_info.d_name) + 1);
 		bytes = ((pos - spos) + 1);
@@ -883,5 +883,5 @@
 			/* Trying to read beyond the end of file */
 			bytes = 0;
-			(void) async_data_read_finalize(chandle, NULL, 0);
+			(void) async_data_read_finalize(&call, NULL, 0);
 			goto out_success;
 		}
@@ -905,5 +905,5 @@
 			}
 			memset(buf, 0, sizeof(sbi->block_size));
-			async_data_read_finalize(chandle,
+			async_data_read_finalize(&call,
 			    buf + pos % sbi->block_size, bytes);
 			free(buf);
@@ -915,5 +915,5 @@
 			goto out_error;
 
-		async_data_read_finalize(chandle, b->data +
+		async_data_read_finalize(&call, b->data +
 		    pos % sbi->block_size, bytes);
 
@@ -930,5 +930,5 @@
 out_error:
 	tmp = mfs_node_put(fn);
-	async_answer_0(chandle, tmp != EOK ? tmp : rc);
+	async_answer_0(&call, tmp != EOK ? tmp : rc);
 	return tmp != EOK ? tmp : rc;
 }
@@ -948,8 +948,8 @@
 		return ENOENT;
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
 
-	if (!async_data_write_receive(&chandle, &len)) {
+	if (!async_data_write_receive(&call, &len)) {
 		r = EINVAL;
 		goto out_err;
@@ -994,5 +994,5 @@
 		memset(b->data, 0, sbi->block_size);
 
-	async_data_write_finalize(chandle, b->data + (pos % bs), bytes);
+	async_data_write_finalize(&call, b->data + (pos % bs), bytes);
 	b->dirty = true;
 
@@ -1014,5 +1014,5 @@
 out_err:
 	mfs_node_put(fn);
-	async_answer_0(chandle, r);
+	async_answer_0(&call, r);
 	return r;
 }
Index: uspace/srv/fs/tmpfs/tmpfs_ops.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -55,5 +55,6 @@
 
 /** All root nodes have index 0. */
-#define TMPFS_SOME_ROOT		0
+#define TMPFS_SOME_ROOT  0
+
 /** Global counter for assigning node indices. Shared by all instances. */
 fs_index_t tmpfs_next_index = 1;
@@ -308,4 +309,5 @@
 	if (!nodep)
 		return ENOMEM;
+
 	tmpfs_node_initialize(nodep);
 	nodep->bp = malloc(sizeof(fs_node_t));
@@ -314,6 +316,7 @@
 		return ENOMEM;
 	}
+
 	fs_node_initialize(nodep->bp);
-	nodep->bp->data = nodep;	/* link the FS and TMPFS nodes */
+	nodep->bp->data = nodep;  /* Link the FS and TMPFS nodes */
 
 	rc = tmpfs_root_get(&rootfn, service_id);
@@ -323,4 +326,5 @@
 	else
 		nodep->index = tmpfs_next_index++;
+
 	nodep->service_id = service_id;
 	if (lflag & L_DIRECTORY)
@@ -480,8 +484,8 @@
 	 * Receive the read request.
 	 */
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -490,5 +494,5 @@
 	if (nodep->type == TMPFS_FILE) {
 		bytes = min(nodep->size - pos, size);
-		(void) async_data_read_finalize(chandle, nodep->data + pos,
+		(void) async_data_read_finalize(&call, nodep->data + pos,
 		    bytes);
 	} else {
@@ -506,5 +510,5 @@
 
 		if (lnk == NULL) {
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 			return ENOENT;
 		}
@@ -512,5 +516,5 @@
 		dentryp = list_get_instance(lnk, tmpfs_dentry_t, link);
 
-		(void) async_data_read_finalize(chandle, dentryp->name,
+		(void) async_data_read_finalize(&call, dentryp->name,
 		    str_size(dentryp->name) + 1);
 		bytes = 1;
@@ -543,8 +547,8 @@
 	 * Receive the write request.
 	 */
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
 		return EINVAL;
 	}
@@ -555,5 +559,5 @@
 	if (pos + size <= nodep->size) {
 		/* The file size is not changing. */
-		(void) async_data_write_finalize(chandle, nodep->data + pos,
+		(void) async_data_write_finalize(&call, nodep->data + pos,
 		    size);
 		goto out;
@@ -569,5 +573,5 @@
 	void *newdata = realloc(nodep->data, nodep->size + delta);
 	if (!newdata) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
 		size = 0;
 		goto out;
@@ -577,5 +581,5 @@
 	nodep->size += delta;
 	nodep->data = newdata;
-	(void) async_data_write_finalize(chandle, nodep->data + pos, size);
+	(void) async_data_write_finalize(&call, nodep->data + pos, size);
 
 out:
Index: uspace/srv/fs/udf/udf_file.c
===================================================================
--- uspace/srv/fs/udf/udf_file.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/udf/udf_file.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -568,5 +568,5 @@
  *
  * @param read_len Returned value. Length file or part file which we could read.
- * @param chandle
+ * @param call     IPC call
  * @param node     UDF node
  * @param pos      Position in file since we have to read.
@@ -576,5 +576,5 @@
  *
  */
-errno_t udf_read_file(size_t *read_len, cap_call_handle_t chandle, udf_node_t *node,
+errno_t udf_read_file(size_t *read_len, ipc_call_t *call, udf_node_t *node,
     aoff64_t pos, size_t len)
 {
@@ -598,5 +598,5 @@
 	    BLOCK_FLAGS_NONE);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return rc;
 	}
@@ -619,5 +619,5 @@
 	}
 
-	async_data_read_finalize(chandle, block->data + sector_pos, *read_len);
+	async_data_read_finalize(call, block->data + sector_pos, *read_len);
 	return block_put(block);
 }
Index: uspace/srv/fs/udf/udf_file.h
===================================================================
--- uspace/srv/fs/udf/udf_file.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/udf/udf_file.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -198,5 +198,5 @@
 extern errno_t udf_read_allocation_sequence(udf_node_t *, uint8_t *, uint16_t,
     uint32_t, uint32_t);
-extern errno_t udf_read_file(size_t *, cap_call_handle_t, udf_node_t *, aoff64_t,
+extern errno_t udf_read_file(size_t *, ipc_call_t *, udf_node_t *, aoff64_t,
     size_t);
 extern errno_t udf_get_fid(udf_file_identifier_descriptor_t **, block_t **,
Index: uspace/srv/fs/udf/udf_ops.c
===================================================================
--- uspace/srv/fs/udf/udf_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/fs/udf/udf_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -464,8 +464,8 @@
 	udf_node_t *node = UDF_NODE(rfn);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len = 0;
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EINVAL);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EINVAL);
 		udf_node_put(rfn);
 		return EINVAL;
@@ -475,5 +475,5 @@
 		if (pos >= node->data_size) {
 			*rbytes = 0;
-			async_data_read_finalize(chandle, NULL, 0);
+			async_data_read_finalize(&call, NULL, 0);
 			udf_node_put(rfn);
 			return EOK;
@@ -482,9 +482,9 @@
 		size_t read_len = 0;
 		if (node->data == NULL)
-			rc = udf_read_file(&read_len, chandle, node, pos, len);
+			rc = udf_read_file(&read_len, &call, node, pos, len);
 		else {
 			/* File in allocation descriptors area */
 			read_len = (len < node->data_size) ? len : node->data_size;
-			async_data_read_finalize(chandle, node->data + pos, read_len);
+			async_data_read_finalize(&call, node->data + pos, read_len);
 			rc = EOK;
 		}
@@ -505,5 +505,5 @@
 			    fid->lenght_file_id, &node->instance->charset);
 
-			async_data_read_finalize(chandle, name, str_size(name) + 1);
+			async_data_read_finalize(&call, name, str_size(name) + 1);
 			*rbytes = 1;
 			free(name);
@@ -517,5 +517,5 @@
 			*rbytes = 0;
 			udf_node_put(rfn);
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 			return ENOENT;
 		}
Index: uspace/srv/hid/compositor/compositor.c
===================================================================
--- uspace/srv/hid/compositor/compositor.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/compositor/compositor.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -602,29 +602,29 @@
 }
 
-static void comp_window_get_event(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void comp_window_get_event(window_t *win, ipc_call_t *icall)
 {
 	window_event_t *event = (window_event_t *) prodcons_consume(&win->queue);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t len;
 
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(icall, EINVAL);
 		free(event);
 		return;
 	}
 
-	errno_t rc = async_data_read_finalize(chandle, event, len);
+	errno_t rc = async_data_read_finalize(&call, event, len);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		free(event);
 		return;
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 	free(event);
 }
 
-static void comp_window_damage(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void comp_window_damage(window_t *win, ipc_call_t *icall)
 {
 	double x = IPC_GET_ARG1(*icall);
@@ -644,8 +644,8 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void comp_window_grab(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void comp_window_grab(window_t *win, ipc_call_t *icall)
 {
 	sysarg_t pos_id = IPC_GET_ARG1(*icall);
@@ -674,5 +674,5 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -706,20 +706,20 @@
 }
 
-static void comp_window_resize(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void comp_window_resize(window_t *win, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	unsigned int flags;
 
 	/* Start sharing resized window with client. */
-	if (!async_share_out_receive(&chandle, &size, &flags)) {
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_share_out_receive(&call, &size, &flags)) {
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	void *new_cell_storage;
-	errno_t rc = async_share_out_finalize(chandle, &new_cell_storage);
+	errno_t rc = async_share_out_finalize(&call, &new_cell_storage);
 	if ((rc != EOK) || (new_cell_storage == AS_MAP_FAILED)) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -730,5 +730,5 @@
 	if (!new_surface) {
 		as_area_destroy(new_cell_storage);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -817,5 +817,5 @@
 	comp_damage(x, y, width, height);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -849,5 +849,5 @@
 }
 
-static void comp_window_close(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void comp_window_close(window_t *win, ipc_call_t *icall)
 {
 	/* Stop managing the window. */
@@ -891,12 +891,12 @@
 
 	comp_damage(x, y, width, height);
-	async_answer_0(icall_handle, EOK);
-}
-
-static void comp_window_close_request(window_t *win, cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void comp_window_close_request(window_t *win, ipc_call_t *icall)
 {
 	window_event_t *event = (window_event_t *) malloc(sizeof(window_event_t));
 	if (event == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -906,18 +906,17 @@
 
 	prodcons_produce(&win->queue, &event->link);
-	async_answer_0(icall_handle, EOK);
-}
-
-static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(icall, EOK);
+}
+
+static void client_connection(ipc_call_t *icall, void *arg)
 {
 	ipc_call_t call;
-	cap_call_handle_t chandle;
 	service_id_t service_id = (service_id_t) IPC_GET_ARG2(*icall);
 
 	/* Allocate resources for new window and register it to the location service. */
 	if (service_id == winreg_id) {
-		async_answer_0(icall_handle, EOK);
-
-		chandle = async_get_call(&call);
+		async_answer_0(icall, EOK);
+
+		async_get_call(&call);
 		if (IPC_GET_IMETHOD(call) == WINDOW_REGISTER) {
 			fibril_mutex_lock(&window_list_mtx);
@@ -925,5 +924,5 @@
 			window_t *win = window_create();
 			if (!win) {
-				async_answer_2(chandle, ENOMEM, 0, 0);
+				async_answer_2(&call, ENOMEM, 0, 0);
 				fibril_mutex_unlock(&window_list_mtx);
 				return;
@@ -944,5 +943,5 @@
 			if (loc_service_register(name_in, &win->in_dsid) != EOK) {
 				window_destroy(win);
-				async_answer_2(chandle, EINVAL, 0, 0);
+				async_answer_2(&call, EINVAL, 0, 0);
 				fibril_mutex_unlock(&window_list_mtx);
 				return;
@@ -952,5 +951,5 @@
 				loc_service_unregister(win->in_dsid);
 				window_destroy(win);
-				async_answer_2(chandle, EINVAL, 0, 0);
+				async_answer_2(&call, EINVAL, 0, 0);
 				fibril_mutex_unlock(&window_list_mtx);
 				return;
@@ -966,5 +965,5 @@
 			}
 
-			async_answer_2(chandle, EOK, win->in_dsid, win->out_dsid);
+			async_answer_2(&call, EOK, win->in_dsid, win->out_dsid);
 			fibril_mutex_unlock(&window_list_mtx);
 
@@ -975,5 +974,5 @@
 			return;
 		} else {
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			return;
 		}
@@ -993,7 +992,7 @@
 	if (win) {
 		atomic_inc(&win->ref_cnt);
-		async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EOK);
 	} else {
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -1002,8 +1001,8 @@
 	if (win->in_dsid == service_id) {
 		while (true) {
-			chandle = async_get_call(&call);
+			async_get_call(&call);
 
 			if (!IPC_GET_IMETHOD(call)) {
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 				atomic_dec(&win->ref_cnt);
 				window_destroy(win);
@@ -1013,16 +1012,16 @@
 			switch (IPC_GET_IMETHOD(call)) {
 			case WINDOW_GET_EVENT:
-				comp_window_get_event(win, chandle, &call);
+				comp_window_get_event(win, &call);
 				break;
 			default:
-				async_answer_0(chandle, EINVAL);
+				async_answer_0(&call, EINVAL);
 			}
 		}
 	} else if (win->out_dsid == service_id) {
 		while (true) {
-			chandle = async_get_call(&call);
+			async_get_call(&call);
 
 			if (!IPC_GET_IMETHOD(call)) {
-				comp_window_close(win, chandle, &call);
+				comp_window_close(win, &call);
 				atomic_dec(&win->ref_cnt);
 				window_destroy(win);
@@ -1032,11 +1031,11 @@
 			switch (IPC_GET_IMETHOD(call)) {
 			case WINDOW_DAMAGE:
-				comp_window_damage(win, chandle, &call);
+				comp_window_damage(win, &call);
 				break;
 			case WINDOW_GRAB:
-				comp_window_grab(win, chandle, &call);
+				comp_window_grab(win, &call);
 				break;
 			case WINDOW_RESIZE:
-				comp_window_resize(win, chandle, &call);
+				comp_window_resize(win, &call);
 				break;
 			case WINDOW_CLOSE:
@@ -1045,17 +1044,17 @@
 				 * the case when the client is killed abruptly.
 				 */
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 				break;
 			case WINDOW_CLOSE_REQUEST:
-				comp_window_close_request(win, chandle, &call);
+				comp_window_close_request(win, &call);
 				break;
 			default:
-				async_answer_0(chandle, EINVAL);
-			}
-		}
-	}
-}
-
-static void comp_mode_change(viewport_t *vp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+				async_answer_0(&call, EINVAL);
+			}
+		}
+	}
+}
+
+static void comp_mode_change(viewport_t *vp, ipc_call_t *icall)
 {
 	sysarg_t mode_idx = IPC_GET_ARG2(*icall);
@@ -1067,5 +1066,5 @@
 	if (rc != EOK) {
 		fibril_mutex_unlock(&viewport_list_mtx);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -1076,5 +1075,5 @@
 	if (!new_surface) {
 		fibril_mutex_unlock(&viewport_list_mtx);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1086,5 +1085,5 @@
 		surface_destroy(new_surface);
 		fibril_mutex_unlock(&viewport_list_mtx);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -1096,5 +1095,5 @@
 
 	fibril_mutex_unlock(&viewport_list_mtx);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	comp_restrict_pointers();
@@ -1130,5 +1129,5 @@
 	fibril_mutex_unlock(&window_list_mtx);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	/* All fibrils of the compositor will terminate soon. */
@@ -1136,5 +1135,5 @@
 #endif
 
-static void comp_visualizer_disconnect(viewport_t *vp, cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void comp_visualizer_disconnect(viewport_t *vp, ipc_call_t *icall)
 {
 	/* Release viewport resources. */
@@ -1146,5 +1145,5 @@
 	fibril_mutex_unlock(&viewport_list_mtx);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	comp_restrict_pointers();
@@ -1152,5 +1151,5 @@
 }
 
-static void vsl_notifications(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void vsl_notifications(ipc_call_t *icall, void *arg)
 {
 	viewport_t *vp = NULL;
@@ -1170,5 +1169,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -1179,11 +1178,11 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case VISUALIZER_MODE_CHANGE:
-			comp_mode_change(vp, chandle, &call);
+			comp_mode_change(vp, &call);
 			break;
 		case VISUALIZER_DISCONNECT:
-			comp_visualizer_disconnect(vp, chandle, &call);
+			comp_visualizer_disconnect(vp, &call);
 			return;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/hid/compositor/compositor.h
===================================================================
--- uspace/srv/hid/compositor/compositor.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/compositor/compositor.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -37,8 +37,10 @@
 
 typedef native_t desktop_coord_t;
+
 typedef struct {
 	desktop_coord_t x;
 	desktop_coord_t y;
 } desktop_point_t;
+
 typedef desktop_point_t desktop_vector_t;
 
@@ -55,4 +57,5 @@
 	double y;
 } double_point_t;
+
 typedef double_point_t double_vector_t;
 
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/console/console.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -507,5 +507,5 @@
 }
 
-static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void client_connection(ipc_call_t *icall, void *arg)
 {
 	console_t *cons = NULL;
@@ -519,5 +519,5 @@
 
 	if (cons == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -526,5 +526,5 @@
 		cons_set_cursor_vis(cons, true);
 
-	con_conn(icall_handle, icall, &cons->srvs);
+	con_conn(icall, &cons->srvs);
 }
 
Index: uspace/srv/hid/input/ctl/kbdev.c
===================================================================
--- uspace/srv/hid/input/ctl/kbdev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/input/ctl/kbdev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -54,5 +54,5 @@
 static void kbdev_ctl_set_ind(kbd_dev_t *, unsigned int);
 
-static void kbdev_callback_conn(cap_call_handle_t, ipc_call_t *, void *arg);
+static void kbdev_callback_conn(ipc_call_t *, void *arg);
 
 kbd_ctl_ops_t kbdev_ctl = {
@@ -147,5 +147,5 @@
 }
 
-static void kbdev_callback_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void kbdev_callback_conn(ipc_call_t *icall, void *arg)
 {
 	kbdev_t *kbdev;
@@ -158,7 +158,6 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle;
+		async_get_call(&call);
 
-		chandle = async_get_call(&call);
 		if (!IPC_GET_IMETHOD(call)) {
 			kbdev_destroy(kbdev);
@@ -179,5 +178,5 @@
 		}
 
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 }
Index: uspace/srv/hid/input/input.c
===================================================================
--- uspace/srv/hid/input/input.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/input/input.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -320,17 +320,17 @@
 
 /** New client connection */
-static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void client_connection(ipc_call_t *icall, void *arg)
 {
 	client_t *client = (client_t *) async_get_client_data();
 	if (client == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -340,5 +340,5 @@
 			}
 
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -349,7 +349,7 @@
 			if (client->sess == NULL) {
 				client->sess = sess;
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 			} else
-				async_answer_0(chandle, ELIMIT);
+				async_answer_0(&call, ELIMIT);
 		} else {
 			switch (IPC_GET_IMETHOD(call)) {
@@ -357,8 +357,8 @@
 				active_client = client;
 				client_arbitration();
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 				break;
 			default:
-				async_answer_0(chandle, EINVAL);
+				async_answer_0(&call, EINVAL);
 			}
 		}
Index: uspace/srv/hid/input/proto/mousedev.c
===================================================================
--- uspace/srv/hid/input/proto/mousedev.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/input/proto/mousedev.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -70,6 +70,5 @@
 }
 
-static void mousedev_callback_conn(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void mousedev_callback_conn(ipc_call_t *icall, void *arg)
 {
 	/* Mousedev device structure */
@@ -78,5 +77,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -110,5 +109,5 @@
 		}
 
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 }
Index: uspace/srv/hid/isdv4_tablet/main.c
===================================================================
--- uspace/srv/hid/isdv4_tablet/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/isdv4_tablet/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -63,7 +63,7 @@
 }
 
-static void mouse_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
-{
-	async_answer_0(icall_handle, EOK);
+static void mouse_connection(ipc_call_t *icall, void *arg)
+{
+	async_answer_0(icall, EOK);
 
 	async_sess_t *sess =
@@ -79,10 +79,10 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
 			break;
 
-		async_answer_0(chandle, ENOTSUP);
+		async_answer_0(&call, ENOTSUP);
 	}
 }
Index: uspace/srv/hid/output/output.c
===================================================================
--- uspace/srv/hid/output/output.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/output/output.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -78,5 +78,5 @@
 }
 
-static void srv_yield(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void srv_yield(ipc_call_t *icall)
 {
 	errno_t ret = EOK;
@@ -90,8 +90,8 @@
 	}
 
-	async_answer_0(icall_handle, ret);
-}
-
-static void srv_claim(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, ret);
+}
+
+static void srv_claim(ipc_call_t *icall)
 {
 	errno_t ret = EOK;
@@ -105,8 +105,8 @@
 	}
 
-	async_answer_0(icall_handle, ret);
-}
-
-static void srv_get_dimensions(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, ret);
+}
+
+static void srv_get_dimensions(ipc_call_t *icall)
 {
 	sysarg_t cols = MAX_COLS;
@@ -118,8 +118,8 @@
 	}
 
-	async_answer_2(icall_handle, EOK, cols, rows);
-}
-
-static void srv_get_caps(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_2(icall, EOK, cols, rows);
+}
+
+static void srv_get_caps(ipc_call_t *icall)
 {
 	console_caps_t caps = 0;
@@ -131,8 +131,8 @@
 	}
 
-	async_answer_1(icall_handle, EOK, caps);
-}
-
-static frontbuf_t *resolve_frontbuf(sysarg_t handle, cap_call_handle_t icall_handle)
+	async_answer_1(icall, EOK, caps);
+}
+
+static frontbuf_t *resolve_frontbuf(sysarg_t handle, ipc_call_t *icall)
 {
 	frontbuf_t *frontbuf = NULL;
@@ -145,5 +145,5 @@
 
 	if (frontbuf == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return NULL;
 	}
@@ -152,9 +152,9 @@
 }
 
-static void srv_frontbuf_create(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void srv_frontbuf_create(ipc_call_t *icall)
 {
 	frontbuf_t *frontbuf = (frontbuf_t *) malloc(sizeof(frontbuf_t));
 	if (frontbuf == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -162,26 +162,26 @@
 	link_initialize(&frontbuf->link);
 
-	cap_call_handle_t chandle;
-	if (!async_share_out_receive(&chandle, &frontbuf->size,
+	ipc_call_t call;
+	if (!async_share_out_receive(&call, &frontbuf->size,
 	    &frontbuf->flags)) {
 		free(frontbuf);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_share_out_finalize(chandle, &frontbuf->data);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_share_out_finalize(&call, &frontbuf->data);
 	if ((rc != EOK) || (frontbuf->data == AS_MAP_FAILED)) {
 		free(frontbuf);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
 	list_append(&frontbuf->link, &frontbufs);
-	async_answer_1(icall_handle, EOK, (sysarg_t) frontbuf);
-}
-
-static void srv_frontbuf_destroy(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
+	async_answer_1(icall, EOK, (sysarg_t) frontbuf);
+}
+
+static void srv_frontbuf_destroy(ipc_call_t *icall)
+{
+	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
 	if (frontbuf == NULL)
 		return;
@@ -191,10 +191,10 @@
 	free(frontbuf);
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void srv_cursor_update(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
+	async_answer_0(icall, EOK);
+}
+
+static void srv_cursor_update(ipc_call_t *icall)
+{
+	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
 	if (frontbuf == NULL)
 		return;
@@ -223,8 +223,8 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void srv_set_style(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void srv_set_style(ipc_call_t *icall)
 {
 	list_foreach(outdevs, link, outdev_t, dev) {
@@ -234,8 +234,8 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void srv_set_color(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void srv_set_color(ipc_call_t *icall)
 {
 	list_foreach(outdevs, link, outdev_t, dev) {
@@ -249,8 +249,8 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
-}
-
-static void srv_set_rgb_color(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void srv_set_rgb_color(ipc_call_t *icall)
 {
 	list_foreach(outdevs, link, outdev_t, dev) {
@@ -260,5 +260,5 @@
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -302,7 +302,7 @@
 }
 
-static void srv_update(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
+static void srv_update(ipc_call_t *icall)
+{
+	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
 	if (frontbuf == NULL)
 		return;
@@ -348,11 +348,10 @@
 	}
 
-
-	async_answer_0(icall_handle, EOK);
-}
-
-static void srv_damage(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
+	async_answer_0(icall, EOK);
+}
+
+static void srv_damage(ipc_call_t *icall)
+{
+	frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
 	if (frontbuf == NULL)
 		return;
@@ -388,18 +387,19 @@
 
 	}
-	async_answer_0(icall_handle, EOK);
-}
-
-static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+
+	async_answer_0(icall, EOK);
+}
+
+static void client_connection(ipc_call_t *icall, void *arg)
 {
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -407,44 +407,44 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case OUTPUT_YIELD:
-			srv_yield(chandle, &call);
+			srv_yield(&call);
 			break;
 		case OUTPUT_CLAIM:
-			srv_claim(chandle, &call);
+			srv_claim(&call);
 			break;
 		case OUTPUT_GET_DIMENSIONS:
-			srv_get_dimensions(chandle, &call);
+			srv_get_dimensions(&call);
 			break;
 		case OUTPUT_GET_CAPS:
-			srv_get_caps(chandle, &call);
+			srv_get_caps(&call);
 			break;
 
 		case OUTPUT_FRONTBUF_CREATE:
-			srv_frontbuf_create(chandle, &call);
+			srv_frontbuf_create(&call);
 			break;
 		case OUTPUT_FRONTBUF_DESTROY:
-			srv_frontbuf_destroy(chandle, &call);
+			srv_frontbuf_destroy(&call);
 			break;
 
 		case OUTPUT_CURSOR_UPDATE:
-			srv_cursor_update(chandle, &call);
+			srv_cursor_update(&call);
 			break;
 		case OUTPUT_SET_STYLE:
-			srv_set_style(chandle, &call);
+			srv_set_style(&call);
 			break;
 		case OUTPUT_SET_COLOR:
-			srv_set_color(chandle, &call);
+			srv_set_color(&call);
 			break;
 		case OUTPUT_SET_RGB_COLOR:
-			srv_set_rgb_color(chandle, &call);
+			srv_set_rgb_color(&call);
 			break;
 		case OUTPUT_UPDATE:
-			srv_update(chandle, &call);
+			srv_update(&call);
 			break;
 		case OUTPUT_DAMAGE:
-			srv_damage(chandle, &call);
+			srv_damage(&call);
 			break;
 
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/hid/remcons/remcons.c
===================================================================
--- uspace/srv/hid/remcons/remcons.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/remcons/remcons.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -216,15 +216,15 @@
 
 /** Callback when client connects to a telnet terminal. */
-static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void client_connection(ipc_call_t *icall, void *arg)
 {
 	/* Find the user. */
 	telnet_user_t *user = telnet_user_get_for_client_connection(IPC_GET_ARG2(*icall));
 	if (user == NULL) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
 
 	/* Handle messages. */
-	con_conn(icall_handle, icall, &user->srvs);
+	con_conn(icall, &user->srvs);
 }
 
Index: uspace/srv/hid/rfb/main.c
===================================================================
--- uspace/srv/hid/rfb/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/rfb/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -145,7 +145,7 @@
 }
 
-static void client_connection(cap_call_handle_t chandle, ipc_call_t *call, void *data)
-{
-	graph_visualizer_connection(vis, chandle, call, data);
+static void client_connection(ipc_call_t *call, void *data)
+{
+	graph_visualizer_connection(vis, call, data);
 }
 
Index: uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
===================================================================
--- uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -69,14 +69,13 @@
 static s3c24xx_ts_t *ts;
 
-static void s3c24xx_ts_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg);
-static void s3c24xx_ts_irq_handler(ipc_call_t *call, void *);
-static void s3c24xx_ts_pen_down(s3c24xx_ts_t *ts);
-static void s3c24xx_ts_pen_up(s3c24xx_ts_t *ts);
-static void s3c24xx_ts_eoc(s3c24xx_ts_t *ts);
-static int s3c24xx_ts_init(s3c24xx_ts_t *ts);
-static void s3c24xx_ts_wait_for_int_mode(s3c24xx_ts_t *ts, ts_updn_t updn);
-static void s3c24xx_ts_convert_samples(int smp0, int smp1, int *x, int *y);
-static int lin_map_range(int v, int i0, int i1, int o0, int o1);
+static void s3c24xx_ts_connection(ipc_call_t *, void *);
+static void s3c24xx_ts_irq_handler(ipc_call_t *, void *);
+static void s3c24xx_ts_pen_down(s3c24xx_ts_t *);
+static void s3c24xx_ts_pen_up(s3c24xx_ts_t *);
+static void s3c24xx_ts_eoc(s3c24xx_ts_t *);
+static int s3c24xx_ts_init(s3c24xx_ts_t *);
+static void s3c24xx_ts_wait_for_int_mode(s3c24xx_ts_t *, ts_updn_t);
+static void s3c24xx_ts_convert_samples(int, int, int *, int *);
+static int lin_map_range(int, int, int, int, int);
 
 int main(int argc, char *argv[])
@@ -371,12 +370,11 @@
 
 /** Handle mouse client connection. */
-static void s3c24xx_ts_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
-{
-	async_answer_0(icall_handle, EOK);
+static void s3c24xx_ts_connection(ipc_call_t *icall, void *arg)
+{
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -386,5 +384,5 @@
 			}
 
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -395,9 +393,9 @@
 			if (ts->client_sess == NULL) {
 				ts->client_sess = sess;
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 			} else
-				async_answer_0(chandle, ELIMIT);
+				async_answer_0(&call, ELIMIT);
 		} else
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 	}
 }
Index: uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -64,5 +64,5 @@
 static s3c24xx_uart_t *uart;
 
-static void s3c24xx_uart_connection(cap_call_handle_t, ipc_call_t *, void *);
+static void s3c24xx_uart_connection(ipc_call_t *, void *);
 static void s3c24xx_uart_irq_handler(ipc_call_t *, void *);
 static int s3c24xx_uart_init(s3c24xx_uart_t *);
@@ -113,12 +113,10 @@
 
 /** Character device connection handler. */
-static void s3c24xx_uart_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void s3c24xx_uart_connection(ipc_call_t *icall, void *arg)
 {
 	s3c24xx_uart_t *uart = (s3c24xx_uart_t *) arg;
 
-	chardev_conn(icall_handle, icall, &uart->cds);
-}
-
+	chardev_conn(icall, &uart->cds);
+}
 
 static void s3c24xx_uart_irq_handler(ipc_call_t *call, void *arg)
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/loader/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -90,7 +90,7 @@
 static bool connected = false;
 
-static void ldr_get_taskid(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	cap_call_handle_t chandle;
+static void ldr_get_taskid(ipc_call_t *req)
+{
+	ipc_call_t call;
 	task_id_t task_id;
 	size_t len;
@@ -98,7 +98,7 @@
 	task_id = task_get_id();
 
-	if (!async_data_read_receive(&chandle, &len)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(req_handle, EINVAL);
+	if (!async_data_read_receive(&call, &len)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -107,14 +107,12 @@
 		len = sizeof(task_id);
 
-	async_data_read_finalize(chandle, &task_id, len);
-	async_answer_0(req_handle, EOK);
+	async_data_read_finalize(&call, &task_id, len);
+	async_answer_0(req, EOK);
 }
 
 /** Receive a call setting the current working directory.
  *
- * @param req_handle
- * @param request
- */
-static void ldr_set_cwd(cap_call_handle_t req_handle, ipc_call_t *request)
+ */
+static void ldr_set_cwd(ipc_call_t *req)
 {
 	char *buf;
@@ -128,25 +126,25 @@
 	}
 
-	async_answer_0(req_handle, rc);
+	async_answer_0(req, rc);
 }
 
 /** Receive a call setting the program to execute.
  *
- * @param req_handle
- * @param request
- */
-static void ldr_set_program(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	cap_call_handle_t write_chandle;
+ */
+static void ldr_set_program(ipc_call_t *req)
+{
+	ipc_call_t call;
 	size_t namesize;
-	if (!async_data_write_receive(&write_chandle, &namesize)) {
-		async_answer_0(req_handle, EINVAL);
+	if (!async_data_write_receive(&call, &namesize)) {
+		async_answer_0(req, EINVAL);
 		return;
 	}
 
 	char *name = malloc(namesize);
-	errno_t rc = async_data_write_finalize(write_chandle, name, namesize);
+	// FIXME: check return value
+
+	errno_t rc = async_data_write_finalize(&call, name, namesize);
 	if (rc != EOK) {
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -155,5 +153,5 @@
 	rc = vfs_receive_handle(true, &file);
 	if (rc != EOK) {
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -161,13 +159,11 @@
 	progname = name;
 	program_fd = file;
-	async_answer_0(req_handle, EOK);
+	async_answer_0(req, EOK);
 }
 
 /** Receive a call setting arguments of the program to execute.
  *
- * @param req_handle
- * @param request
- */
-static void ldr_set_args(cap_call_handle_t req_handle, ipc_call_t *request)
+ */
+static void ldr_set_args(ipc_call_t *req)
 {
 	char *buf;
@@ -194,5 +190,5 @@
 		if (_argv == NULL) {
 			free(buf);
-			async_answer_0(req_handle, ENOMEM);
+			async_answer_0(req, ENOMEM);
 			return;
 		}
@@ -226,30 +222,28 @@
 	}
 
-	async_answer_0(req_handle, rc);
+	async_answer_0(req, rc);
 }
 
 /** Receive a call setting inbox files of the program to execute.
  *
- * @param req_handle
- * @param request
- */
-static void ldr_add_inbox(cap_call_handle_t req_handle, ipc_call_t *request)
+ */
+static void ldr_add_inbox(ipc_call_t *req)
 {
 	if (inbox_entries == INBOX_MAX_ENTRIES) {
-		async_answer_0(req_handle, ERANGE);
-		return;
-	}
-
-	cap_call_handle_t write_chandle;
+		async_answer_0(req, ERANGE);
+		return;
+	}
+
+	ipc_call_t call;
 	size_t namesize;
-	if (!async_data_write_receive(&write_chandle, &namesize)) {
-		async_answer_0(req_handle, EINVAL);
+	if (!async_data_write_receive(&call, &namesize)) {
+		async_answer_0(req, EINVAL);
 		return;
 	}
 
 	char *name = malloc(namesize);
-	errno_t rc = async_data_write_finalize(write_chandle, name, namesize);
+	errno_t rc = async_data_write_finalize(&call, name, namesize);
 	if (rc != EOK) {
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -258,5 +252,5 @@
 	rc = vfs_receive_handle(true, &file);
 	if (rc != EOK) {
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -272,19 +266,18 @@
 	inbox[inbox_entries].file = file;
 	inbox_entries++;
-	async_answer_0(req_handle, EOK);
+	async_answer_0(req, EOK);
 }
 
 /** Load the previously selected program.
  *
- * @param req_handle
- * @param request
  * @return 0 on success, !0 on error.
- */
-static int ldr_load(cap_call_handle_t req_handle, ipc_call_t *request)
+ *
+ */
+static int ldr_load(ipc_call_t *req)
 {
 	int rc = elf_load(program_fd, &prog_info);
 	if (rc != EE_OK) {
 		DPRINTF("Failed to load executable for '%s'.\n", progname);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return 1;
 	}
@@ -300,5 +293,5 @@
 	pcb.inbox_entries = inbox_entries;
 
-	async_answer_0(req_handle, EOK);
+	async_answer_0(req, EOK);
 	return 0;
 }
@@ -306,10 +299,8 @@
 /** Run the previously loaded program.
  *
- * @param req_handle
- * @param request
  * @return 0 on success, !0 on error.
- */
-static __attribute__((noreturn)) void ldr_run(cap_call_handle_t req_handle,
-    ipc_call_t *request)
+ *
+ */
+static __attribute__((noreturn)) void ldr_run(ipc_call_t *req)
 {
 	DPRINTF("Set task name\n");
@@ -320,5 +311,5 @@
 	/* Run program */
 	DPRINTF("Reply OK\n");
-	async_answer_0(req_handle, EOK);
+	async_answer_0(req, EOK);
 	DPRINTF("Jump to entry point at %p\n", pcb.entry);
 	entry_point_jmp(prog_info.finfo.entry, &pcb);
@@ -331,11 +322,11 @@
  * Receive and carry out commands (of which the last one should be
  * to execute the loaded program).
- */
-static void ldr_connection(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+ *
+ */
+static void ldr_connection(ipc_call_t *icall, void *arg)
 {
 	/* Already have a connection? */
 	if (connected) {
-		async_answer_0(icall_handle, ELIMIT);
+		async_answer_0(icall, ELIMIT);
 		return;
 	}
@@ -344,5 +335,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	/* Ignore parameters, the connection is already open */
@@ -352,5 +343,5 @@
 		errno_t retval;
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -359,23 +350,23 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case LOADER_GET_TASKID:
-			ldr_get_taskid(chandle, &call);
+			ldr_get_taskid(&call);
 			continue;
 		case LOADER_SET_CWD:
-			ldr_set_cwd(chandle, &call);
+			ldr_set_cwd(&call);
 			continue;
 		case LOADER_SET_PROGRAM:
-			ldr_set_program(chandle, &call);
+			ldr_set_program(&call);
 			continue;
 		case LOADER_SET_ARGS:
-			ldr_set_args(chandle, &call);
+			ldr_set_args(&call);
 			continue;
 		case LOADER_ADD_INBOX:
-			ldr_add_inbox(chandle, &call);
+			ldr_add_inbox(&call);
 			continue;
 		case LOADER_LOAD:
-			ldr_load(chandle, &call);
+			ldr_load(&call);
 			continue;
 		case LOADER_RUN:
-			ldr_run(chandle, &call);
+			ldr_run(&call);
 			/* Not reached */
 		default:
@@ -384,5 +375,5 @@
 		}
 
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 }
Index: uspace/srv/locsrv/locsrv.c
===================================================================
--- uspace/srv/locsrv/locsrv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/locsrv/locsrv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -341,8 +341,8 @@
 {
 	ipc_call_t icall;
-	cap_call_handle_t icall_handle = async_get_call(&icall);
+	async_get_call(&icall);
 
 	if (IPC_GET_IMETHOD(icall) != LOC_SERVER_REGISTER) {
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&icall, EREFUSED);
 		return NULL;
 	}
@@ -351,5 +351,5 @@
 	    (loc_server_t *) malloc(sizeof(loc_server_t));
 	if (server == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&icall, ENOMEM);
 		return NULL;
 	}
@@ -362,5 +362,5 @@
 	if (rc != EOK) {
 		free(server);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&icall, rc);
 		return NULL;
 	}
@@ -373,5 +373,5 @@
 		free(server->name);
 		free(server);
-		async_answer_0(icall_handle, ENOTSUP);
+		async_answer_0(&icall, ENOTSUP);
 		return NULL;
 	}
@@ -403,5 +403,5 @@
 	fibril_mutex_unlock(&servers_list_mutex);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(&icall, EOK);
 
 	return server;
@@ -456,9 +456,8 @@
  *
  */
-static void loc_service_register(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    loc_server_t *server)
+static void loc_service_register(ipc_call_t *icall, loc_server_t *server)
 {
 	if (server == NULL) {
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -468,5 +467,5 @@
 	    (loc_service_t *) malloc(sizeof(loc_service_t));
 	if (service == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -478,5 +477,5 @@
 	if (rc != EOK) {
 		free(service);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -486,5 +485,5 @@
 		free(fqsn);
 		free(service);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -500,5 +499,5 @@
 		free(service->name);
 		free(service);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -516,5 +515,5 @@
 		free(service->name);
 		free(service);
-		async_answer_0(icall_handle, EEXIST);
+		async_answer_0(icall, EEXIST);
 		return;
 	}
@@ -538,5 +537,5 @@
 	fibril_mutex_unlock(&services_list_mutex);
 
-	async_answer_1(icall_handle, EOK, service->id);
+	async_answer_1(icall, EOK, service->id);
 }
 
@@ -544,6 +543,5 @@
  *
  */
-static void loc_service_unregister(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    loc_server_t *server)
+static void loc_service_unregister(ipc_call_t *icall, loc_server_t *server)
 {
 	loc_service_t *svc;
@@ -553,5 +551,5 @@
 	if (svc == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -568,17 +566,17 @@
 	 */
 	loc_category_change_event();
-	async_answer_0(icall_handle, EOK);
-}
-
-static void loc_category_get_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, EOK);
+}
+
+static void loc_category_get_name(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	category_t *cat;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -589,6 +587,6 @@
 	if (cat == NULL) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -597,20 +595,20 @@
 	if (act_size > size) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, EOVERFLOW);
-		async_answer_0(icall_handle, EOVERFLOW);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, cat->name,
+		async_answer_0(&call, EOVERFLOW);
+		async_answer_0(icall, EOVERFLOW);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, cat->name,
 	    min(size, act_size));
 
 	fibril_mutex_unlock(&cdir.mutex);
 
-	async_answer_0(icall_handle, retval);
-}
-
-static void loc_service_get_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, retval);
+}
+
+static void loc_service_get_name(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
@@ -618,7 +616,7 @@
 	char *fqn;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -629,6 +627,6 @@
 	if (svc == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -636,6 +634,6 @@
 	if (asprintf(&fqn, "%s/%s", svc->namespace->name, svc->name) < 0) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -645,10 +643,10 @@
 		free(fqn);
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, EOVERFLOW);
-		async_answer_0(icall_handle, EOVERFLOW);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, fqn,
+		async_answer_0(&call, EOVERFLOW);
+		async_answer_0(icall, EOVERFLOW);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, fqn,
 	    min(size, act_size));
 	free(fqn);
@@ -656,17 +654,17 @@
 	fibril_mutex_unlock(&services_list_mutex);
 
-	async_answer_0(icall_handle, retval);
-}
-
-static void loc_service_get_server_name(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, retval);
+}
+
+static void loc_service_get_server_name(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	loc_service_t *svc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -677,6 +675,6 @@
 	if (svc == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -684,6 +682,6 @@
 	if (svc->server == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -692,15 +690,15 @@
 	if (act_size > size) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, EOVERFLOW);
-		async_answer_0(icall_handle, EOVERFLOW);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, svc->server->name,
+		async_answer_0(&call, EOVERFLOW);
+		async_answer_0(icall, EOVERFLOW);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, svc->server->name,
 	    min(size, act_size));
 
 	fibril_mutex_unlock(&services_list_mutex);
 
-	async_answer_0(icall_handle, retval);
+	async_answer_0(icall, retval);
 }
 
@@ -711,5 +709,5 @@
  *
  */
-static void loc_forward(cap_call_handle_t chandle, ipc_call_t *call, void *arg)
+static void loc_forward(ipc_call_t *call, void *arg)
 {
 	fibril_mutex_lock(&services_list_mutex);
@@ -724,10 +722,10 @@
 	if ((svc == NULL) || (svc->server == NULL) || (!svc->server->sess)) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
 
 	async_exch_t *exch = async_exchange_begin(svc->server->sess);
-	async_forward_fast(chandle, exch, iface, svc->id, 0, IPC_FF_NONE);
+	async_forward_fast(call, exch, iface, svc->id, 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -741,5 +739,5 @@
  *
  */
-static void loc_service_get_id(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_service_get_id(ipc_call_t *icall)
 {
 	char *fqsn;
@@ -749,5 +747,5 @@
 	    LOC_NAME_MAXLEN, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -757,5 +755,5 @@
 	if (!loc_fqsn_split(fqsn, &ns_name, &name)) {
 		free(fqsn);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -784,5 +782,5 @@
 		}
 
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		free(ns_name);
 		free(name);
@@ -791,5 +789,5 @@
 	}
 
-	async_answer_1(icall_handle, EOK, svc->id);
+	async_answer_1(icall, EOK, svc->id);
 
 	fibril_mutex_unlock(&services_list_mutex);
@@ -804,5 +802,5 @@
  *
  */
-static void loc_namespace_get_id(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_namespace_get_id(ipc_call_t *icall)
 {
 	char *name;
@@ -812,5 +810,5 @@
 	    LOC_NAME_MAXLEN, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -837,5 +835,5 @@
 		}
 
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		free(name);
 		fibril_mutex_unlock(&services_list_mutex);
@@ -843,5 +841,5 @@
 	}
 
-	async_answer_1(icall_handle, EOK, namespace->id);
+	async_answer_1(icall, EOK, namespace->id);
 
 	fibril_mutex_unlock(&services_list_mutex);
@@ -858,9 +856,9 @@
  *
  */
-static void loc_callback_create(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_callback_create(ipc_call_t *icall)
 {
 	cb_sess_t *cb_sess = calloc(1, sizeof(cb_sess_t));
 	if (cb_sess == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -869,5 +867,5 @@
 	if (sess == NULL) {
 		free(cb_sess);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -880,5 +878,5 @@
 	fibril_mutex_unlock(&callback_sess_mutex);
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -902,5 +900,5 @@
  *
  */
-static void loc_category_get_id(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_category_get_id(ipc_call_t *icall)
 {
 	char *name;
@@ -911,5 +909,5 @@
 	    LOC_NAME_MAXLEN, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -920,9 +918,9 @@
 	if (cat == NULL) {
 		/* Category not found */
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto cleanup;
 	}
 
-	async_answer_1(icall_handle, EOK, cat->id);
+	async_answer_1(icall, EOK, cat->id);
 cleanup:
 	fibril_mutex_unlock(&cdir.mutex);
@@ -930,5 +928,5 @@
 }
 
-static void loc_id_probe(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_id_probe(ipc_call_t *icall)
 {
 	fibril_mutex_lock(&services_list_mutex);
@@ -940,21 +938,21 @@
 		    loc_service_find_id(IPC_GET_ARG1(*icall));
 		if (svc == NULL)
-			async_answer_1(icall_handle, EOK, LOC_OBJECT_NONE);
+			async_answer_1(icall, EOK, LOC_OBJECT_NONE);
 		else
-			async_answer_1(icall_handle, EOK, LOC_OBJECT_SERVICE);
+			async_answer_1(icall, EOK, LOC_OBJECT_SERVICE);
 	} else
-		async_answer_1(icall_handle, EOK, LOC_OBJECT_NAMESPACE);
+		async_answer_1(icall, EOK, LOC_OBJECT_NAMESPACE);
 
 	fibril_mutex_unlock(&services_list_mutex);
 }
 
-static void loc_get_namespace_count(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_get_namespace_count(ipc_call_t *icall)
 {
 	fibril_mutex_lock(&services_list_mutex);
-	async_answer_1(icall_handle, EOK, list_count(&namespaces_list));
+	async_answer_1(icall, EOK, list_count(&namespaces_list));
 	fibril_mutex_unlock(&services_list_mutex);
 }
 
-static void loc_get_service_count(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void loc_get_service_count(ipc_call_t *icall)
 {
 	fibril_mutex_lock(&services_list_mutex);
@@ -963,21 +961,21 @@
 	    loc_namespace_find_id(IPC_GET_ARG1(*icall));
 	if (namespace == NULL)
-		async_answer_0(icall_handle, EEXIST);
+		async_answer_0(icall, EEXIST);
 	else
-		async_answer_1(icall_handle, EOK, namespace->refcnt);
+		async_answer_1(icall, EOK, namespace->refcnt);
 
 	fibril_mutex_unlock(&services_list_mutex);
 }
 
-static void loc_get_categories(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void loc_get_categories(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -986,6 +984,6 @@
 	if (id_buf == NULL) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -996,6 +994,6 @@
 	if (rc != EOK) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -1003,23 +1001,23 @@
 	fibril_mutex_unlock(&cdir.mutex);
 
-	errno_t retval = async_data_read_finalize(chandle, id_buf, size);
+	errno_t retval = async_data_read_finalize(&call, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-static void loc_get_namespaces(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_1(icall, retval, act_size);
+}
+
+static void loc_get_namespaces(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if ((size % sizeof(loc_sdesc_t)) != 0) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -1030,6 +1028,6 @@
 	if (count != list_count(&namespaces_list)) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, EOVERFLOW);
-		async_answer_0(icall_handle, EOVERFLOW);
+		async_answer_0(&call, EOVERFLOW);
+		async_answer_0(icall, EOVERFLOW);
 		return;
 	}
@@ -1038,6 +1036,6 @@
 	if (desc == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1050,13 +1048,13 @@
 	}
 
-	errno_t retval = async_data_read_finalize(chandle, desc, size);
+	errno_t retval = async_data_read_finalize(&call, desc, size);
 
 	free(desc);
 	fibril_mutex_unlock(&services_list_mutex);
 
-	async_answer_0(icall_handle, retval);
-}
-
-static void loc_get_services(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, retval);
+}
+
+static void loc_get_services(ipc_call_t *icall)
 {
 	/*
@@ -1065,15 +1063,15 @@
 	 */
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if ((size % sizeof(loc_sdesc_t)) != 0) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -1085,6 +1083,6 @@
 	if (namespace == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -1093,6 +1091,6 @@
 	if (count != namespace->refcnt) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, EOVERFLOW);
-		async_answer_0(icall_handle, EOVERFLOW);
+		async_answer_0(&call, EOVERFLOW);
+		async_answer_0(icall, EOVERFLOW);
 		return;
 	}
@@ -1101,6 +1099,6 @@
 	if (desc == NULL) {
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -1115,22 +1113,22 @@
 	}
 
-	errno_t retval = async_data_read_finalize(chandle, desc, size);
+	errno_t retval = async_data_read_finalize(&call, desc, size);
 
 	free(desc);
 	fibril_mutex_unlock(&services_list_mutex);
 
-	async_answer_0(icall_handle, retval);
-}
-
-static void loc_category_get_svcs(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+	async_answer_0(icall, retval);
+}
+
+static void loc_category_get_svcs(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -1141,6 +1139,6 @@
 	if (cat == NULL) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -1149,6 +1147,6 @@
 	if (id_buf == NULL) {
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1160,6 +1158,6 @@
 		fibril_mutex_unlock(&cat->mutex);
 		fibril_mutex_unlock(&cdir.mutex);
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -1168,12 +1166,12 @@
 	fibril_mutex_unlock(&cdir.mutex);
 
-	errno_t retval = async_data_read_finalize(chandle, id_buf, size);
+	errno_t retval = async_data_read_finalize(&call, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-
-static void loc_null_create(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_1(icall, retval, act_size);
+}
+
+
+static void loc_null_create(ipc_call_t *icall)
 {
 	fibril_mutex_lock(&null_services_mutex);
@@ -1191,5 +1189,5 @@
 	if (!fnd) {
 		fibril_mutex_unlock(&null_services_mutex);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1201,5 +1199,5 @@
 	if (dev_name == NULL) {
 		fibril_mutex_unlock(&null_services_mutex);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1209,5 +1207,5 @@
 	if (service == NULL) {
 		fibril_mutex_unlock(&null_services_mutex);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1219,5 +1217,5 @@
 		fibril_mutex_lock(&services_list_mutex);
 		fibril_mutex_unlock(&null_services_mutex);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1246,12 +1244,12 @@
 	fibril_mutex_unlock(&null_services_mutex);
 
-	async_answer_1(icall_handle, EOK, (sysarg_t) i);
-}
-
-static void loc_null_destroy(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_1(icall, EOK, (sysarg_t) i);
+}
+
+static void loc_null_destroy(ipc_call_t *icall)
 {
 	sysarg_t i = IPC_GET_ARG1(*icall);
 	if (i >= NULL_SERVICES) {
-		async_answer_0(icall_handle, ELIMIT);
+		async_answer_0(icall, ELIMIT);
 		return;
 	}
@@ -1261,5 +1259,5 @@
 	if (null_services[i] == NULL) {
 		fibril_mutex_unlock(&null_services_mutex);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -1274,8 +1272,8 @@
 
 	fibril_mutex_unlock(&null_services_mutex);
-	async_answer_0(icall_handle, EOK);
-}
-
-static void loc_service_add_to_cat(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, EOK);
+}
+
+static void loc_service_add_to_cat(ipc_call_t *icall)
 {
 	category_t *cat;
@@ -1297,5 +1295,5 @@
 		fibril_mutex_unlock(&cdir.mutex);
 		fibril_mutex_unlock(&services_list_mutex);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -1314,5 +1312,5 @@
 	 */
 	loc_category_change_event();
-	async_answer_0(icall_handle, retval);
+	async_answer_0(icall, retval);
 }
 
@@ -1398,8 +1396,8 @@
  *
  */
-static void loc_connection_supplier(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void loc_connection_supplier(ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	loc_server_t *server = loc_server_register();
@@ -1409,5 +1407,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -1417,28 +1415,28 @@
 		case LOC_SERVER_UNREGISTER:
 			if (server == NULL)
-				async_answer_0(chandle, ENOENT);
+				async_answer_0(&call, ENOENT);
 			else
-				async_answer_0(chandle, EOK);
+				async_answer_0(&call, EOK);
 			break;
 		case LOC_SERVICE_ADD_TO_CAT:
 			/* Add service to category */
-			loc_service_add_to_cat(chandle, &call);
+			loc_service_add_to_cat(&call);
 			break;
 		case LOC_SERVICE_REGISTER:
 			/* Register one service */
-			loc_service_register(chandle, &call, server);
+			loc_service_register(&call, server);
 			break;
 		case LOC_SERVICE_UNREGISTER:
 			/* Remove one service */
-			loc_service_unregister(chandle, &call, server);
+			loc_service_unregister(&call, server);
 			break;
 		case LOC_SERVICE_GET_ID:
-			loc_service_get_id(chandle, &call);
+			loc_service_get_id(&call);
 			break;
 		case LOC_NAMESPACE_GET_ID:
-			loc_namespace_get_id(chandle, &call);
+			loc_namespace_get_id(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 		}
 	}
@@ -1456,12 +1454,12 @@
  *
  */
-static void loc_connection_consumer(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void loc_connection_consumer(ipc_call_t *icall, void *arg)
 {
 	/* Accept connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -1470,53 +1468,53 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case LOC_SERVICE_GET_ID:
-			loc_service_get_id(chandle, &call);
+			loc_service_get_id(&call);
 			break;
 		case LOC_SERVICE_GET_NAME:
-			loc_service_get_name(chandle, &call);
+			loc_service_get_name(&call);
 			break;
 		case LOC_SERVICE_GET_SERVER_NAME:
-			loc_service_get_server_name(chandle, &call);
+			loc_service_get_server_name(&call);
 			break;
 		case LOC_NAMESPACE_GET_ID:
-			loc_namespace_get_id(chandle, &call);
+			loc_namespace_get_id(&call);
 			break;
 		case LOC_CALLBACK_CREATE:
-			loc_callback_create(chandle, &call);
+			loc_callback_create(&call);
 			break;
 		case LOC_CATEGORY_GET_ID:
-			loc_category_get_id(chandle, &call);
+			loc_category_get_id(&call);
 			break;
 		case LOC_CATEGORY_GET_NAME:
-			loc_category_get_name(chandle, &call);
+			loc_category_get_name(&call);
 			break;
 		case LOC_CATEGORY_GET_SVCS:
-			loc_category_get_svcs(chandle, &call);
+			loc_category_get_svcs(&call);
 			break;
 		case LOC_ID_PROBE:
-			loc_id_probe(chandle, &call);
+			loc_id_probe(&call);
 			break;
 		case LOC_NULL_CREATE:
-			loc_null_create(chandle, &call);
+			loc_null_create(&call);
 			break;
 		case LOC_NULL_DESTROY:
-			loc_null_destroy(chandle, &call);
+			loc_null_destroy(&call);
 			break;
 		case LOC_GET_NAMESPACE_COUNT:
-			loc_get_namespace_count(chandle, &call);
+			loc_get_namespace_count(&call);
 			break;
 		case LOC_GET_SERVICE_COUNT:
-			loc_get_service_count(chandle, &call);
+			loc_get_service_count(&call);
 			break;
 		case LOC_GET_CATEGORIES:
-			loc_get_categories(chandle, &call);
+			loc_get_categories(&call);
 			break;
 		case LOC_GET_NAMESPACES:
-			loc_get_namespaces(chandle, &call);
+			loc_get_namespaces(&call);
 			break;
 		case LOC_GET_SERVICES:
-			loc_get_services(chandle, &call);
+			loc_get_services(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOENT);
+			async_answer_0(&call, ENOENT);
 		}
 	}
Index: uspace/srv/logger/ctl.c
===================================================================
--- uspace/srv/logger/ctl.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/logger/ctl.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -63,15 +63,15 @@
 }
 
-void logger_connection_handler_control(cap_call_handle_t chandle)
+void logger_connection_handler_control(ipc_call_t *icall)
 {
 	errno_t rc;
 	int fd;
 
-	async_answer_0(chandle, EOK);
+	async_answer_0(icall, EOK);
 	logger_log("control: new client.\n");
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -81,9 +81,9 @@
 		case LOGGER_CONTROL_SET_DEFAULT_LEVEL:
 			rc = set_default_logging_level(IPC_GET_ARG1(call));
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			break;
 		case LOGGER_CONTROL_SET_LOG_LEVEL:
 			rc = handle_log_level_change(IPC_GET_ARG1(call));
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			break;
 		case LOGGER_CONTROL_SET_ROOT:
@@ -93,8 +93,8 @@
 				vfs_put(fd);
 			}
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
Index: uspace/srv/logger/logger.h
===================================================================
--- uspace/srv/logger/logger.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/logger/logger.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -98,6 +98,6 @@
 
 
-void logger_connection_handler_control(cap_call_handle_t);
-void logger_connection_handler_writer(cap_call_handle_t);
+void logger_connection_handler_control(ipc_call_t *);
+void logger_connection_handler_writer(ipc_call_t *);
 
 void parse_initial_settings(void);
Index: uspace/srv/logger/main.c
===================================================================
--- uspace/srv/logger/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/logger/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -48,14 +48,12 @@
 #include "logger.h"
 
-static void connection_handler_control(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void connection_handler_control(ipc_call_t *icall, void *arg)
 {
-	logger_connection_handler_control(icall_handle);
+	logger_connection_handler_control(icall);
 }
 
-static void connection_handler_writer(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+static void connection_handler_writer(ipc_call_t *icall, void *arg)
 {
-	logger_connection_handler_writer(icall_handle);
+	logger_connection_handler_writer(icall);
 }
 
Index: uspace/srv/logger/writer.c
===================================================================
--- uspace/srv/logger/writer.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/logger/writer.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -94,5 +94,5 @@
 }
 
-void logger_connection_handler_writer(cap_call_handle_t chandle)
+void logger_connection_handler_writer(ipc_call_t *icall)
 {
 	logger_log_t *log;
@@ -100,5 +100,5 @@
 
 	/* Acknowledge the connection. */
-	async_answer_0(chandle, EOK);
+	async_answer_0(icall, EOK);
 
 	logger_log("writer: new client.\n");
@@ -109,5 +109,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -118,22 +118,22 @@
 			log = handle_create_log(IPC_GET_ARG1(call));
 			if (log == NULL) {
-				async_answer_0(chandle, ENOMEM);
+				async_answer_0(&call, ENOMEM);
 				break;
 			}
 			if (!register_log(&registered_logs, log)) {
 				log_unlock(log);
-				async_answer_0(chandle, ELIMIT);
+				async_answer_0(&call, ELIMIT);
 				break;
 			}
 			log_unlock(log);
-			async_answer_1(chandle, EOK, (sysarg_t) log);
+			async_answer_1(&call, EOK, (sysarg_t) log);
 			break;
 		case LOGGER_WRITER_MESSAGE:
 			rc = handle_receive_message(IPC_GET_ARG1(call),
 			    IPC_GET_ARG2(call));
-			async_answer_0(chandle, rc);
+			async_answer_0(&call, rc);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 			break;
 		}
@@ -144,5 +144,4 @@
 }
 
-
 /**
  * @}
Index: uspace/srv/net/dhcp/main.c
===================================================================
--- uspace/srv/net/dhcp/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/dhcp/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -50,5 +50,5 @@
 #define NAME  "dhcp"
 
-static void dhcp_client_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void dhcp_client_conn(ipc_call_t *, void *);
 
 static errno_t dhcp_init(void)
@@ -84,5 +84,5 @@
 }
 
-static void dhcp_link_add_srv(cap_call_handle_t chandle, ipc_call_t *call)
+static void dhcp_link_add_srv(ipc_call_t *call)
 {
 	sysarg_t link_id;
@@ -94,8 +94,8 @@
 
 	rc = dhcpsrv_link_add(link_id);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
-static void dhcp_link_remove_srv(cap_call_handle_t chandle, ipc_call_t *call)
+static void dhcp_link_remove_srv(ipc_call_t *call)
 {
 	sysarg_t link_id;
@@ -107,8 +107,8 @@
 
 	rc = dhcpsrv_link_remove(link_id);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
-static void dhcp_discover_srv(cap_call_handle_t chandle, ipc_call_t *call)
+static void dhcp_discover_srv(ipc_call_t *call)
 {
 	sysarg_t link_id;
@@ -120,22 +120,22 @@
 
 	rc = dhcpsrv_discover(link_id);
-	async_answer_0(chandle, rc);
+	async_answer_0(call, rc);
 }
 
-static void dhcp_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void dhcp_client_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "dhcp_client_conn()");
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -143,14 +143,14 @@
 		switch (method) {
 		case DHCP_LINK_ADD:
-			dhcp_link_add_srv(chandle, &call);
+			dhcp_link_add_srv(&call);
 			break;
 		case DHCP_LINK_REMOVE:
-			dhcp_link_remove_srv(chandle, &call);
+			dhcp_link_remove_srv(&call);
 			break;
 		case DHCP_DISCOVER:
-			dhcp_discover_srv(chandle, &call);
+			dhcp_discover_srv(&call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/net/dnsrsrv/dnsrsrv.c
===================================================================
--- uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -53,5 +53,5 @@
 #define NAME  "dnsres"
 
-static void dnsr_client_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void dnsr_client_conn(ipc_call_t *, void *);
 
 static errno_t dnsr_init(void)
@@ -86,6 +86,5 @@
 }
 
-static void dnsr_name2host_srv(dnsr_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void dnsr_name2host_srv(dnsr_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srvaddr_srv()");
@@ -97,5 +96,5 @@
 	    DNS_NAME_MAX_SIZE, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -104,32 +103,32 @@
 	rc = dns_name2host(name, &hinfo, ver);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &hinfo->addr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &hinfo->addr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -137,34 +136,33 @@
 	size_t act_size = str_size(hinfo->cname);
 	if (act_size > size) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, hinfo->cname, act_size);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, hinfo->cname, act_size);
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
-
-	async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+
+	async_answer_0(icall, rc);
 
 	dns_hostinfo_destroy(hinfo);
 }
 
-static void dnsr_get_srvaddr_srv(dnsr_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void dnsr_get_srvaddr_srv(dnsr_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srvaddr_srv()");
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -172,27 +170,26 @@
 	// FIXME locking
 
-	errno_t rc = async_data_read_finalize(chandle, &dns_server_addr, size);
+	errno_t rc = async_data_read_finalize(&call, &dns_server_addr, size);
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
-
-	async_answer_0(icall_handle, rc);
-}
-
-static void dnsr_set_srvaddr_srv(dnsr_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+		async_answer_0(&call, rc);
+
+	async_answer_0(icall, rc);
+}
+
+static void dnsr_set_srvaddr_srv(dnsr_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "dnsr_set_srvaddr_srv()");
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -200,14 +197,14 @@
 	// FIXME locking
 
-	errno_t rc = async_data_write_finalize(chandle, &dns_server_addr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-	}
-
-	async_answer_0(icall_handle, rc);
-}
-
-static void dnsr_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	errno_t rc = async_data_write_finalize(&call, &dns_server_addr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+	}
+
+	async_answer_0(icall, rc);
+}
+
+static void dnsr_client_conn(ipc_call_t *icall, void *arg)
 {
 	dnsr_client_t client;
@@ -216,14 +213,14 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -231,14 +228,14 @@
 		switch (method) {
 		case DNSR_NAME2HOST:
-			dnsr_name2host_srv(&client, chandle, &call);
+			dnsr_name2host_srv(&client, &call);
 			break;
 		case DNSR_GET_SRVADDR:
-			dnsr_get_srvaddr_srv(&client, chandle, &call);
+			dnsr_get_srvaddr_srv(&client, &call);
 			break;
 		case DNSR_SET_SRVADDR:
-			dnsr_set_srvaddr_srv(&client, chandle, &call);
+			dnsr_set_srvaddr_srv(&client, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/net/ethip/ethip.c
===================================================================
--- uspace/srv/net/ethip/ethip.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/ethip/ethip.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -63,5 +63,5 @@
 static errno_t ethip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr);
 
-static void ethip_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void ethip_client_conn(ipc_call_t *icall, void *arg);
 
 static iplink_ops_t ethip_iplink_ops = {
@@ -142,5 +142,5 @@
 }
 
-static void ethip_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void ethip_client_conn(ipc_call_t *icall, void *arg)
 {
 	ethip_nic_t *nic;
@@ -155,5 +155,5 @@
 	}
 
-	iplink_conn(icall_handle, icall, &nic->iplink);
+	iplink_conn(icall, &nic->iplink);
 }
 
Index: uspace/srv/net/ethip/ethip_nic.c
===================================================================
--- uspace/srv/net/ethip/ethip_nic.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/ethip/ethip_nic.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -52,5 +52,5 @@
 
 static errno_t ethip_nic_open(service_id_t sid);
-static void ethip_nic_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void ethip_nic_cb_conn(ipc_call_t *icall, void *arg);
 
 static LIST_INITIALIZE(ethip_nic_list);
@@ -229,6 +229,5 @@
 }
 
-static void ethip_nic_addr_changed(ethip_nic_t *nic, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void ethip_nic_addr_changed(ethip_nic_t *nic, ipc_call_t *call)
 {
 	uint8_t *addr;
@@ -236,5 +235,5 @@
 	errno_t rc;
 
-	rc = async_data_write_accept((void **)&addr, false, 0, 0, 0, &size);
+	rc = async_data_write_accept((void **) &addr, false, 0, 0, 0, &size);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "data_write_accept() failed");
@@ -255,9 +254,8 @@
 
 	free(addr);
-	async_answer_0(chandle, EOK);
-}
-
-static void ethip_nic_received(ethip_nic_t *nic, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, EOK);
+}
+
+static void ethip_nic_received(ethip_nic_t *nic, ipc_call_t *call)
 {
 	errno_t rc;
@@ -282,15 +280,14 @@
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_nic_received() done, rc=%s", str_error_name(rc));
-	async_answer_0(chandle, rc);
-}
-
-static void ethip_nic_device_state(ethip_nic_t *nic, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(call, rc);
+}
+
+static void ethip_nic_device_state(ethip_nic_t *nic, ipc_call_t *call)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_nic_device_state()");
-	async_answer_0(chandle, ENOTSUP);
-}
-
-static void ethip_nic_cb_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(call, ENOTSUP);
+}
+
+static void ethip_nic_cb_conn(ipc_call_t *icall, void *arg)
 {
 	ethip_nic_t *nic = (ethip_nic_t *)arg;
@@ -300,5 +297,5 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call)) {
@@ -309,15 +306,15 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case NIC_EV_ADDR_CHANGED:
-			ethip_nic_addr_changed(nic, chandle, &call);
+			ethip_nic_addr_changed(nic, &call);
 			break;
 		case NIC_EV_RECEIVED:
-			ethip_nic_received(nic, chandle, &call);
+			ethip_nic_received(nic, &call);
 			break;
 		case NIC_EV_DEVICE_STATE:
-			ethip_nic_device_state(nic, chandle, &call);
+			ethip_nic_device_state(nic, &call);
 			break;
 		default:
 			log_msg(LOG_DEFAULT, LVL_DEBUG, "unknown IPC method: %" PRIun, IPC_GET_IMETHOD(call));
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/srv/net/inetsrv/inetcfg.c
===================================================================
--- uspace/srv/net/inetsrv/inetcfg.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/inetsrv/inetcfg.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -253,6 +253,5 @@
 }
 
-static void inetcfg_addr_create_static_srv(cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void inetcfg_addr_create_static_srv(ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_addr_create_static_srv()");
@@ -260,23 +259,23 @@
 	sysarg_t link_id = IPC_GET_ARG1(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(inet_naddr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_naddr_t naddr;
-	errno_t rc = async_data_write_finalize(chandle, &naddr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+	errno_t rc = async_data_write_finalize(&call, &naddr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -286,5 +285,5 @@
 	    0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -293,8 +292,8 @@
 	rc = inetcfg_addr_create_static(name, &naddr, link_id, &addr_id);
 	free(name);
-	async_answer_1(icall_handle, rc, addr_id);
-}
-
-static void inetcfg_addr_delete_srv(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_1(icall, rc, addr_id);
+}
+
+static void inetcfg_addr_delete_srv(ipc_call_t *call)
 {
 	sysarg_t addr_id;
@@ -306,8 +305,8 @@
 
 	rc = inetcfg_addr_delete(addr_id);
-	async_answer_0(chandle, rc);
-}
-
-static void inetcfg_addr_get_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(call, rc);
+}
+
+static void inetcfg_addr_get_srv(ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_addr_get_srv()");
@@ -323,49 +322,49 @@
 	errno_t rc = inetcfg_addr_get(addr_id, &ainfo);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_naddr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &ainfo.naddr, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, ainfo.name,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &ainfo.naddr, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, ainfo.name,
 	    min(size, str_size(ainfo.name)));
 	free(ainfo.name);
 
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_1(icall_handle, rc, ainfo.ilink);
-}
-
-static void inetcfg_addr_get_id_srv(cap_call_handle_t chandle, ipc_call_t *call)
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_1(icall, rc, ainfo.ilink);
+}
+
+static void inetcfg_addr_get_id_srv(ipc_call_t *call)
 {
 	char *name;
@@ -381,5 +380,5 @@
 	    0, NULL);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -388,10 +387,10 @@
 	rc = inetcfg_addr_get_id(name, link_id, &addr_id);
 	free(name);
-	async_answer_1(chandle, rc, addr_id);
-}
-
-static void inetcfg_get_addr_list_srv(cap_call_handle_t chandle, ipc_call_t *call)
-{
-	cap_call_handle_t rcall_handle;
+	async_answer_1(call, rc, addr_id);
+}
+
+static void inetcfg_get_addr_list_srv(ipc_call_t *call)
+{
+	ipc_call_t rcall;
 	size_t count;
 	size_t max_size;
@@ -403,7 +402,7 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_get_addr_list_srv()");
 
-	if (!async_data_read_receive(&rcall_handle, &max_size)) {
-		async_answer_0(rcall_handle, EREFUSED);
-		async_answer_0(chandle, EREFUSED);
+	if (!async_data_read_receive(&rcall, &max_size)) {
+		async_answer_0(&rcall, EREFUSED);
+		async_answer_0(call, EREFUSED);
 		return;
 	}
@@ -411,6 +410,6 @@
 	rc = inetcfg_get_addr_list(&id_buf, &count);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&rcall, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -419,13 +418,13 @@
 	size = min(act_size, max_size);
 
-	errno_t retval = async_data_read_finalize(rcall_handle, id_buf, size);
+	errno_t retval = async_data_read_finalize(&rcall, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(chandle, retval, act_size);
-}
-
-static void inetcfg_get_link_list_srv(cap_call_handle_t chandle, ipc_call_t *call)
-{
-	cap_call_handle_t rcall_handle;
+	async_answer_1(call, retval, act_size);
+}
+
+static void inetcfg_get_link_list_srv(ipc_call_t *call)
+{
+	ipc_call_t rcall;
 	size_t count;
 	size_t max_size;
@@ -437,7 +436,7 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_get_addr_list_srv()");
 
-	if (!async_data_read_receive(&rcall_handle, &max_size)) {
-		async_answer_0(rcall_handle, EREFUSED);
-		async_answer_0(chandle, EREFUSED);
+	if (!async_data_read_receive(&rcall, &max_size)) {
+		async_answer_0(&rcall, EREFUSED);
+		async_answer_0(call, EREFUSED);
 		return;
 	}
@@ -445,6 +444,6 @@
 	rc = inetcfg_get_link_list(&id_buf, &count);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&rcall, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -453,13 +452,13 @@
 	size = min(act_size, max_size);
 
-	errno_t retval = async_data_read_finalize(rcall_handle, id_buf, size);
+	errno_t retval = async_data_read_finalize(&rcall, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(chandle, retval, act_size);
-}
-
-static void inetcfg_get_sroute_list_srv(cap_call_handle_t chandle, ipc_call_t *call)
-{
-	cap_call_handle_t rcall_handle;
+	async_answer_1(call, retval, act_size);
+}
+
+static void inetcfg_get_sroute_list_srv(ipc_call_t *call)
+{
+	ipc_call_t rcall;
 	size_t count;
 	size_t max_size;
@@ -471,7 +470,7 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_get_sroute_list_srv()");
 
-	if (!async_data_read_receive(&rcall_handle, &max_size)) {
-		async_answer_0(rcall_handle, EREFUSED);
-		async_answer_0(chandle, EREFUSED);
+	if (!async_data_read_receive(&rcall, &max_size)) {
+		async_answer_0(&rcall, EREFUSED);
+		async_answer_0(call, EREFUSED);
 		return;
 	}
@@ -479,6 +478,6 @@
 	rc = inetcfg_get_sroute_list(&id_buf, &count);
 	if (rc != EOK) {
-		async_answer_0(rcall_handle, rc);
-		async_answer_0(chandle, rc);
+		async_answer_0(&rcall, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -487,11 +486,11 @@
 	size = min(act_size, max_size);
 
-	errno_t retval = async_data_read_finalize(rcall_handle, id_buf, size);
+	errno_t retval = async_data_read_finalize(&rcall, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(chandle, retval, act_size);
-}
-
-static void inetcfg_link_add_srv(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_1(call, retval, act_size);
+}
+
+static void inetcfg_link_add_srv(ipc_call_t *call)
 {
 	sysarg_t link_id;
@@ -503,11 +502,11 @@
 
 	rc = inetcfg_link_add(link_id);
-	async_answer_0(chandle, rc);
-}
-
-static void inetcfg_link_get_srv(cap_call_handle_t chandle, ipc_call_t *call)
-{
-	cap_call_handle_t name_chandle;
-	cap_call_handle_t laddr_chandle;
+	async_answer_0(call, rc);
+}
+
+static void inetcfg_link_get_srv(ipc_call_t *call)
+{
+	ipc_call_t name;
+	ipc_call_t laddr;
 	size_t name_max_size;
 	size_t laddr_max_size;
@@ -522,13 +521,14 @@
 	linfo.name = NULL;
 
-	if (!async_data_read_receive(&name_chandle, &name_max_size)) {
-		async_answer_0(name_chandle, EREFUSED);
-		async_answer_0(chandle, EREFUSED);
-		return;
-	}
-
-	if (!async_data_read_receive(&laddr_chandle, &laddr_max_size)) {
-		async_answer_0(name_chandle, EREFUSED);
-		async_answer_0(chandle, EREFUSED);
+	if (!async_data_read_receive(&name, &name_max_size)) {
+		async_answer_0(&name, EREFUSED);
+		async_answer_0(call, EREFUSED);
+		return;
+	}
+
+	if (!async_data_read_receive(&laddr, &laddr_max_size)) {
+		async_answer_0(&laddr, EREFUSED);
+		async_answer_0(&name, EREFUSED);
+		async_answer_0(call, EREFUSED);
 		return;
 	}
@@ -536,28 +536,28 @@
 	rc = inetcfg_link_get(link_id, &linfo);
 	if (rc != EOK) {
-		async_answer_0(laddr_chandle, rc);
-		async_answer_0(name_chandle, rc);
-		async_answer_0(chandle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(name_chandle, linfo.name,
+		async_answer_0(&laddr, rc);
+		async_answer_0(&name, rc);
+		async_answer_0(call, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&name, linfo.name,
 	    min(name_max_size, str_size(linfo.name)));
 	if (retval != EOK) {
 		free(linfo.name);
-		async_answer_0(laddr_chandle, retval);
-		async_answer_0(chandle, retval);
-		return;
-	}
-
-	retval = async_data_read_finalize(laddr_chandle, &linfo.mac_addr,
+		async_answer_0(&laddr, retval);
+		async_answer_0(call, retval);
+		return;
+	}
+
+	retval = async_data_read_finalize(&laddr, &linfo.mac_addr,
 	    min(laddr_max_size, sizeof(linfo.mac_addr)));
 
 	free(linfo.name);
 
-	async_answer_1(chandle, retval, linfo.def_mtu);
-}
-
-static void inetcfg_link_remove_srv(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_1(call, retval, linfo.def_mtu);
+}
+
+static void inetcfg_link_remove_srv(ipc_call_t *call)
 {
 	sysarg_t link_id;
@@ -569,51 +569,50 @@
 
 	rc = inetcfg_link_remove(link_id);
-	async_answer_0(chandle, rc);
-}
-
-static void inetcfg_sroute_create_srv(cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+	async_answer_0(call, rc);
+}
+
+static void inetcfg_sroute_create_srv(ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_sroute_create_srv()");
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(inet_naddr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_naddr_t dest;
-	errno_t rc = async_data_write_finalize(chandle, &dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+	errno_t rc = async_data_write_finalize(&call, &dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_addr_t router;
-	rc = async_data_write_finalize(chandle, &router, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+	rc = async_data_write_finalize(&call, &router, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -623,5 +622,5 @@
 	    0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -630,8 +629,8 @@
 	rc = inetcfg_sroute_create(name, &dest, &router, &sroute_id);
 	free(name);
-	async_answer_1(icall_handle, rc, sroute_id);
-}
-
-static void inetcfg_sroute_delete_srv(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_1(icall, rc, sroute_id);
+}
+
+static void inetcfg_sroute_delete_srv(ipc_call_t *call)
 {
 	sysarg_t sroute_id;
@@ -643,8 +642,8 @@
 
 	rc = inetcfg_sroute_delete(sroute_id);
-	async_answer_0(chandle, rc);
-}
-
-static void inetcfg_sroute_get_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(call, rc);
+}
+
+static void inetcfg_sroute_get_srv(ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_sroute_get_srv()");
@@ -660,62 +659,62 @@
 	errno_t rc = inetcfg_sroute_get(sroute_id, &srinfo);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	cap_call_handle_t chandle;
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_naddr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &srinfo.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &srinfo.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &srinfo.router, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, srinfo.name,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &srinfo.router, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, srinfo.name,
 	    min(size, str_size(srinfo.name)));
 	free(srinfo.name);
 
-	async_answer_0(icall_handle, rc);
-}
-
-static void inetcfg_sroute_get_id_srv(cap_call_handle_t chandle, ipc_call_t *call)
+	async_answer_0(icall, rc);
+}
+
+static void inetcfg_sroute_get_id_srv(ipc_call_t *call)
 {
 	char *name;
@@ -728,5 +727,5 @@
 	    0, NULL);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -735,17 +734,17 @@
 	rc = inetcfg_sroute_get_id(name, &sroute_id);
 	free(name);
-	async_answer_1(chandle, rc, sroute_id);
-}
-
-void inet_cfg_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_1(call, rc, sroute_id);
+}
+
+void inet_cfg_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_cfg_conn()");
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
@@ -753,5 +752,5 @@
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -759,47 +758,47 @@
 		switch (method) {
 		case INETCFG_ADDR_CREATE_STATIC:
-			inetcfg_addr_create_static_srv(chandle, &call);
+			inetcfg_addr_create_static_srv(&call);
 			break;
 		case INETCFG_ADDR_DELETE:
-			inetcfg_addr_delete_srv(chandle, &call);
+			inetcfg_addr_delete_srv(&call);
 			break;
 		case INETCFG_ADDR_GET:
-			inetcfg_addr_get_srv(chandle, &call);
+			inetcfg_addr_get_srv(&call);
 			break;
 		case INETCFG_ADDR_GET_ID:
-			inetcfg_addr_get_id_srv(chandle, &call);
+			inetcfg_addr_get_id_srv(&call);
 			break;
 		case INETCFG_GET_ADDR_LIST:
-			inetcfg_get_addr_list_srv(chandle, &call);
+			inetcfg_get_addr_list_srv(&call);
 			break;
 		case INETCFG_GET_LINK_LIST:
-			inetcfg_get_link_list_srv(chandle, &call);
+			inetcfg_get_link_list_srv(&call);
 			break;
 		case INETCFG_GET_SROUTE_LIST:
-			inetcfg_get_sroute_list_srv(chandle, &call);
+			inetcfg_get_sroute_list_srv(&call);
 			break;
 		case INETCFG_LINK_ADD:
-			inetcfg_link_add_srv(chandle, &call);
+			inetcfg_link_add_srv(&call);
 			break;
 		case INETCFG_LINK_GET:
-			inetcfg_link_get_srv(chandle, &call);
+			inetcfg_link_get_srv(&call);
 			break;
 		case INETCFG_LINK_REMOVE:
-			inetcfg_link_remove_srv(chandle, &call);
+			inetcfg_link_remove_srv(&call);
 			break;
 		case INETCFG_SROUTE_CREATE:
-			inetcfg_sroute_create_srv(chandle, &call);
+			inetcfg_sroute_create_srv(&call);
 			break;
 		case INETCFG_SROUTE_DELETE:
-			inetcfg_sroute_delete_srv(chandle, &call);
+			inetcfg_sroute_delete_srv(&call);
 			break;
 		case INETCFG_SROUTE_GET:
-			inetcfg_sroute_get_srv(chandle, &call);
+			inetcfg_sroute_get_srv(&call);
 			break;
 		case INETCFG_SROUTE_GET_ID:
-			inetcfg_sroute_get_id_srv(chandle, &call);
+			inetcfg_sroute_get_id_srv(&call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/net/inetsrv/inetcfg.h
===================================================================
--- uspace/srv/net/inetsrv/inetcfg.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/inetsrv/inetcfg.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -38,5 +38,5 @@
 #define INETCFG_H_
 
-extern void inet_cfg_conn(cap_call_handle_t, ipc_call_t *, void *);
+extern void inet_cfg_conn(ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/net/inetsrv/inetping.c
===================================================================
--- uspace/srv/net/inetsrv/inetping.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/inetsrv/inetping.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -136,6 +136,5 @@
 }
 
-static void inetping_send_srv(inetping_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void inetping_send_srv(inetping_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetping_send_srv()");
@@ -146,41 +145,41 @@
 	sdu.seq_no = IPC_GET_ARG1(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(sdu.src)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &sdu.src, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &sdu.src, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(sdu.dest)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &sdu.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &sdu.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -189,5 +188,5 @@
 	    &sdu.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -196,13 +195,12 @@
 	free(sdu.data);
 
-	async_answer_0(icall_handle, rc);
-}
-
-static void inetping_get_srcaddr_srv(inetping_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_0(icall, rc);
+}
+
+static void inetping_get_srcaddr_srv(inetping_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetping_get_srcaddr_srv()");
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
 
@@ -210,20 +208,20 @@
 	inet_addr_t remote;
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(remote)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(chandle, &remote, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&call, &remote, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -231,25 +229,25 @@
 	rc = inetping_get_srcaddr(client, &remote, &local);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(local)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &local, size);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &local, size);
 	if (rc != EOK)
-		async_answer_0(chandle, rc);
-
-	async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+
+	async_answer_0(icall, rc);
 }
 
@@ -281,10 +279,10 @@
 }
 
-void inetping_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+void inetping_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inetping_conn()");
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	inetping_client_t client;
@@ -295,10 +293,10 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -306,11 +304,11 @@
 		switch (method) {
 		case INETPING_SEND:
-			inetping_send_srv(&client, chandle, &call);
+			inetping_send_srv(&client, &call);
 			break;
 		case INETPING_GET_SRCADDR:
-			inetping_get_srcaddr_srv(&client, chandle, &call);
+			inetping_get_srcaddr_srv(&client, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/net/inetsrv/inetping.h
===================================================================
--- uspace/srv/net/inetsrv/inetping.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/inetsrv/inetping.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -41,5 +41,5 @@
 #include "inetsrv.h"
 
-extern void inetping_conn(cap_call_handle_t, ipc_call_t *, void *);
+extern void inetping_conn(ipc_call_t *, void *);
 extern errno_t inetping_recv(uint16_t, inetping_sdu_t *);
 
Index: uspace/srv/net/inetsrv/inetsrv.c
===================================================================
--- uspace/srv/net/inetsrv/inetsrv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/inetsrv/inetsrv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -82,5 +82,5 @@
 static LIST_INITIALIZE(client_list);
 
-static void inet_default_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void inet_default_conn(ipc_call_t *, void *);
 
 static errno_t inet_init(void)
@@ -120,6 +120,5 @@
 }
 
-static void inet_callback_create_srv(inet_client_t *client, cap_call_handle_t chandle,
-    ipc_call_t *call)
+static void inet_callback_create_srv(inet_client_t *client, ipc_call_t *call)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_callback_create_srv()");
@@ -127,10 +126,10 @@
 	async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
 	if (sess == NULL) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
 
 	client->sess = sess;
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 }
 
@@ -230,6 +229,5 @@
 }
 
-static void inet_get_srcaddr_srv(inet_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+static void inet_get_srcaddr_srv(inet_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srcaddr_srv()");
@@ -237,23 +235,23 @@
 	uint8_t tos = IPC_GET_ARG1(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
 
 	inet_addr_t remote;
-	errno_t rc = async_data_write_finalize(chandle, &remote, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+	errno_t rc = async_data_write_finalize(&call, &remote, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 	}
 
@@ -261,32 +259,31 @@
 	rc = inet_get_srcaddr(&remote, tos, &local);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &local, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, rc);
-}
-
-static void inet_send_srv(inet_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &local, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, rc);
+}
+
+static void inet_send_srv(inet_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_send_srv()");
@@ -300,40 +297,40 @@
 	int df = IPC_GET_ARG4(*icall);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	errno_t rc = async_data_write_finalize(chandle, &dgram.src, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-	}
-
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	errno_t rc = async_data_write_finalize(&call, &dgram.src, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+	}
+
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &dgram.dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &dgram.dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 	}
 
@@ -341,5 +338,5 @@
 	    &dgram.size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -348,9 +345,8 @@
 
 	free(dgram.data);
-	async_answer_0(icall_handle, rc);
-}
-
-static void inet_set_proto_srv(inet_client_t *client, cap_call_handle_t chandle,
-    ipc_call_t *call)
+	async_answer_0(icall, rc);
+}
+
+static void inet_set_proto_srv(inet_client_t *client, ipc_call_t *call)
 {
 	sysarg_t proto;
@@ -360,10 +356,10 @@
 
 	if (proto > UINT8_MAX) {
-		async_answer_0(chandle, EINVAL);
+		async_answer_0(call, EINVAL);
 		return;
 	}
 
 	client->protocol = proto;
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 }
 
@@ -387,5 +383,5 @@
 }
 
-static void inet_default_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void inet_default_conn(ipc_call_t *icall, void *arg)
 {
 	inet_client_t client;
@@ -394,5 +390,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	inet_client_init(&client);
@@ -400,10 +396,10 @@
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -411,17 +407,17 @@
 		switch (method) {
 		case INET_CALLBACK_CREATE:
-			inet_callback_create_srv(&client, chandle, &call);
+			inet_callback_create_srv(&client, &call);
 			break;
 		case INET_GET_SRCADDR:
-			inet_get_srcaddr_srv(&client, chandle, &call);
+			inet_get_srcaddr_srv(&client, &call);
 			break;
 		case INET_SEND:
-			inet_send_srv(&client, chandle, &call);
+			inet_send_srv(&client, &call);
 			break;
 		case INET_SET_PROTO:
-			inet_set_proto_srv(&client, chandle, &call);
+			inet_set_proto_srv(&client, &call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
Index: uspace/srv/net/loopip/loopip.c
===================================================================
--- uspace/srv/net/loopip/loopip.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/loopip/loopip.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -59,5 +59,5 @@
 static errno_t loopip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr);
 
-static void loopip_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void loopip_client_conn(ipc_call_t *icall, void *arg);
 
 static iplink_ops_t loopip_iplink_ops = {
@@ -148,8 +148,8 @@
 }
 
-static void loopip_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void loopip_client_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "loopip_client_conn()");
-	iplink_conn(icall_handle, icall, &loopip_iplink);
+	iplink_conn(icall, &loopip_iplink);
 }
 
Index: uspace/srv/net/nconfsrv/nconfsrv.c
===================================================================
--- uspace/srv/net/nconfsrv/nconfsrv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/nconfsrv/nconfsrv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -54,5 +54,5 @@
 #define NAME "nconfsrv"
 
-static void ncs_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+static void ncs_client_conn(ipc_call_t *icall, void *arg);
 
 static errno_t ncs_init(void)
@@ -98,7 +98,7 @@
 }
 
-static void ncs_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void ncs_client_conn(ipc_call_t *icall, void *arg)
 {
-	async_answer_0(icall_handle, ENOTSUP);
+	async_answer_0(icall, ENOTSUP);
 }
 
Index: uspace/srv/net/slip/slip.c
===================================================================
--- uspace/srv/net/slip/slip.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/slip/slip.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -199,8 +199,8 @@
 }
 
-static void slip_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void slip_client_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "slip_client_conn()");
-	iplink_conn(icall_handle, icall, &slip_iplink);
+	iplink_conn(icall, &slip_iplink);
 }
 
Index: uspace/srv/net/tcp/service.c
===================================================================
--- uspace/srv/net/tcp/service.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/tcp/service.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -727,10 +727,9 @@
  * Handle client request to create callback session.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_callback_create_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_callback_create_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_callback_create_srv()");
@@ -738,10 +737,10 @@
 	async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
 	if (sess == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
 	client->sess = sess;
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -750,12 +749,11 @@
  * Handle client request to create connection.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_create_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_create_srv(tcp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	inet_ep2_t epp;
@@ -765,20 +763,20 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_srv()");
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_ep2_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &epp, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &epp, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -786,9 +784,9 @@
 	rc = tcp_conn_create_impl(client, &epp, &conn_id);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, conn_id);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_1(icall, EOK, conn_id);
 }
 
@@ -797,10 +795,9 @@
  * Handle client request to destroy connection.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_destroy_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_destroy_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t conn_id;
@@ -811,5 +808,5 @@
 	conn_id = IPC_GET_ARG1(*icall);
 	rc = tcp_conn_destroy_impl(client, conn_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -818,12 +815,11 @@
  * Handle client request to create listener.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_listener_create_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_listener_create_srv(tcp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	inet_ep_t ep;
@@ -833,20 +829,20 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_listener_create_srv()");
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_ep_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &ep, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &ep, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -854,9 +850,9 @@
 	rc = tcp_listener_create_impl(client, &ep, &lst_id);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, lst_id);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_1(icall, EOK, lst_id);
 }
 
@@ -865,10 +861,9 @@
  * Handle client request to destroy listener.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_listener_destroy_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_listener_destroy_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t lst_id;
@@ -879,5 +874,5 @@
 	lst_id = IPC_GET_ARG1(*icall);
 	rc = tcp_listener_destroy_impl(client, lst_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -886,10 +881,9 @@
  * Handle client request to send FIN.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_send_fin_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_send_fin_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t conn_id;
@@ -900,5 +894,5 @@
 	conn_id = IPC_GET_ARG1(*icall);
 	rc = tcp_conn_send_fin_impl(client, conn_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -907,10 +901,9 @@
  * Handle client request to push connection.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_push_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_push_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t conn_id;
@@ -921,5 +914,5 @@
 	conn_id = IPC_GET_ARG1(*icall);
 	rc = tcp_conn_push_impl(client, conn_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -928,10 +921,9 @@
  * Handle client request to reset connection.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_reset_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_reset_srv(tcp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t conn_id;
@@ -942,5 +934,5 @@
 	conn_id = IPC_GET_ARG1(*icall);
 	rc = tcp_conn_reset_impl(client, conn_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -949,12 +941,11 @@
  * Handle client request to send data via connection.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_send_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_send_srv(tcp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	sysarg_t conn_id;
@@ -966,13 +957,13 @@
 	/* Receive message data */
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size > MAX_MSG_SIZE) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -980,13 +971,13 @@
 	data = malloc(size);
 	if (data == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, data, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, data, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
@@ -997,10 +988,10 @@
 	rc = tcp_conn_send_impl(client, conn_id, data, size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 	free(data);
 }
@@ -1010,12 +1001,11 @@
  * Handle client request to read received data via connection without blocking.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_recv_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_recv_srv(tcp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	sysarg_t conn_id;
 	size_t size, rsize;
@@ -1027,7 +1017,7 @@
 	conn_id = IPC_GET_ARG1(*icall);
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -1036,6 +1026,6 @@
 	data = malloc(size);
 	if (data == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1043,18 +1033,18 @@
 	rc = tcp_conn_recv_impl(client, conn_id, data, size, &rsize);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
 	}
 
-	rc = async_data_read_finalize(chandle, data, size);
-	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+	rc = async_data_read_finalize(&call, data, size);
+	if (rc != EOK) {
+		async_answer_0(icall, rc);
 		free(data);
 		return;
 	}
 
-	async_answer_1(icall_handle, EOK, rsize);
+	async_answer_1(icall, EOK, rsize);
 	free(data);
 
@@ -1066,12 +1056,11 @@
  * Handle client request to read received data via connection with blocking.
  *
- * @param client        TCP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void tcp_conn_recv_wait_srv(tcp_client_t *client,
-    cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client TCP client
+ * @param icall  Async request data
+ *
+ */
+static void tcp_conn_recv_wait_srv(tcp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	sysarg_t conn_id;
 	size_t size, rsize;
@@ -1083,8 +1072,8 @@
 	conn_id = IPC_GET_ARG1(*icall);
 
-	if (!async_data_read_receive(&chandle, &size)) {
+	if (!async_data_read_receive(&call, &size)) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_recv_wait_srv - data_receive failed");
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -1094,6 +1083,6 @@
 	if (data == NULL) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_recv_wait_srv - allocation failed");
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -1102,14 +1091,14 @@
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_recv_wait_srv - recv_impl failed rc=%s", str_error_name(rc));
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
 	}
 
-	rc = async_data_read_finalize(chandle, data, size);
+	rc = async_data_read_finalize(&call, data, size);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_recv_wait_srv - finalize failed");
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
@@ -1117,5 +1106,5 @@
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_recv_wait_srv(): rsize=%zu", size);
-	async_answer_1(icall_handle, EOK, rsize);
+	async_answer_1(icall, EOK, rsize);
 	free(data);
 
@@ -1171,15 +1160,14 @@
 /** Handle TCP client connection.
  *
- * @param icall_handle  Connect call handle
- * @param icall         Connect call data
- * @param arg           Connection argument
- */
-static void tcp_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+ * @param icall Connect call data
+ * @param arg   Connection argument
+ *
+ */
+static void tcp_client_conn(ipc_call_t *icall, void *arg)
 {
 	tcp_client_t client;
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_client_conn() - client=%p",
@@ -1191,5 +1179,5 @@
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_client_conn: wait req");
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
@@ -1198,5 +1186,5 @@
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -1204,38 +1192,38 @@
 		switch (method) {
 		case TCP_CALLBACK_CREATE:
-			tcp_callback_create_srv(&client, chandle, &call);
+			tcp_callback_create_srv(&client, &call);
 			break;
 		case TCP_CONN_CREATE:
-			tcp_conn_create_srv(&client, chandle, &call);
+			tcp_conn_create_srv(&client, &call);
 			break;
 		case TCP_CONN_DESTROY:
-			tcp_conn_destroy_srv(&client, chandle, &call);
+			tcp_conn_destroy_srv(&client, &call);
 			break;
 		case TCP_LISTENER_CREATE:
-			tcp_listener_create_srv(&client, chandle, &call);
+			tcp_listener_create_srv(&client, &call);
 			break;
 		case TCP_LISTENER_DESTROY:
-			tcp_listener_destroy_srv(&client, chandle, &call);
+			tcp_listener_destroy_srv(&client, &call);
 			break;
 		case TCP_CONN_SEND_FIN:
-			tcp_conn_send_fin_srv(&client, chandle, &call);
+			tcp_conn_send_fin_srv(&client, &call);
 			break;
 		case TCP_CONN_PUSH:
-			tcp_conn_push_srv(&client, chandle, &call);
+			tcp_conn_push_srv(&client, &call);
 			break;
 		case TCP_CONN_RESET:
-			tcp_conn_reset_srv(&client, chandle, &call);
+			tcp_conn_reset_srv(&client, &call);
 			break;
 		case TCP_CONN_SEND:
-			tcp_conn_send_srv(&client, chandle, &call);
+			tcp_conn_send_srv(&client, &call);
 			break;
 		case TCP_CONN_RECV:
-			tcp_conn_recv_srv(&client, chandle, &call);
+			tcp_conn_recv_srv(&client, &call);
 			break;
 		case TCP_CONN_RECV_WAIT:
-			tcp_conn_recv_wait_srv(&client, chandle, &call);
+			tcp_conn_recv_wait_srv(&client, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
Index: uspace/srv/net/udp/service.c
===================================================================
--- uspace/srv/net/udp/service.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/net/udp/service.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -326,11 +326,9 @@
  * Handle client request to create callback session.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_callback_create_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_callback_create_srv(udp_client_t *client, ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_callback_create_srv()");
@@ -338,10 +336,10 @@
 	async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
 	if (sess == NULL) {
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
 
 	client->sess = sess;
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
@@ -350,13 +348,11 @@
  * Handle client request to create association.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_assoc_create_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_assoc_create_srv(udp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	inet_ep2_t epp;
@@ -366,20 +362,20 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_create_srv()");
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_ep2_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &epp, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &epp, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -387,9 +383,9 @@
 	rc = udp_assoc_create_impl(client, &epp, &assoc_id);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_1(icall_handle, EOK, assoc_id);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_1(icall, EOK, assoc_id);
 }
 
@@ -398,11 +394,9 @@
  * Handle client request to destroy association.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_assoc_destroy_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_assoc_destroy_srv(udp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t assoc_id;
@@ -413,5 +407,5 @@
 	assoc_id = IPC_GET_ARG1(*icall);
 	rc = udp_assoc_destroy_impl(client, assoc_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -420,11 +414,9 @@
  * Handle client request to set no local address flag.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_assoc_set_nolocal_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_assoc_set_nolocal_srv(udp_client_t *client, ipc_call_t *icall)
 {
 	sysarg_t assoc_id;
@@ -435,5 +427,5 @@
 	assoc_id = IPC_GET_ARG1(*icall);
 	rc = udp_assoc_set_nolocal_impl(client, assoc_id);
-	async_answer_0(icall_handle, rc);
+	async_answer_0(icall, rc);
 }
 
@@ -442,13 +434,11 @@
  * Handle client request to send message.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_assoc_send_msg_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_assoc_send_msg_srv(udp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	inet_ep_t dest;
@@ -461,20 +451,20 @@
 	/* Receive dest */
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(inet_ep_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_write_finalize(chandle, &dest, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_write_finalize(&call, &dest, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -482,13 +472,13 @@
 	/* Receive message data */
 
-	if (!async_data_write_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_write_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size > MAX_MSG_SIZE) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
 		return;
 	}
@@ -496,12 +486,12 @@
 	data = malloc(size);
 	if (data == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
-	}
-
-	rc = async_data_write_finalize(chandle, data, size);
-	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
+	}
+
+	rc = async_data_write_finalize(&call, data, size);
+	if (rc != EOK) {
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
@@ -512,10 +502,10 @@
 	rc = udp_assoc_send_msg_impl(client, assoc_id, &dest, data, size);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		free(data);
 		return;
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 	free(data);
 }
@@ -541,13 +531,11 @@
  * Handle client request to get information on received message.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_rmsg_info_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_rmsg_info_srv(udp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	udp_crcv_queue_entry_t *enext;
@@ -558,20 +546,20 @@
 	enext = udp_rmsg_get_next(client);
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (enext == NULL) {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &enext->epp.remote,
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &enext->epp.remote,
 	    max(size, (size_t)sizeof(inet_ep_t)));
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -582,5 +570,5 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_rmsg_info_srv(): assoc_id=%zu, "
 	    "size=%zu", assoc_id, size);
-	async_answer_2(icall_handle, EOK, assoc_id, size);
+	async_answer_2(icall, EOK, assoc_id, size);
 }
 
@@ -589,13 +577,11 @@
  * Handle client request to read data from first received message.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_rmsg_read_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_rmsg_read_srv(udp_client_t *client, ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t msg_size;
 	udp_crcv_queue_entry_t *enext;
@@ -610,13 +596,13 @@
 	enext = udp_rmsg_get_next(client);
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (enext == NULL) {
-		async_answer_0(chandle, ENOENT);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(&call, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -626,16 +612,16 @@
 
 	if (off > msg_size) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, data, min(msg_size - off, size));
-	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, data, min(msg_size - off, size));
+	if (rc != EOK) {
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_rmsg_read_srv(): OK");
 }
@@ -646,11 +632,9 @@
  * to the next one.
  *
- * @param client        UDP client
- * @param icall_handle  Async request call handle
- * @param icall         Async request data
- */
-static void
-udp_rmsg_discard_srv(udp_client_t *client, cap_call_handle_t icall_handle,
-    ipc_call_t *icall)
+ * @param client UDP client
+ * @param icall  Async request data
+ *
+ */
+static void udp_rmsg_discard_srv(udp_client_t *client, ipc_call_t *icall)
 {
 	udp_crcv_queue_entry_t *enext;
@@ -661,5 +645,5 @@
 	if (enext == NULL) {
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "usg_rmsg_discard_srv: enext==NULL");
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -668,15 +652,14 @@
 	udp_msg_delete(enext->msg);
 	free(enext);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
 /** Handle UDP client connection.
  *
- * @param icall_handle  Connect call handle
- * @param icall         Connect call data
- * @param arg           Connection argument
- */
-static void udp_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall,
-    void *arg)
+ * @param icall Connect call data
+ * @param arg   Connection argument
+ *
+ */
+static void udp_client_conn(ipc_call_t *icall, void *arg)
 {
 	udp_client_t client;
@@ -684,5 +667,5 @@
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_client_conn()");
@@ -695,5 +678,5 @@
 		log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_client_conn: wait req");
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
@@ -702,5 +685,5 @@
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			break;
 		}
@@ -708,29 +691,29 @@
 		switch (method) {
 		case UDP_CALLBACK_CREATE:
-			udp_callback_create_srv(&client, chandle, &call);
+			udp_callback_create_srv(&client, &call);
 			break;
 		case UDP_ASSOC_CREATE:
-			udp_assoc_create_srv(&client, chandle, &call);
+			udp_assoc_create_srv(&client, &call);
 			break;
 		case UDP_ASSOC_DESTROY:
-			udp_assoc_destroy_srv(&client, chandle, &call);
+			udp_assoc_destroy_srv(&client, &call);
 			break;
 		case UDP_ASSOC_SET_NOLOCAL:
-			udp_assoc_set_nolocal_srv(&client, chandle, &call);
+			udp_assoc_set_nolocal_srv(&client, &call);
 			break;
 		case UDP_ASSOC_SEND_MSG:
-			udp_assoc_send_msg_srv(&client, chandle, &call);
+			udp_assoc_send_msg_srv(&client, &call);
 			break;
 		case UDP_RMSG_INFO:
-			udp_rmsg_info_srv(&client, chandle, &call);
+			udp_rmsg_info_srv(&client, &call);
 			break;
 		case UDP_RMSG_READ:
-			udp_rmsg_read_srv(&client, chandle, &call);
+			udp_rmsg_read_srv(&client, &call);
 			break;
 		case UDP_RMSG_DISCARD:
-			udp_rmsg_discard_srv(&client, chandle, &call);
+			udp_rmsg_discard_srv(&client, &call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
Index: uspace/srv/ns/clonable.c
===================================================================
--- uspace/srv/ns/clonable.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/clonable.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -48,6 +48,5 @@
 	service_t service;
 	iface_t iface;
-	cap_call_handle_t chandle;
-	sysarg_t arg3;
+	ipc_call_t call;
 } cs_req_t;
 
@@ -74,6 +73,5 @@
  *
  */
-void register_clonable(service_t service, sysarg_t phone, ipc_call_t *call,
-    cap_call_handle_t chandle)
+void register_clonable(service_t service, sysarg_t phone, ipc_call_t *call)
 {
 	link_t *req_link = list_first(&cs_req);
@@ -81,5 +79,5 @@
 		/* There was no pending connection request. */
 		printf("%s: Unexpected clonable server.\n", NAME);
-		async_answer_0(chandle, EBUSY);
+		async_answer_0(call, EBUSY);
 		return;
 	}
@@ -91,13 +89,13 @@
 	assert(csr->service == SERVICE_LOADER);
 
-	async_answer_0(chandle, EOK);
+	async_answer_0(call, EOK);
 
 	async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
 	if (sess == NULL)
-		async_answer_0(chandle, EIO);
+		async_answer_0(call, EIO);
 
 	async_exch_t *exch = async_exchange_begin(sess);
-	async_forward_fast(csr->chandle, exch, csr->iface, csr->arg3, 0,
-	    IPC_FF_NONE);
+	async_forward_fast(&csr->call, exch, csr->iface,
+	    IPC_GET_ARG3(csr->call), 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -108,14 +106,12 @@
 /** Connect client to clonable service.
  *
- * @param service  Service to be connected to.
- * @param iface    Interface to be connected to.
- * @param call     Pointer to call structure.
- * @param chandle  Call handle of the request.
+ * @param service Service to be connected to.
+ * @param iface   Interface to be connected to.
+ * @param call    Pointer to call structure.
  *
  * @return Zero on success or a value from @ref errno.h.
  *
  */
-void connect_to_clonable(service_t service, iface_t iface, ipc_call_t *call,
-    cap_call_handle_t chandle)
+void connect_to_clonable(service_t service, iface_t iface, ipc_call_t *call)
 {
 	assert(service == SERVICE_LOADER);
@@ -123,5 +119,5 @@
 	cs_req_t *csr = malloc(sizeof(cs_req_t));
 	if (csr == NULL) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -132,5 +128,5 @@
 	if (rc != EOK) {
 		free(csr);
-		async_answer_0(chandle, rc);
+		async_answer_0(call, rc);
 		return;
 	}
@@ -139,6 +135,5 @@
 	csr->service = service;
 	csr->iface = iface;
-	csr->chandle = chandle;
-	csr->arg3 = IPC_GET_ARG3(*call);
+	csr->call = *call;
 
 	/*
Index: uspace/srv/ns/clonable.h
===================================================================
--- uspace/srv/ns/clonable.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/clonable.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,7 +42,6 @@
 
 extern bool service_clonable(service_t);
-extern void register_clonable(service_t, sysarg_t, ipc_call_t *,
-    cap_call_handle_t);
-extern void connect_to_clonable(service_t, iface_t, ipc_call_t *, cap_call_handle_t);
+extern void register_clonable(service_t, sysarg_t, ipc_call_t *);
+extern void connect_to_clonable(service_t, iface_t, ipc_call_t *);
 
 #endif
Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/ns.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -49,8 +49,7 @@
 #include "task.h"
 
-static void ns_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void ns_connection(ipc_call_t *icall, void *arg)
 {
 	ipc_call_t call;
-	cap_call_handle_t chandle;
 	iface_t iface;
 	service_t service;
@@ -63,17 +62,17 @@
 		 */
 		if (service_clonable(service)) {
-			connect_to_clonable(service, iface, icall, icall_handle);
+			connect_to_clonable(service, iface, icall);
 		} else {
-			connect_to_service(service, iface, icall, icall_handle);
+			connect_to_service(service, iface, icall);
 		}
 		return;
 	}
 
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		process_pending_conn();
 
-		chandle = async_get_call(&call);
+		async_get_call(&call);
 		if (!IPC_GET_IMETHOD(call))
 			break;
@@ -94,5 +93,5 @@
 			 */
 			if (service_clonable(service)) {
-				register_clonable(service, phone, &call, chandle);
+				register_clonable(service, phone, &call);
 				continue;
 			} else {
@@ -107,5 +106,5 @@
 			id = (task_id_t)
 			    MERGE_LOUP32(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
-			wait_for_task(id, &call, chandle);
+			wait_for_task(id, &call);
 			continue;
 		case NS_ID_INTRO:
@@ -121,5 +120,5 @@
 		}
 
-		async_answer_0(chandle, retval);
+		async_answer_0(&call, retval);
 	}
 
Index: uspace/srv/ns/service.c
===================================================================
--- uspace/srv/ns/service.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/service.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -89,6 +89,5 @@
 	service_t service;         /**< Service ID */
 	iface_t iface;             /**< Interface ID */
-	cap_call_handle_t chandle; /**< Call handle waiting for the connection */
-	sysarg_t arg3;             /**< Third argument */
+	ipc_call_t call;           /**< Call waiting for the connection */
 } pending_conn_t;
 
@@ -119,6 +118,6 @@
 		hashed_service_t *hashed_service = hash_table_get_inst(link, hashed_service_t, link);
 		async_exch_t *exch = async_exchange_begin(hashed_service->sess);
-		async_forward_fast(pending->chandle, exch, pending->iface,
-		    pending->arg3, 0, IPC_FF_NONE);
+		async_forward_fast(&pending->call, exch, pending->iface,
+		    IPC_GET_ARG3(pending->call), 0, IPC_FF_NONE);
 		async_exchange_end(exch);
 
@@ -163,13 +162,10 @@
  * @param iface    Interface to be connected to.
  * @param call     Pointer to call structure.
- * @param chandle  Call handle of the request.
  *
  * @return Zero on success or a value from @ref errno.h.
  *
  */
-void connect_to_service(service_t service, iface_t iface, ipc_call_t *call,
-    cap_call_handle_t chandle)
-{
-	sysarg_t arg3 = IPC_GET_ARG3(*call);
+void connect_to_service(service_t service, iface_t iface, ipc_call_t *call)
+{
 	sysarg_t flags = IPC_GET_ARG4(*call);
 	errno_t retval;
@@ -189,6 +185,5 @@
 			pending->service = service;
 			pending->iface = iface;
-			pending->chandle = chandle;
-			pending->arg3 = arg3;
+			pending->call = *call;
 
 			list_append(&pending->link, &pending_conn);
@@ -202,10 +197,10 @@
 	hashed_service_t *hashed_service = hash_table_get_inst(link, hashed_service_t, link);
 	async_exch_t *exch = async_exchange_begin(hashed_service->sess);
-	async_forward_fast(chandle, exch, iface, arg3, 0, IPC_FF_NONE);
+	async_forward_fast(call, exch, iface, IPC_GET_ARG3(*call), 0, IPC_FF_NONE);
 	async_exchange_end(exch);
 	return;
 
 out:
-	async_answer_0(chandle, retval);
+	async_answer_0(call, retval);
 }
 
Index: uspace/srv/ns/service.h
===================================================================
--- uspace/srv/ns/service.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/service.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,5 +42,5 @@
 
 extern errno_t register_service(service_t, sysarg_t, ipc_call_t *);
-extern void connect_to_service(service_t, iface_t, ipc_call_t *, cap_call_handle_t);
+extern void connect_to_service(service_t, iface_t, ipc_call_t *);
 
 #endif
Index: uspace/srv/ns/task.c
===================================================================
--- uspace/srv/ns/task.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/task.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -145,6 +145,6 @@
 typedef struct {
 	link_t link;
-	task_id_t id;               ///< Task ID
-	cap_call_handle_t chandle;  ///< Call handle waiting for the connection
+	task_id_t id;     /**< Task ID */
+	ipc_call_t call;  /**< Call waiting for the connection */
 } pending_wait_t;
 
@@ -184,5 +184,5 @@
 		texit = ht->have_rval ? TASK_EXIT_NORMAL :
 		    TASK_EXIT_UNEXPECTED;
-		async_answer_2(pr->chandle, EOK, texit, ht->retval);
+		async_answer_2(&pr->call, EOK, texit, ht->retval);
 
 		list_remove(&pr->link);
@@ -192,5 +192,5 @@
 }
 
-void wait_for_task(task_id_t id, ipc_call_t *call, cap_call_handle_t chandle)
+void wait_for_task(task_id_t id, ipc_call_t *call)
 {
 	ht_link_t *link = hash_table_find(&task_hash_table, &id);
@@ -200,5 +200,5 @@
 	if (ht == NULL) {
 		/* No such task exists. */
-		async_answer_0(chandle, ENOENT);
+		async_answer_0(call, ENOENT);
 		return;
 	}
@@ -207,5 +207,5 @@
 		task_exit_t texit = ht->have_rval ? TASK_EXIT_NORMAL :
 		    TASK_EXIT_UNEXPECTED;
-		async_answer_2(chandle, EOK, texit, ht->retval);
+		async_answer_2(call, EOK, texit, ht->retval);
 		return;
 	}
@@ -215,5 +215,5 @@
 	    (pending_wait_t *) malloc(sizeof(pending_wait_t));
 	if (!pr) {
-		async_answer_0(chandle, ENOMEM);
+		async_answer_0(call, ENOMEM);
 		return;
 	}
@@ -221,5 +221,5 @@
 	link_initialize(&pr->link);
 	pr->id = id;
-	pr->chandle = chandle;
+	pr->call = *call;
 	list_append(&pr->link, &pending_wait);
 }
Index: uspace/srv/ns/task.h
===================================================================
--- uspace/srv/ns/task.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/ns/task.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -40,10 +40,9 @@
 extern void process_pending_wait(void);
 
-extern void wait_for_task(task_id_t, ipc_call_t *, cap_call_handle_t);
+extern void wait_for_task(task_id_t, ipc_call_t *);
 
 extern errno_t ns_task_id_intro(ipc_call_t *);
 extern errno_t ns_task_disconnect(ipc_call_t *);
 extern errno_t ns_task_retval(ipc_call_t *);
-
 
 #endif
Index: uspace/srv/taskmon/taskmon.c
===================================================================
--- uspace/srv/taskmon/taskmon.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/taskmon/taskmon.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -49,5 +49,5 @@
 static bool write_core_files;
 
-static void corecfg_client_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void corecfg_client_conn(ipc_call_t *, void *);
 
 static void fault_event(ipc_call_t *call, void *arg)
@@ -94,28 +94,28 @@
 }
 
-static void corecfg_get_enable_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void corecfg_get_enable_srv(ipc_call_t *icall)
 {
-	async_answer_1(icall_handle, EOK, write_core_files);
+	async_answer_1(icall, EOK, write_core_files);
 }
 
-static void corecfg_set_enable_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void corecfg_set_enable_srv(ipc_call_t *icall)
 {
 	write_core_files = IPC_GET_ARG1(*icall);
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 }
 
-static void corecfg_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void corecfg_client_conn(ipc_call_t *icall, void *arg)
 {
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -123,9 +123,11 @@
 		switch (method) {
 		case CORECFG_GET_ENABLE:
-			corecfg_get_enable_srv(chandle, &call);
+			corecfg_get_enable_srv(&call);
 			break;
 		case CORECFG_SET_ENABLE:
-			corecfg_set_enable_srv(chandle, &call);
+			corecfg_set_enable_srv(&call);
 			break;
+		default:
+			async_answer_0(&call, ENOTSUP);
 		}
 	}
Index: uspace/srv/test/chardev-test/main.c
===================================================================
--- uspace/srv/test/chardev-test/main.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/test/chardev-test/main.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -84,5 +84,5 @@
 };
 
-static void chardev_test_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void chardev_test_connection(ipc_call_t *icall, void *arg)
 {
 	chardev_srvs_t *svc;
@@ -97,9 +97,9 @@
 		svc = &partialx_srvs;
 	} else {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
 
-	chardev_conn(icall_handle, icall, svc);
+	chardev_conn(icall, svc);
 }
 
Index: uspace/srv/vfs/vfs.c
===================================================================
--- uspace/srv/vfs/vfs.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -55,11 +55,11 @@
 #define NAME  "vfs"
 
-static void vfs_pager(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+static void vfs_pager(ipc_call_t *icall, void *arg)
 {
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -68,8 +68,8 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case IPC_M_PAGE_IN:
-			vfs_page_in(chandle, &call);
+			vfs_page_in(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
@@ -88,6 +88,4 @@
 int main(int argc, char **argv)
 {
-	errno_t rc;
-
 	printf("%s: HelenOS VFS server\n", NAME);
 
@@ -122,5 +120,5 @@
 	 */
 	port_id_t port;
-	rc = async_create_port(INTERFACE_PAGER, vfs_pager, NULL, &port);
+	errno_t rc = async_create_port(INTERFACE_PAGER, vfs_pager, NULL, &port);
 	if (rc != EOK) {
 		printf("%s: Cannot create pager port: %s\n", NAME, str_error(rc));
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs.h	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -222,7 +222,7 @@
 extern errno_t vfs_op_write(int fd, aoff64_t, size_t *out_bytes);
 
-extern void vfs_register(cap_call_handle_t, ipc_call_t *);
-
-extern void vfs_page_in(cap_call_handle_t, ipc_call_t *);
+extern void vfs_register(ipc_call_t *);
+
+extern void vfs_page_in(ipc_call_t *);
 
 typedef struct {
@@ -233,5 +233,5 @@
 extern errno_t vfs_rdwr_internal(int, aoff64_t, bool, rdwr_io_chunk_t *);
 
-extern void vfs_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg);
+extern void vfs_connection(ipc_call_t *, void *);
 
 #endif
Index: uspace/srv/vfs/vfs_ipc.c
===================================================================
--- uspace/srv/vfs/vfs_ipc.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs_ipc.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -35,22 +35,20 @@
 #include <vfs/canonify.h>
 
-static void vfs_in_clone(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int oldfd = IPC_GET_ARG1(*request);
-	int newfd = IPC_GET_ARG2(*request);
-	bool desc = IPC_GET_ARG3(*request);
+static void vfs_in_clone(ipc_call_t *req)
+{
+	int oldfd = IPC_GET_ARG1(*req);
+	int newfd = IPC_GET_ARG2(*req);
+	bool desc = IPC_GET_ARG3(*req);
 
 	int outfd = -1;
 	errno_t rc = vfs_op_clone(oldfd, newfd, desc, &outfd);
-	async_answer_1(req_handle, rc, outfd);
-}
-
-static void vfs_in_fsprobe(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);
+	async_answer_1(req, rc, outfd);
+}
+
+static void vfs_in_fsprobe(ipc_call_t *req)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
 	char *fs_name = NULL;
-	cap_call_handle_t chandle;
 	vfs_fs_probe_info_t info;
-	size_t len;
 	errno_t rc;
 
@@ -62,20 +60,22 @@
 	    FS_NAME_MAXLEN, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
 
 	rc = vfs_op_fsprobe(fs_name, service_id, &info);
-	async_answer_0(req_handle, rc);
+	async_answer_0(req, rc);
 	if (rc != EOK)
 		goto out;
 
 	/* Now we should get a read request */
-	if (!async_data_read_receive(&chandle, &len))
+	ipc_call_t call;
+	size_t len;
+	if (!async_data_read_receive(&call, &len))
 		goto out;
 
 	if (len > sizeof(info))
 		len = sizeof(info);
-	(void) async_data_read_finalize(chandle, &info, len);
+	(void) async_data_read_finalize(&call, &info, len);
 
 out:
@@ -83,8 +83,6 @@
 }
 
-static void vfs_in_fstypes(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	cap_call_handle_t chandle;
-	size_t len;
+static void vfs_in_fstypes(ipc_call_t *req)
+{
 	vfs_fstypes_t fstypes;
 	errno_t rc;
@@ -92,18 +90,20 @@
 	rc = vfs_get_fstypes(&fstypes);
 	if (rc != EOK) {
-		async_answer_0(req_handle, ENOMEM);
+		async_answer_0(req, ENOMEM);
 		return;
 	}
 
 	/* Send size of the data */
-	async_answer_1(req_handle, EOK, fstypes.size);
+	async_answer_1(req, EOK, fstypes.size);
 
 	/* Now we should get a read request */
-	if (!async_data_read_receive(&chandle, &len))
+	ipc_call_t call;
+	size_t len;
+	if (!async_data_read_receive(&call, &len))
 		goto out;
 
 	if (len > fstypes.size)
 		len = fstypes.size;
-	(void) async_data_read_finalize(chandle, fstypes.buf, len);
+	(void) async_data_read_finalize(&call, fstypes.buf, len);
 
 out:
@@ -111,7 +111,7 @@
 }
 
-static void vfs_in_mount(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int mpfd = IPC_GET_ARG1(*request);
+static void vfs_in_mount(ipc_call_t *req)
+{
+	int mpfd = IPC_GET_ARG1(*req);
 
 	/*
@@ -120,8 +120,8 @@
 	 * in the request.
 	 */
-	service_id_t service_id = (service_id_t) IPC_GET_ARG2(*request);
-
-	unsigned int flags = (unsigned int) IPC_GET_ARG3(*request);
-	unsigned int instance = IPC_GET_ARG4(*request);
+	service_id_t service_id = (service_id_t) IPC_GET_ARG2(*req);
+
+	unsigned int flags = (unsigned int) IPC_GET_ARG3(*req);
+	unsigned int instance = IPC_GET_ARG4(*req);
 
 	char *opts = NULL;
@@ -132,5 +132,5 @@
 	    MAX_MNTOPTS_LEN, 0, NULL);
 	if (rc != EOK) {
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
@@ -144,5 +144,5 @@
 	if (rc != EOK) {
 		free(opts);
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
@@ -151,5 +151,5 @@
 	rc = vfs_op_mount(mpfd, service_id, flags, instance, opts, fs_name,
 	    &outfd);
-	async_answer_1(req_handle, rc, outfd);
+	async_answer_1(req, rc, outfd);
 
 	free(opts);
@@ -157,32 +157,32 @@
 }
 
-static void vfs_in_open(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
-	int mode = IPC_GET_ARG2(*request);
+static void vfs_in_open(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
+	int mode = IPC_GET_ARG2(*req);
 
 	errno_t rc = vfs_op_open(fd, mode);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_put(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_put(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
 	errno_t rc = vfs_op_put(fd);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_read(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
-	aoff64_t pos = MERGE_LOUP32(IPC_GET_ARG2(*request),
-	    IPC_GET_ARG3(*request));
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_read(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
+	aoff64_t pos = MERGE_LOUP32(IPC_GET_ARG2(*req),
+	    IPC_GET_ARG3(*req));
 
 	size_t bytes = 0;
 	errno_t rc = vfs_op_read(fd, pos, &bytes);
-	async_answer_1(req_handle, rc, bytes);
-}
-
-static void vfs_in_rename(cap_call_handle_t req_handle, ipc_call_t *request)
+	async_answer_1(req, rc, bytes);
+}
+
+static void vfs_in_rename(ipc_call_t *req)
 {
 	/* The common base directory. */
@@ -192,5 +192,5 @@
 	errno_t rc;
 
-	basefd = IPC_GET_ARG1(*request);
+	basefd = IPC_GET_ARG1(*req);
 
 	/* Retrieve the old path. */
@@ -220,5 +220,5 @@
 
 out:
-	async_answer_0(req_handle, rc);
+	async_answer_0(req, rc);
 
 	if (old)
@@ -228,38 +228,38 @@
 }
 
-static void vfs_in_resize(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
-	int64_t size = MERGE_LOUP32(IPC_GET_ARG2(*request), IPC_GET_ARG3(*request));
+static void vfs_in_resize(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
+	int64_t size = MERGE_LOUP32(IPC_GET_ARG2(*req), IPC_GET_ARG3(*req));
 	errno_t rc = vfs_op_resize(fd, size);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_stat(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_stat(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
 	errno_t rc = vfs_op_stat(fd);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_statfs(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = (int) IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_statfs(ipc_call_t *req)
+{
+	int fd = (int) IPC_GET_ARG1(*req);
 
 	errno_t rc = vfs_op_statfs(fd);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_sync(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_sync(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
 	errno_t rc = vfs_op_sync(fd);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_unlink(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int parentfd = IPC_GET_ARG1(*request);
-	int expectfd = IPC_GET_ARG2(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_unlink(ipc_call_t *req)
+{
+	int parentfd = IPC_GET_ARG1(*req);
+	int expectfd = IPC_GET_ARG2(*req);
 
 	char *path;
@@ -268,23 +268,23 @@
 		rc = vfs_op_unlink(parentfd, expectfd, path);
 
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_unmount(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int mpfd = IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_unmount(ipc_call_t *req)
+{
+	int mpfd = IPC_GET_ARG1(*req);
 	errno_t rc = vfs_op_unmount(mpfd);
-	async_answer_0(req_handle, rc);
-}
-
-static void vfs_in_wait_handle(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	bool high_fd = IPC_GET_ARG1(*request);
+	async_answer_0(req, rc);
+}
+
+static void vfs_in_wait_handle(ipc_call_t *req)
+{
+	bool high_fd = IPC_GET_ARG1(*req);
 	int fd = -1;
 	errno_t rc = vfs_op_wait_handle(high_fd, &fd);
-	async_answer_1(req_handle, rc, fd);
-}
-
-static void vfs_in_walk(cap_call_handle_t req_handle, ipc_call_t *request)
+	async_answer_1(req, rc, fd);
+}
+
+static void vfs_in_walk(ipc_call_t *req)
 {
 	/*
@@ -292,6 +292,6 @@
 	 * For defined flags, see <ipc/vfs.h>.
 	 */
-	int parentfd = IPC_GET_ARG1(*request);
-	int flags = IPC_GET_ARG2(*request);
+	int parentfd = IPC_GET_ARG1(*req);
+	int flags = IPC_GET_ARG2(*req);
 
 	int fd = 0;
@@ -302,19 +302,19 @@
 		free(path);
 	}
-	async_answer_1(req_handle, rc, fd);
-}
-
-static void vfs_in_write(cap_call_handle_t req_handle, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
-	aoff64_t pos = MERGE_LOUP32(IPC_GET_ARG2(*request),
-	    IPC_GET_ARG3(*request));
+	async_answer_1(req, rc, fd);
+}
+
+static void vfs_in_write(ipc_call_t *req)
+{
+	int fd = IPC_GET_ARG1(*req);
+	aoff64_t pos = MERGE_LOUP32(IPC_GET_ARG2(*req),
+	    IPC_GET_ARG3(*req));
 
 	size_t bytes = 0;
 	errno_t rc = vfs_op_write(fd, pos, &bytes);
-	async_answer_1(req_handle, rc, bytes);
-}
-
-void vfs_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_1(req, rc, bytes);
+}
+
+void vfs_connection(ipc_call_t *icall, void *arg)
 {
 	bool cont = true;
@@ -324,9 +324,9 @@
 	 * This call needs to be answered.
 	 */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (cont) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 
 		if (!IPC_GET_IMETHOD(call))
@@ -335,60 +335,60 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case VFS_IN_CLONE:
-			vfs_in_clone(chandle, &call);
+			vfs_in_clone(&call);
 			break;
 		case VFS_IN_FSPROBE:
-			vfs_in_fsprobe(chandle, &call);
+			vfs_in_fsprobe(&call);
 			break;
 		case VFS_IN_FSTYPES:
-			vfs_in_fstypes(chandle, &call);
+			vfs_in_fstypes(&call);
 			break;
 		case VFS_IN_MOUNT:
-			vfs_in_mount(chandle, &call);
+			vfs_in_mount(&call);
 			break;
 		case VFS_IN_OPEN:
-			vfs_in_open(chandle, &call);
+			vfs_in_open(&call);
 			break;
 		case VFS_IN_PUT:
-			vfs_in_put(chandle, &call);
+			vfs_in_put(&call);
 			break;
 		case VFS_IN_READ:
-			vfs_in_read(chandle, &call);
+			vfs_in_read(&call);
 			break;
 		case VFS_IN_REGISTER:
-			vfs_register(chandle, &call);
+			vfs_register(&call);
 			cont = false;
 			break;
 		case VFS_IN_RENAME:
-			vfs_in_rename(chandle, &call);
+			vfs_in_rename(&call);
 			break;
 		case VFS_IN_RESIZE:
-			vfs_in_resize(chandle, &call);
+			vfs_in_resize(&call);
 			break;
 		case VFS_IN_STAT:
-			vfs_in_stat(chandle, &call);
+			vfs_in_stat(&call);
 			break;
 		case VFS_IN_STATFS:
-			vfs_in_statfs(chandle, &call);
+			vfs_in_statfs(&call);
 			break;
 		case VFS_IN_SYNC:
-			vfs_in_sync(chandle, &call);
+			vfs_in_sync(&call);
 			break;
 		case VFS_IN_UNLINK:
-			vfs_in_unlink(chandle, &call);
+			vfs_in_unlink(&call);
 			break;
 		case VFS_IN_UNMOUNT:
-			vfs_in_unmount(chandle, &call);
+			vfs_in_unmount(&call);
 			break;
 		case VFS_IN_WAIT_HANDLE:
-			vfs_in_wait_handle(chandle, &call);
+			vfs_in_wait_handle(&call);
 			break;
 		case VFS_IN_WALK:
-			vfs_in_walk(chandle, &call);
+			vfs_in_walk(&call);
 			break;
 		case VFS_IN_WRITE:
-			vfs_in_write(chandle, &call);
+			vfs_in_write(&call);
 			break;
 		default:
-			async_answer_0(chandle, ENOTSUP);
+			async_answer_0(&call, ENOTSUP);
 			break;
 		}
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs_ops.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -386,5 +386,5 @@
 		return ENOENT;
 
-	aid_t msg = async_send_fast(exch, read ? VFS_OUT_READ : VFS_OUT_WRITE,
+	aid_t msg = async_send_4(exch, read ? VFS_OUT_READ : VFS_OUT_WRITE,
 	    file->node->service_id, file->node->index, LOWER32(pos),
 	    UPPER32(pos), answer);
Index: uspace/srv/vfs/vfs_pager.c
===================================================================
--- uspace/srv/vfs/vfs_pager.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs_pager.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -42,9 +42,9 @@
 #include <as.h>
 
-void vfs_page_in(cap_call_handle_t req_handle, ipc_call_t *request)
+void vfs_page_in(ipc_call_t *req)
 {
-	aoff64_t offset = IPC_GET_ARG1(*request);
-	size_t page_size = IPC_GET_ARG2(*request);
-	int fd = IPC_GET_ARG3(*request);
+	aoff64_t offset = IPC_GET_ARG1(*req);
+	size_t page_size = IPC_GET_ARG2(*req);
+	int fd = IPC_GET_ARG3(*req);
 	void *page;
 	errno_t rc;
@@ -55,5 +55,5 @@
 
 	if (page == AS_MAP_FAILED) {
-		async_answer_0(req_handle, ENOMEM);
+		async_answer_0(req, ENOMEM);
 		return;
 	}
@@ -78,5 +78,5 @@
 	} while (total < page_size);
 
-	async_answer_1(req_handle, rc, (sysarg_t) page);
+	async_answer_1(req, rc, (sysarg_t) page);
 
 	/*
Index: uspace/srv/vfs/vfs_register.c
===================================================================
--- uspace/srv/vfs/vfs_register.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/vfs/vfs_register.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -108,12 +108,11 @@
 /** VFS_REGISTER protocol function.
  *
- * @param req_handle  Call handle of the request.
- * @param request     Call structure with the request.
- *
- */
-void vfs_register(cap_call_handle_t req_handle, ipc_call_t *request)
+ * @param req Call structure with the request.
+ *
+ */
+void vfs_register(ipc_call_t *req)
 {
 	dprintf("Processing VFS_REGISTER request received from %zx.\n",
-	    request->in_phone_hash);
+	    req->in_phone_hash);
 
 	vfs_info_t *vfs_info;
@@ -124,5 +123,5 @@
 		dprintf("Failed to deliver the VFS info into our AS, rc=%d.\n",
 		    rc);
-		async_answer_0(req_handle, rc);
+		async_answer_0(req, rc);
 		return;
 	}
@@ -134,5 +133,5 @@
 	if (!fs_info) {
 		dprintf("Could not allocate memory for FS info.\n");
-		async_answer_0(req_handle, ENOMEM);
+		async_answer_0(req, ENOMEM);
 		return;
 	}
@@ -146,5 +145,5 @@
 	if (!vfs_info_sane(&fs_info->vfs_info)) {
 		free(fs_info);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -163,5 +162,5 @@
 		fibril_mutex_unlock(&fs_list_lock);
 		free(fs_info);
-		async_answer_0(req_handle, EEXIST);
+		async_answer_0(req, EEXIST);
 		return;
 	}
@@ -184,5 +183,5 @@
 		fibril_mutex_unlock(&fs_list_lock);
 		free(fs_info);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -194,7 +193,7 @@
 	 */
 
+	ipc_call_t call;
 	size_t size;
-	cap_call_handle_t chandle;
-	if (!async_share_in_receive(&chandle, &size)) {
+	if (!async_share_in_receive(&call, &size)) {
 		dprintf("Unexpected call\n");
 		list_remove(&fs_info->fs_link);
@@ -202,6 +201,6 @@
 		async_hangup(fs_info->sess);
 		free(fs_info);
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -216,6 +215,6 @@
 		async_hangup(fs_info->sess);
 		free(fs_info);
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(req_handle, EINVAL);
+		async_answer_0(&call, EINVAL);
+		async_answer_0(req, EINVAL);
 		return;
 	}
@@ -224,5 +223,5 @@
 	 * Commit to read-only sharing the PLB with the client.
 	 */
-	(void) async_share_in_finalize(chandle, plb,
+	(void) async_share_in_finalize(&call, plb,
 	    AS_AREA_READ | AS_AREA_CACHEABLE);
 
@@ -235,5 +234,5 @@
 	 */
 	fs_info->fs_handle = (fs_handle_t) atomic_postinc(&fs_handle_next);
-	async_answer_1(req_handle, EOK, (sysarg_t) fs_info->fs_handle);
+	async_answer_1(req, EOK, (sysarg_t) fs_info->fs_handle);
 
 	fibril_condvar_broadcast(&fs_list_cv);
Index: uspace/srv/volsrv/volsrv.c
===================================================================
--- uspace/srv/volsrv/volsrv.c	(revision 76f566de890cd5cbde52f45bfddc66bd4993b126)
+++ uspace/srv/volsrv/volsrv.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
@@ -52,5 +52,5 @@
 #define NAME  "volsrv"
 
-static void vol_client_conn(cap_call_handle_t, ipc_call_t *, void *);
+static void vol_client_conn(ipc_call_t *, void *);
 
 static errno_t vol_init(void)
@@ -85,14 +85,14 @@
 }
 
-static void vol_get_parts_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
-{
-	cap_call_handle_t chandle;
+static void vol_get_parts_srv(ipc_call_t *icall)
+{
+	ipc_call_t call;
 	size_t size;
 	size_t act_size;
 	errno_t rc;
 
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
@@ -100,6 +100,6 @@
 	service_id_t *id_buf = (service_id_t *) malloc(size);
 	if (id_buf == NULL) {
-		async_answer_0(chandle, ENOMEM);
-		async_answer_0(icall_handle, ENOMEM);
+		async_answer_0(&call, ENOMEM);
+		async_answer_0(icall, ENOMEM);
 		return;
 	}
@@ -107,16 +107,16 @@
 	rc = vol_part_get_ids(id_buf, size, &act_size);
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	errno_t retval = async_data_read_finalize(chandle, id_buf, size);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	errno_t retval = async_data_read_finalize(&call, id_buf, size);
 	free(id_buf);
 
-	async_answer_1(icall_handle, retval, act_size);
-}
-
-static void vol_part_add_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+	async_answer_1(icall, retval, act_size);
+}
+
+static void vol_part_add_srv(ipc_call_t *icall)
 {
 	service_id_t sid;
@@ -127,12 +127,12 @@
 	rc = vol_part_add(sid);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vol_part_info_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
+}
+
+static void vol_part_info_srv(ipc_call_t *icall)
 {
 	service_id_t sid;
@@ -146,5 +146,5 @@
 	rc = vol_part_find_by_id_ref(sid, &part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -152,36 +152,36 @@
 	rc = vol_part_get_info(part, &pinfo);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, EIO);
-		goto error;
-	}
-
-	cap_call_handle_t chandle;
+		async_answer_0(icall, EIO);
+		goto error;
+	}
+
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		goto error;
 	}
 
 	if (size != sizeof(vol_part_info_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		goto error;
-	}
-
-	rc = async_data_read_finalize(chandle, &pinfo,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		goto error;
+	}
+
+	rc = async_data_read_finalize(&call, &pinfo,
 	    min(size, sizeof(pinfo)));
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		goto error;
-	}
-
-	async_answer_0(icall_handle, EOK);
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		goto error;
+	}
+
+	async_answer_0(icall, EOK);
 error:
 	vol_part_del_ref(part);
 }
 
-static void vol_part_eject_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void vol_part_eject_srv(ipc_call_t *icall)
 {
 	service_id_t sid;
@@ -194,5 +194,5 @@
 	rc = vol_part_find_by_id_ref(sid, &part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		goto error;
 	}
@@ -200,14 +200,14 @@
 	rc = vol_part_eject_part(part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, EIO);
-		goto error;
-	}
-
-	async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EIO);
+		goto error;
+	}
+
+	async_answer_0(icall, EOK);
 error:
 	vol_part_del_ref(part);
 }
 
-static void vol_part_empty_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void vol_part_empty_srv(ipc_call_t *icall)
 {
 	service_id_t sid;
@@ -220,5 +220,5 @@
 	rc = vol_part_find_by_id_ref(sid, &part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -226,14 +226,14 @@
 	rc = vol_part_empty_part(part);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, EIO);
-		goto error;
-	}
-
-	async_answer_0(icall_handle, EOK);
+		async_answer_0(icall, EIO);
+		goto error;
+	}
+
+	async_answer_0(icall, EOK);
 error:
 	vol_part_del_ref(part);
 }
 
-static void vol_part_get_lsupp_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+static void vol_part_get_lsupp_srv(ipc_call_t *icall)
 {
 	vol_fstype_t fstype;
@@ -247,31 +247,31 @@
 	volsrv_part_get_lsupp(fstype, &vlsupp);
 
-	cap_call_handle_t chandle;
+	ipc_call_t call;
 	size_t size;
-	if (!async_data_read_receive(&chandle, &size)) {
-		async_answer_0(chandle, EREFUSED);
-		async_answer_0(icall_handle, EREFUSED);
+	if (!async_data_read_receive(&call, &size)) {
+		async_answer_0(&call, EREFUSED);
+		async_answer_0(icall, EREFUSED);
 		return;
 	}
 
 	if (size != sizeof(vol_label_supp_t)) {
-		async_answer_0(chandle, EINVAL);
-		async_answer_0(icall_handle, EINVAL);
-		return;
-	}
-
-	rc = async_data_read_finalize(chandle, &vlsupp,
+		async_answer_0(&call, EINVAL);
+		async_answer_0(icall, EINVAL);
+		return;
+	}
+
+	rc = async_data_read_finalize(&call, &vlsupp,
 	    min(size, sizeof(vlsupp)));
 	if (rc != EOK) {
-		async_answer_0(chandle, rc);
-		async_answer_0(icall_handle, rc);
-		return;
-	}
-
-	async_answer_0(icall_handle, EOK);
-}
-
-
-static void vol_part_mkfs_srv(cap_call_handle_t icall_handle, ipc_call_t *icall)
+		async_answer_0(&call, rc);
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	async_answer_0(icall, EOK);
+}
+
+
+static void vol_part_mkfs_srv(ipc_call_t *icall)
 {
 	service_id_t sid;
@@ -289,5 +289,5 @@
 	    0, NULL);
 	if (rc != EOK) {
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		return;
 	}
@@ -301,5 +301,5 @@
 	if (rc != EOK) {
 		free(label);
-		async_answer_0(icall_handle, ENOENT);
+		async_answer_0(icall, ENOENT);
 		return;
 	}
@@ -308,5 +308,5 @@
 	if (rc != EOK) {
 		free(label);
-		async_answer_0(icall_handle, rc);
+		async_answer_0(icall, rc);
 		vol_part_del_ref(part);
 		return;
@@ -314,22 +314,22 @@
 
 	free(label);
-	async_answer_0(icall_handle, EOK);
-}
-
-static void vol_client_conn(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
+	async_answer_0(icall, EOK);
+}
+
+static void vol_client_conn(ipc_call_t *icall, void *arg)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_client_conn()");
 
 	/* Accept the connection */
-	async_answer_0(icall_handle, EOK);
+	async_answer_0(icall, EOK);
 
 	while (true) {
 		ipc_call_t call;
-		cap_call_handle_t chandle = async_get_call(&call);
+		async_get_call(&call);
 		sysarg_t method = IPC_GET_IMETHOD(call);
 
 		if (!method) {
 			/* The other side has hung up */
-			async_answer_0(chandle, EOK);
+			async_answer_0(&call, EOK);
 			return;
 		}
@@ -337,26 +337,26 @@
 		switch (method) {
 		case VOL_GET_PARTS:
-			vol_get_parts_srv(chandle, &call);
+			vol_get_parts_srv(&call);
 			break;
 		case VOL_PART_ADD:
-			vol_part_add_srv(chandle, &call);
+			vol_part_add_srv(&call);
 			break;
 		case VOL_PART_INFO:
-			vol_part_info_srv(chandle, &call);
+			vol_part_info_srv(&call);
 			break;
 		case VOL_PART_EJECT:
-			vol_part_eject_srv(chandle, &call);
+			vol_part_eject_srv(&call);
 			break;
 		case VOL_PART_EMPTY:
-			vol_part_empty_srv(chandle, &call);
+			vol_part_empty_srv(&call);
 			break;
 		case VOL_PART_LSUPP:
-			vol_part_get_lsupp_srv(chandle, &call);
+			vol_part_get_lsupp_srv(&call);
 			break;
 		case VOL_PART_MKFS:
-			vol_part_mkfs_srv(chandle, &call);
+			vol_part_mkfs_srv(&call);
 			break;
 		default:
-			async_answer_0(chandle, EINVAL);
+			async_answer_0(&call, EINVAL);
 		}
 	}
