Index: uspace/drv/block/ata_bd/main.c
===================================================================
--- uspace/drv/block/ata_bd/main.c	(revision 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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 1e472eea7d438ec6ce4974a09d063a281dce7532)
+++ 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;
 		}
