Index: uspace/lib/c/generic/async/client.c
===================================================================
--- uspace/lib/c/generic/async/client.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/lib/c/generic/async/client.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -249,5 +249,5 @@
  *
  */
-aid_t async_send_fast(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+static aid_t async_send_fast(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr)
 {
@@ -289,5 +289,5 @@
  *
  */
-aid_t async_send_slow(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+static aid_t async_send_slow(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5,
     ipc_call_t *dataptr)
@@ -310,4 +310,41 @@
 
 	return (aid_t) msg;
+}
+
+aid_t async_send_0(async_exch_t *exch, sysarg_t imethod, ipc_call_t *dataptr)
+{
+	return async_send_fast(exch, imethod, 0, 0, 0, 0, dataptr);
+}
+
+aid_t async_send_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+    ipc_call_t *dataptr)
+{
+	return async_send_fast(exch, imethod, arg1, 0, 0, 0, dataptr);
+}
+
+aid_t async_send_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+    sysarg_t arg2, ipc_call_t *dataptr)
+{
+	return async_send_fast(exch, imethod, arg1, arg2, 0, 0, dataptr);
+}
+
+aid_t async_send_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+    sysarg_t arg2, sysarg_t arg3, ipc_call_t *dataptr)
+{
+	return async_send_fast(exch, imethod, arg1, arg2, arg3, 0, dataptr);
+}
+
+aid_t async_send_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+    sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr)
+{
+	return async_send_fast(exch, imethod, arg1, arg2, arg3, arg4, dataptr);
+}
+
+aid_t async_send_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
+    sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5,
+    ipc_call_t *dataptr)
+{
+	return async_send_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5,
+	    dataptr);
 }
 
@@ -434,7 +471,7 @@
  *
  */
-errno_t async_req_fast(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
-    sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2,
-    sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+static errno_t async_req_fast(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
+    sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
 {
 	if (exch == NULL)
@@ -486,7 +523,7 @@
  *
  */
-errno_t async_req_slow(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1,
-    sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1,
-    sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+static errno_t async_req_slow(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5,
+    sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
 {
 	if (exch == NULL)
@@ -516,4 +553,184 @@
 
 	return rc;
+}
+
+errno_t async_req_0_0(async_exch_t *exch, sysarg_t imethod)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_0_1(async_exch_t *exch, sysarg_t imethod, sysarg_t *r1)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_0_2(async_exch_t *exch, sysarg_t imethod, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_0_3(async_exch_t *exch, sysarg_t imethod, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_0_4(async_exch_t *exch, sysarg_t imethod, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_0_5(async_exch_t *exch, sysarg_t imethod, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_fast(exch, imethod, 0, 0, 0, 0, r1, r2, r3, r4, r5);
+}
+
+errno_t async_req_1_0(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_1_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t *r1)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_1_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_1_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_1_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_1_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_fast(exch, imethod, arg1, 0, 0, 0, r1, r2, r3, r4, r5);
+}
+
+errno_t async_req_2_0(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_2_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t *r1)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_2_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_2_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_2_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_2_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, 0, 0, r1, r2, r3, r4, r5);
+}
+
+errno_t async_req_3_0(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_3_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t *r1)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_3_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_3_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_3_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_3_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, 0, r1, r2, r3, r4, r5);
+}
+
+errno_t async_req_4_0(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_4_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_4_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_4_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_4_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_4_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_fast(exch, imethod, arg1, arg2, arg3, arg4, r1, r2, r3, r4, r5);
+}
+
+errno_t async_req_5_0(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, NULL, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_5_1(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, r1, NULL, NULL, NULL, NULL);
+}
+
+errno_t async_req_5_2(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, sysarg_t *r2)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, r1, r2, NULL, NULL, NULL);
+}
+
+errno_t async_req_5_3(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, r1, r2, r3, NULL, NULL);
+}
+
+errno_t async_req_5_4(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, r1, r2, r3, r4, NULL);
+}
+
+errno_t async_req_5_5(async_exch_t *exch, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5)
+{
+	return async_req_slow(exch, imethod, arg1, arg2, arg3, arg4, arg5, r1, r2, r3, r4, r5);
 }
 
@@ -926,6 +1143,6 @@
  *
  */
-errno_t async_share_in_start(async_exch_t *exch, size_t size, sysarg_t arg,
-    unsigned int *flags, void **dst)
+static errno_t async_share_in_start(async_exch_t *exch, size_t size,
+    sysarg_t arg, unsigned int *flags, void **dst)
 {
 	if (exch == NULL)
@@ -943,4 +1160,27 @@
 	*dst = (void *) _dst;
 	return res;
+}
+
+errno_t async_share_in_start_0_0(async_exch_t *exch, size_t size, void **dst)
+{
+	return async_share_in_start(exch, size, 0, NULL, dst);
+}
+
+errno_t async_share_in_start_0_1(async_exch_t *exch, size_t size,
+    unsigned int *flags, void **dst)
+{
+	return async_share_in_start(exch, size, 0, flags, dst);
+}
+
+errno_t async_share_in_start_1_0(async_exch_t *exch, size_t size, sysarg_t arg,
+    void **dst)
+{
+	return async_share_in_start(exch, size, arg, NULL, dst);
+}
+
+errno_t async_share_in_start_1_1(async_exch_t *exch, size_t size, sysarg_t arg,
+    unsigned int *flags, void **dst)
+{
+	return async_share_in_start(exch, size, arg, flags, dst);
 }
 
Index: uspace/lib/c/generic/async/server.c
===================================================================
--- uspace/lib/c/generic/async/server.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/lib/c/generic/async/server.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -878,4 +878,9 @@
 }
 
+bool async_get_call(ipc_call_t *call)
+{
+	return async_get_call_timeout(call, 0);
+}
+
 void *async_get_client_data(void)
 {
@@ -1096,5 +1101,5 @@
 }
 
-errno_t async_forward_fast(ipc_call_t *call, async_exch_t *exch,
+static 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)
 {
@@ -1112,5 +1117,5 @@
 }
 
-errno_t async_forward_slow(ipc_call_t *call, async_exch_t *exch,
+static 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)
@@ -1127,4 +1132,45 @@
 	return ipc_forward_slow(chandle, exch->phone, imethod, arg1, arg2, arg3,
 	    arg4, arg5, mode);
+}
+
+errno_t async_forward_0(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
+    unsigned int mode)
+{
+	return async_forward_fast(call, exch, imethod, 0, 0, mode);
+}
+
+errno_t async_forward_1(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, unsigned int mode)
+{
+	return async_forward_fast(call, exch, imethod, arg1, 0, mode);
+}
+
+errno_t async_forward_2(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, unsigned int mode)
+{
+	return async_forward_fast(call, exch, imethod, arg1, arg2, mode);
+}
+
+errno_t async_forward_3(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, unsigned int mode)
+{
+	return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, 0, 0,
+	    mode);
+}
+
+errno_t async_forward_4(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
+    unsigned int mode)
+{
+	return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, arg4,
+	    0, mode);
+}
+
+errno_t async_forward_5(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)
+{
+	return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, arg4,
+	    arg5, mode);
 }
 
@@ -1320,5 +1366,5 @@
  *
  */
-errno_t async_data_read_forward_fast(async_exch_t *exch, sysarg_t imethod,
+static errno_t async_data_read_forward_fast(async_exch_t *exch, sysarg_t imethod,
     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
     ipc_call_t *dataptr)
@@ -1333,5 +1379,5 @@
 	}
 
-	aid_t msg = async_send_fast(exch, imethod, arg1, arg2, arg3, arg4,
+	aid_t msg = async_send_4(exch, imethod, arg1, arg2, arg3, arg4,
 	    dataptr);
 	if (msg == 0) {
@@ -1352,4 +1398,72 @@
 
 	return (errno_t) rc;
+}
+
+errno_t async_data_read_forward_0_0(async_exch_t *exch, sysarg_t imethod)
+{
+	return async_data_read_forward_fast(exch, imethod, 0, 0, 0, 0, NULL);
+}
+
+errno_t async_data_read_forward_1_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, 0, 0, 0, NULL);
+}
+
+errno_t async_data_read_forward_2_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, 0,
+	    0, NULL);
+}
+
+errno_t async_data_read_forward_3_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    0, NULL);
+}
+
+errno_t async_data_read_forward_4_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    arg4, NULL);
+}
+
+errno_t async_data_read_forward_0_1(async_exch_t *exch, sysarg_t imethod,
+    ipc_call_t *dataptr)
+{
+	return async_data_read_forward_fast(exch, imethod, 0, 0, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_read_forward_1_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, ipc_call_t *dataptr)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, 0, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_read_forward_2_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, ipc_call_t *dataptr)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_read_forward_3_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_call_t *dataptr)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    0, dataptr);
+}
+
+errno_t async_data_read_forward_4_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
+    ipc_call_t *dataptr)
+{
+	return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    arg4, dataptr);
 }
 
@@ -1497,7 +1611,7 @@
  *
  */
-errno_t async_data_write_forward_fast(async_exch_t *exch, sysarg_t imethod,
-    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
-    ipc_call_t *dataptr)
+static errno_t async_data_write_forward_fast(async_exch_t *exch,
+    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
+    sysarg_t arg4, ipc_call_t *dataptr)
 {
 	if (exch == NULL)
@@ -1510,5 +1624,5 @@
 	}
 
-	aid_t msg = async_send_fast(exch, imethod, arg1, arg2, arg3, arg4,
+	aid_t msg = async_send_4(exch, imethod, arg1, arg2, arg3, arg4,
 	    dataptr);
 	if (msg == 0) {
@@ -1531,4 +1645,74 @@
 }
 
+errno_t async_data_write_forward_0_0(async_exch_t *exch, sysarg_t imethod)
+{
+	return async_data_write_forward_fast(exch, imethod, 0, 0, 0,
+	    0, NULL);
+}
+
+errno_t async_data_write_forward_1_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, 0, 0,
+	    0, NULL);
+}
+
+errno_t async_data_write_forward_2_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, 0,
+	    0, NULL);
+}
+
+errno_t async_data_write_forward_3_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    0, NULL);
+}
+
+errno_t async_data_write_forward_4_0(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    arg4, NULL);
+}
+
+errno_t async_data_write_forward_0_1(async_exch_t *exch, sysarg_t imethod,
+    ipc_call_t *dataptr)
+{
+	return async_data_write_forward_fast(exch, imethod, 0, 0, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_write_forward_1_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, ipc_call_t *dataptr)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, 0, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_write_forward_2_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, ipc_call_t *dataptr)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, 0,
+	    0, dataptr);
+}
+
+errno_t async_data_write_forward_3_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_call_t *dataptr)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    0, dataptr);
+}
+
+errno_t async_data_write_forward_4_1(async_exch_t *exch, sysarg_t imethod,
+    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
+    ipc_call_t *dataptr)
+{
+	return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
+	    arg4, dataptr);
+}
+
 /** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls.
  *
Index: uspace/lib/c/include/async.h
===================================================================
--- uspace/lib/c/include/async.h	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/lib/c/include/async.h	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -108,32 +108,16 @@
 extern __noreturn void async_manager(void);
 
-#define async_get_call(data) \
-	async_get_call_timeout(data, 0)
-
+extern bool async_get_call(ipc_call_t *);
 extern bool async_get_call_timeout(ipc_call_t *, usec_t);
 
-/*
- * User-friendly wrappers for async_send_fast() and async_send_slow(). The
- * macros are in the form async_send_m(), where m denotes the number of payload
- * arguments. Each macros chooses between the fast and the slow version based
- * on m.
- */
-
-#define async_send_0(exch, method, dataptr) \
-	async_send_fast(exch, method, 0, 0, 0, 0, dataptr)
-#define async_send_1(exch, method, arg1, dataptr) \
-	async_send_fast(exch, method, arg1, 0, 0, 0, dataptr)
-#define async_send_2(exch, method, arg1, arg2, dataptr) \
-	async_send_fast(exch, method, arg1, arg2, 0, 0, dataptr)
-#define async_send_3(exch, method, arg1, arg2, arg3, dataptr) \
-	async_send_fast(exch, method, arg1, arg2, arg3, 0, dataptr)
-#define async_send_4(exch, method, arg1, arg2, arg3, arg4, dataptr) \
-	async_send_fast(exch, method, arg1, arg2, arg3, arg4, dataptr)
-#define async_send_5(exch, method, arg1, arg2, arg3, arg4, arg5, dataptr) \
-	async_send_slow(exch, method, arg1, arg2, arg3, arg4, arg5, dataptr)
-
-extern aid_t async_send_fast(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+extern aid_t async_send_0(async_exch_t *, sysarg_t, ipc_call_t *);
+extern aid_t async_send_1(async_exch_t *, sysarg_t, sysarg_t, ipc_call_t *);
+extern aid_t async_send_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    ipc_call_t *);
+extern aid_t async_send_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, ipc_call_t *);
+extern aid_t async_send_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, ipc_call_t *);
-extern aid_t async_send_slow(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+extern aid_t async_send_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, ipc_call_t *);
 
@@ -198,134 +182,90 @@
  */
 
-extern errno_t async_forward_fast(ipc_call_t *, async_exch_t *, sysarg_t,
+extern errno_t async_forward_0(ipc_call_t *, async_exch_t *, sysarg_t,
+    unsigned int);
+extern errno_t async_forward_1(ipc_call_t *, async_exch_t *, sysarg_t,
+    sysarg_t, unsigned int);
+extern errno_t async_forward_2(ipc_call_t *, async_exch_t *, sysarg_t,
     sysarg_t, sysarg_t, unsigned int);
-extern errno_t async_forward_slow(ipc_call_t *, async_exch_t *, sysarg_t,
+extern errno_t async_forward_3(ipc_call_t *, async_exch_t *, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, unsigned int);
+extern errno_t async_forward_4(ipc_call_t *, async_exch_t *, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
+extern errno_t async_forward_5(ipc_call_t *, async_exch_t *, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
 
 /*
- * User-friendly wrappers for async_req_fast() and async_req_slow(). The macros
- * are in the form async_req_m_n(), where m is the number of payload arguments
- * and n is the number of return arguments. The macros decide between the fast
- * and slow verion based on m.
- */
-
-#define async_req_0_0(exch, method) \
-	async_req_fast(exch, method, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)
-#define async_req_0_1(exch, method, r1) \
-	async_req_fast(exch, method, 0, 0, 0, 0, r1, NULL, NULL, NULL, NULL)
-#define async_req_0_2(exch, method, r1, r2) \
-	async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, NULL, NULL, NULL)
-#define async_req_0_3(exch, method, r1, r2, r3) \
-	async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, NULL, NULL)
-#define async_req_0_4(exch, method, r1, r2, r3, r4) \
-	async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, r4, NULL)
-#define async_req_0_5(exch, method, r1, r2, r3, r4, r5) \
-	async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, r4, r5)
-
-#define async_req_1_0(exch, method, arg1) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, NULL, NULL, NULL, NULL, \
-	    NULL)
-#define async_req_1_1(exch, method, arg1, rc1) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, rc1, NULL, NULL, NULL, \
-	    NULL)
-#define async_req_1_2(exch, method, arg1, rc1, rc2) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, NULL, NULL, \
-	    NULL)
-#define async_req_1_3(exch, method, arg1, rc1, rc2, rc3) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, NULL, \
-	    NULL)
-#define async_req_1_4(exch, method, arg1, rc1, rc2, rc3, rc4) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, rc4, \
-	    NULL)
-#define async_req_1_5(exch, method, arg1, rc1, rc2, rc3, rc4, rc5) \
-	async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, rc4, \
-	    rc5)
-
-#define async_req_2_0(exch, method, arg1, arg2) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, NULL, NULL, NULL, \
-	    NULL, NULL)
-#define async_req_2_1(exch, method, arg1, arg2, rc1) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, NULL, NULL, \
-	    NULL, NULL)
-#define async_req_2_2(exch, method, arg1, arg2, rc1, rc2) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, NULL, NULL, \
-	    NULL)
-#define async_req_2_3(exch, method, arg1, arg2, rc1, rc2, rc3) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, NULL, \
-	    NULL)
-#define async_req_2_4(exch, method, arg1, arg2, rc1, rc2, rc3, rc4) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, rc4, \
-	    NULL)
-#define async_req_2_5(exch, method, arg1, arg2, rc1, rc2, rc3, rc4, rc5) \
-	async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, rc4, \
-	    rc5)
-
-#define async_req_3_0(exch, method, arg1, arg2, arg3) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, NULL, NULL, NULL, \
-	    NULL, NULL)
-#define async_req_3_1(exch, method, arg1, arg2, arg3, rc1) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, NULL, NULL, \
-	    NULL, NULL)
-#define async_req_3_2(exch, method, arg1, arg2, arg3, rc1, rc2) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, NULL, \
-	    NULL, NULL)
-#define async_req_3_3(exch, method, arg1, arg2, arg3, rc1, rc2, rc3) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \
-	    NULL, NULL)
-#define async_req_3_4(exch, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \
-	    rc4, NULL)
-#define async_req_3_5(exch, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4, \
-    rc5) \
-	async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \
-	    rc4, rc5)
-
-#define async_req_4_0(exch, method, arg1, arg2, arg3, arg4) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, NULL, NULL, \
-	    NULL, NULL, NULL)
-#define async_req_4_1(exch, method, arg1, arg2, arg3, arg4, rc1) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, NULL, \
-	    NULL, NULL, NULL)
-#define async_req_4_2(exch, method, arg1, arg2, arg3, arg4, rc1, rc2) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, NULL, \
-	    NULL, NULL)
-#define async_req_4_3(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \
-	    NULL, NULL)
-#define async_req_4_4(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \
-    rc4) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \
-	    rc4, NULL)
-#define async_req_4_5(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \
-    rc4, rc5) \
-	async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \
-	    rc4, rc5)
-
-#define async_req_5_0(exch, method, arg1, arg2, arg3, arg4, arg5) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, NULL, \
-	    NULL, NULL, NULL, NULL)
-#define async_req_5_1(exch, method, arg1, arg2, arg3, arg4, arg5, rc1) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, \
-	    NULL, NULL, NULL, NULL)
-#define async_req_5_2(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-	    NULL, NULL, NULL)
-#define async_req_5_3(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-    rc3) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-	    rc3, NULL, NULL)
-#define async_req_5_4(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-    rc3, rc4) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-	    rc3, rc4, NULL)
-#define async_req_5_5(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-    rc3, rc4, rc5) \
-	async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \
-	    rc3, rc4, rc5)
-
-extern errno_t async_req_fast(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+ * User-friendly wrappers for async_req_*_*().
+ * The functions are in the form async_req_m_n(), where m is the number of
+ * payload arguments and n is the number of return arguments.
+ */
+
+extern errno_t async_req_0_0(async_exch_t *, sysarg_t);
+extern errno_t async_req_0_1(async_exch_t *, sysarg_t, sysarg_t *);
+extern errno_t async_req_0_2(async_exch_t *, sysarg_t, sysarg_t *, sysarg_t *);
+extern errno_t async_req_0_3(async_exch_t *, sysarg_t, sysarg_t *, sysarg_t *,
+    sysarg_t *);
+extern errno_t async_req_0_4(async_exch_t *, sysarg_t, sysarg_t *, sysarg_t *,
+    sysarg_t *, sysarg_t *);
+extern errno_t async_req_0_5(async_exch_t *, sysarg_t, sysarg_t *, sysarg_t *,
+    sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_1_0(async_exch_t *, sysarg_t, sysarg_t);
+extern errno_t async_req_1_1(async_exch_t *, sysarg_t, sysarg_t, sysarg_t *);
+extern errno_t async_req_1_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t *,
+    sysarg_t *);
+extern errno_t async_req_1_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t *,
+    sysarg_t *, sysarg_t *);
+extern errno_t async_req_1_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t *,
+    sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_1_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t *,
+    sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_2_0(async_exch_t *, sysarg_t, sysarg_t, sysarg_t);
+extern errno_t async_req_2_1(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t *);
+extern errno_t async_req_2_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t *, sysarg_t *);
+extern errno_t async_req_2_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_2_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_2_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_3_0(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t);
+extern errno_t async_req_3_1(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t *);
+extern errno_t async_req_3_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t *, sysarg_t *);
+extern errno_t async_req_3_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_3_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_3_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_4_0(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t);
+extern errno_t async_req_4_1(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t *);
+extern errno_t async_req_4_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t *, sysarg_t *);
+extern errno_t async_req_4_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_4_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_4_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *,
     sysarg_t *);
-extern errno_t async_req_slow(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+extern errno_t async_req_5_0(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t);
+extern errno_t async_req_5_1(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, sysarg_t *);
+extern errno_t async_req_5_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, sysarg_t *, sysarg_t *);
+extern errno_t async_req_5_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *);
+extern errno_t async_req_5_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *,
+    sysarg_t *);
+extern errno_t async_req_5_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *,
     sysarg_t *, sysarg_t *);
@@ -357,15 +297,12 @@
  */
 
-#define async_share_in_start_0_0(exch, size, dst) \
-	async_share_in_start(exch, size, 0, NULL, dst)
-#define async_share_in_start_0_1(exch, size, flags, dst) \
-	async_share_in_start(exch, size, 0, flags, dst)
-#define async_share_in_start_1_0(exch, size, arg, dst) \
-	async_share_in_start(exch, size, arg, NULL, dst)
-#define async_share_in_start_1_1(exch, size, arg, flags, dst) \
-	async_share_in_start(exch, size, arg, flags, dst)
-
-extern errno_t async_share_in_start(async_exch_t *, size_t, sysarg_t,
+extern errno_t async_share_in_start_0_0(async_exch_t *, size_t, void **);
+extern errno_t async_share_in_start_0_1(async_exch_t *, size_t,
     unsigned int *, void **);
+extern errno_t async_share_in_start_1_0(async_exch_t *, size_t, sysarg_t,
+    void **);
+extern errno_t async_share_in_start_1_1(async_exch_t *, size_t, sysarg_t,
+    unsigned int *, void **);
+
 extern bool async_share_in_receive(ipc_call_t *, size_t *);
 extern errno_t async_share_in_finalize(ipc_call_t *, void *, unsigned int);
@@ -375,33 +312,23 @@
 extern errno_t async_share_out_finalize(ipc_call_t *, void **);
 
-/*
- * User-friendly wrappers for async_data_read_forward_fast().
- */
-
-#define async_data_read_forward_0_0(exch, method, answer) \
-	async_data_read_forward_fast(exch, method, 0, 0, 0, 0, NULL)
-#define async_data_read_forward_0_1(exch, method, answer) \
-	async_data_read_forward_fast(exch, method, 0, 0, 0, 0, answer)
-#define async_data_read_forward_1_0(exch, method, arg1, answer) \
-	async_data_read_forward_fast(exch, method, arg1, 0, 0, 0, NULL)
-#define async_data_read_forward_1_1(exch, method, arg1, answer) \
-	async_data_read_forward_fast(exch, method, arg1, 0, 0, 0, answer)
-#define async_data_read_forward_2_0(exch, method, arg1, arg2, answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, 0, 0, NULL)
-#define async_data_read_forward_2_1(exch, method, arg1, arg2, answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, 0, 0, answer)
-#define async_data_read_forward_3_0(exch, method, arg1, arg2, arg3, answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, arg3, 0, NULL)
-#define async_data_read_forward_3_1(exch, method, arg1, arg2, arg3, answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, arg3, 0, \
-	    answer)
-#define async_data_read_forward_4_0(exch, method, arg1, arg2, arg3, arg4, \
-    answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, arg3, arg4, \
-	    NULL)
-#define async_data_read_forward_4_1(exch, method, arg1, arg2, arg3, arg4, \
-    answer) \
-	async_data_read_forward_fast(exch, method, arg1, arg2, arg3, arg4, \
-	    answer)
+extern errno_t async_data_read_forward_0_0(async_exch_t *, sysarg_t);
+extern errno_t async_data_read_forward_1_0(async_exch_t *, sysarg_t, sysarg_t);
+extern errno_t async_data_read_forward_2_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t);
+extern errno_t async_data_read_forward_3_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t);
+extern errno_t async_data_read_forward_4_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t);
+
+extern errno_t async_data_read_forward_0_1(async_exch_t *, sysarg_t,
+    ipc_call_t *);
+extern errno_t async_data_read_forward_1_1(async_exch_t *, sysarg_t, sysarg_t,
+    ipc_call_t *);
+extern errno_t async_data_read_forward_2_1(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, ipc_call_t *);
+extern errno_t async_data_read_forward_3_1(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, ipc_call_t *);
+extern errno_t async_data_read_forward_4_1(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t, ipc_call_t *);
 
 extern aid_t async_data_read(async_exch_t *, void *, size_t, ipc_call_t *);
@@ -410,37 +337,23 @@
 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,
+extern errno_t async_data_write_forward_0_0(async_exch_t *, sysarg_t);
+extern errno_t async_data_write_forward_1_0(async_exch_t *, sysarg_t, sysarg_t);
+extern errno_t async_data_write_forward_2_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t);
+extern errno_t async_data_write_forward_3_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t);
+extern errno_t async_data_write_forward_4_0(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, sysarg_t);
+
+extern errno_t async_data_write_forward_0_1(async_exch_t *, sysarg_t,
+    ipc_call_t *);
+extern errno_t async_data_write_forward_1_1(async_exch_t *, sysarg_t, sysarg_t,
+    ipc_call_t *);
+extern errno_t async_data_write_forward_2_1(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, ipc_call_t *);
+extern errno_t async_data_write_forward_3_1(async_exch_t *, sysarg_t, sysarg_t,
+    sysarg_t, sysarg_t, ipc_call_t *);
+extern errno_t async_data_write_forward_4_1(async_exch_t *, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, ipc_call_t *);
-
-/*
- * User-friendly wrappers for async_data_write_forward_fast().
- */
-
-#define async_data_write_forward_0_0(exch, method, answer) \
-	async_data_write_forward_fast(exch, method, 0, 0, 0, 0, NULL)
-#define async_data_write_forward_0_1(exch, method, answer) \
-	async_data_write_forward_fast(exch, method, 0, 0, 0, 0, answer)
-#define async_data_write_forward_1_0(exch, method, arg1, answer) \
-	async_data_write_forward_fast(exch, method, arg1, 0, 0, 0, NULL)
-#define async_data_write_forward_1_1(exch, method, arg1, answer) \
-	async_data_write_forward_fast(exch, method, arg1, 0, 0, 0, answer)
-#define async_data_write_forward_2_0(exch, method, arg1, arg2, answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, 0, 0, NULL)
-#define async_data_write_forward_2_1(exch, method, arg1, arg2, answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, 0, 0, answer)
-#define async_data_write_forward_3_0(exch, method, arg1, arg2, arg3, answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, arg3, 0, \
-	    NULL)
-#define async_data_write_forward_3_1(exch, method, arg1, arg2, arg3, answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, arg3, 0, \
-	    answer)
-#define async_data_write_forward_4_0(exch, method, arg1, arg2, arg3, arg4, \
-    answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, arg3, arg4, \
-	    NULL)
-#define async_data_write_forward_4_1(exch, method, arg1, arg2, arg3, arg4, \
-    answer) \
-	async_data_write_forward_fast(exch, method, arg1, arg2, arg3, arg4, \
-	    answer)
 
 extern errno_t async_data_write_start(async_exch_t *, const void *, size_t);
@@ -451,7 +364,4 @@
     const size_t, const size_t, size_t *);
 extern void async_data_write_void(errno_t);
-
-extern errno_t async_data_write_forward_fast(async_exch_t *, sysarg_t, sysarg_t,
-    sysarg_t, sysarg_t, sysarg_t, ipc_call_t *);
 
 extern async_sess_t *async_callback_receive(exch_mgmt_t);
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/devman/main.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -136,5 +136,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall, exch, INTERFACE_DDF_CLIENT, handle, 0, IPC_FF_NONE);
+	async_forward_1(icall, exch, INTERFACE_DDF_CLIENT, handle, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -215,5 +215,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall, exch, INTERFACE_DDF_DRIVER, fun_handle, 0, IPC_FF_NONE);
+	async_forward_1(icall, exch, INTERFACE_DDF_DRIVER, fun_handle, IPC_FF_NONE);
 	async_exchange_end(exch);
 
@@ -250,5 +250,5 @@
 
 	async_exch_t *exch = async_exchange_begin(driver->sess);
-	async_forward_fast(icall, exch, iface, handle, 0, IPC_FF_NONE);
+	async_forward_1(icall, exch, iface, handle, IPC_FF_NONE);
 	async_exchange_end(exch);
 
Index: uspace/srv/fs/locfs/locfs_ops.c
===================================================================
--- uspace/srv/fs/locfs/locfs_ops.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/fs/locfs/locfs_ops.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -583,5 +583,5 @@
 
 		/* Forward the IPC_M_DATA_READ request to the driver */
-		async_forward_fast(&call, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_0(&call, exch, 0, IPC_FF_ROUTE_FROM_ME);
 
 		async_exchange_end(exch);
@@ -647,5 +647,5 @@
 
 		/* Forward the IPC_M_DATA_WRITE request to the driver */
-		async_forward_fast(&call, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
+		async_forward_0(&call, exch, 0, IPC_FF_ROUTE_FROM_ME);
 
 		async_exchange_end(exch);
Index: uspace/srv/locsrv/locsrv.c
===================================================================
--- uspace/srv/locsrv/locsrv.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/locsrv/locsrv.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -726,5 +726,5 @@
 
 	async_exch_t *exch = async_exchange_begin(svc->server->sess);
-	async_forward_fast(call, exch, iface, svc->id, 0, IPC_FF_NONE);
+	async_forward_1(call, exch, iface, svc->id, IPC_FF_NONE);
 	async_exchange_end(exch);
 
Index: uspace/srv/ns/clonable.c
===================================================================
--- uspace/srv/ns/clonable.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/ns/clonable.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -94,6 +94,6 @@
 
 	async_exch_t *exch = async_exchange_begin(sess);
-	async_forward_fast(&csr->call, exch, csr->iface,
-	    IPC_GET_ARG3(csr->call), 0, IPC_FF_NONE);
+	async_forward_1(&csr->call, exch, csr->iface,
+	    IPC_GET_ARG3(csr->call), IPC_FF_NONE);
 	async_exchange_end(exch);
 
Index: uspace/srv/ns/service.c
===================================================================
--- uspace/srv/ns/service.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/ns/service.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -154,6 +154,5 @@
 {
 	async_exch_t *exch = async_exchange_begin(sess);
-	async_forward_fast(call, exch, iface, IPC_GET_ARG3(*call), 0,
-	    IPC_FF_NONE);
+	async_forward_1(call, exch, iface, IPC_GET_ARG3(*call), IPC_FF_NONE);
 	async_exchange_end(exch);
 }
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision eefdd7c71a49ae7f2ea80c36343e85aebea754e7)
+++ uspace/srv/vfs/vfs_ops.c	(revision 4f13e19af6dd310dbc87a66e115ff6ac62b71bde)
@@ -637,6 +637,6 @@
 
 	async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
-	errno_t rc = async_data_read_forward_fast(exch, VFS_OUT_STAT,
-	    node->service_id, node->index, true, 0, NULL);
+	errno_t rc = async_data_read_forward_3_0(exch, VFS_OUT_STAT,
+	    node->service_id, node->index, true);
 	vfs_exchange_release(exch);
 
@@ -654,6 +654,6 @@
 
 	async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
-	errno_t rc = async_data_read_forward_fast(exch, VFS_OUT_STATFS,
-	    node->service_id, node->index, false, 0, NULL);
+	errno_t rc = async_data_read_forward_3_0(exch, VFS_OUT_STATFS,
+	    node->service_id, node->index, false);
 	vfs_exchange_release(exch);
 
