Index: kernel/generic/include/ipc/sysipc.h
===================================================================
--- kernel/generic/include/ipc/sysipc.h	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ kernel/generic/include/ipc/sysipc.h	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -45,6 +45,6 @@
     ipc_data_t *reply);
 unative_t sys_ipc_call_async_fast(unative_t phoneid, unative_t method, 
-    unative_t arg1, unative_t arg2);
-unative_t sys_ipc_call_async(unative_t phoneid, ipc_data_t *data);
+    unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4);
+unative_t sys_ipc_call_async_slow(unative_t phoneid, ipc_data_t *data);
 unative_t sys_ipc_answer_fast(unative_t callid, unative_t retval, 
     unative_t arg1, unative_t arg2);
Index: kernel/generic/include/syscall/syscall.h
===================================================================
--- kernel/generic/include/syscall/syscall.h	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ kernel/generic/include/syscall/syscall.h	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -51,5 +51,5 @@
 	SYS_IPC_CALL_SYNC_SLOW,
 	SYS_IPC_CALL_ASYNC_FAST,
-	SYS_IPC_CALL_ASYNC,
+	SYS_IPC_CALL_ASYNC_SLOW,
 	SYS_IPC_ANSWER_FAST,
 	SYS_IPC_ANSWER,
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ kernel/generic/src/ipc/sysipc.c	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -445,6 +445,6 @@
 /** Make a fast asynchronous call over IPC.
  *
- * This function can only handle two arguments of payload, but is faster than
- * the generic function sys_ipc_call_async().
+ * This function can only handle four arguments of payload, but is faster than
+ * the generic function sys_ipc_call_async_slow().
  *
  * @param phoneid	Phone handle for the call.
@@ -452,4 +452,6 @@
  * @param arg1		Service-defined payload argument.
  * @param arg2		Service-defined payload argument.
+ * @param arg3		Service-defined payload argument.
+ * @param arg4		Service-defined payload argument.
  *
  * @return 		Return call hash on success.
@@ -459,5 +461,5 @@
  */
 unative_t sys_ipc_call_async_fast(unative_t phoneid, unative_t method,
-    unative_t arg1, unative_t arg2)
+    unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4)
 {
 	call_t *call;
@@ -474,5 +476,6 @@
 	IPC_SET_ARG1(call->data, arg1);
 	IPC_SET_ARG2(call->data, arg2);
-	IPC_SET_ARG3(call->data, 0);
+	IPC_SET_ARG3(call->data, arg3);
+	IPC_SET_ARG4(call->data, arg4);
 
 	if (!(res = request_preprocess(call)))
@@ -491,5 +494,5 @@
  * @return		See sys_ipc_call_async_fast(). 
  */
-unative_t sys_ipc_call_async(unative_t phoneid, ipc_data_t *data)
+unative_t sys_ipc_call_async_slow(unative_t phoneid, ipc_data_t *data)
 {
 	call_t *call;
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ kernel/generic/src/syscall/syscall.c	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -136,5 +136,5 @@
 	(syshandler_t) sys_ipc_call_sync_slow,
 	(syshandler_t) sys_ipc_call_async_fast,
-	(syshandler_t) sys_ipc_call_async,
+	(syshandler_t) sys_ipc_call_async_slow,
 	(syshandler_t) sys_ipc_answer_fast,
 	(syshandler_t) sys_ipc_answer,
Index: uspace/app/tester/ipc/send_async.c
===================================================================
--- uspace/app/tester/ipc/send_async.c	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ uspace/app/tester/ipc/send_async.c	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -49,5 +49,5 @@
 	phoneid = c - '0';
 
-	ipc_call_async(phoneid, 2000, 0, (void *) msgid, callback, 1);
+	ipc_call_async_0(phoneid, 2000, (void *) msgid, callback, 1);
 	printf("Async sent - msg %d\n", msgid);
 	msgid++;
Index: uspace/lib/libc/generic/ipc.c
===================================================================
--- uspace/lib/libc/generic/ipc.c	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ uspace/lib/libc/generic/ipc.c	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -190,5 +190,5 @@
 static ipc_callid_t _ipc_call_async(int phoneid, ipc_call_t *data)
 {
-	return __SYSCALL2(SYS_IPC_CALL_ASYNC, phoneid, (sysarg_t) data);
+	return __SYSCALL2(SYS_IPC_CALL_ASYNC_SLOW, phoneid, (sysarg_t) data);
 }
 
@@ -269,6 +269,6 @@
 /** Make a fast asynchronous call.
  *
- * This function can only handle two arguments of payload. It is, however,
- * faster than the more generic ipc_call_async_3().
+ * This function can only handle four arguments of payload. It is, however,
+ * faster than the more generic ipc_call_async_slow().
  *
  * Note that this function is a void function.
@@ -281,4 +281,6 @@
  * @param arg1		Service-defined payload argument.
  * @param arg2		Service-defined payload argument.
+ * @param arg3		Service-defined payload argument.
+ * @param arg4		Service-defined payload argument.
  * @param private	Argument to be passed to the answer/error callback.
  * @param callback	Answer or error callback.
@@ -287,7 +289,7 @@
  *			asynchronous calls.
  */
-void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
-    int can_preempt)
+void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private,
+    ipc_async_callback_t callback, int can_preempt)
 {
 	async_call_t *call = NULL;
@@ -305,6 +307,6 @@
 	 */
 	futex_down(&ipc_futex);
-	callid = __SYSCALL4(SYS_IPC_CALL_ASYNC_FAST, phoneid, method, arg1,
-	    arg2);
+	callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid, method, arg1,
+	    arg2, arg3, arg4);
 
 	if (callid == IPC_CALLRET_TEMPORARY) {
@@ -317,4 +319,6 @@
 		IPC_SET_ARG1(call->u.msg.data, arg1);
 		IPC_SET_ARG2(call->u.msg.data, arg2);
+		IPC_SET_ARG3(call->u.msg.data, arg3);
+		IPC_SET_ARG4(call->u.msg.data, arg4);
 	}
 	ipc_finish_async(callid, phoneid, call, can_preempt);
@@ -333,4 +337,6 @@
  * @param arg2		Service-defined payload argument.
  * @param arg3		Service-defined payload argument.
+ * @param arg4		Service-defined payload argument.
+ * @param arg5		Service-defined payload argument.
  * @param private	Argument to be passed to the answer/error callback.
  * @param callback	Answer or error callback.
@@ -340,7 +346,7 @@
  *
  */
-void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
-    int can_preempt)
+void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private,
+    ipc_async_callback_t callback, int can_preempt)
 {
 	async_call_t *call;
@@ -355,7 +361,9 @@
 	IPC_SET_ARG2(call->u.msg.data, arg2);
 	IPC_SET_ARG3(call->u.msg.data, arg3);
+	IPC_SET_ARG4(call->u.msg.data, arg4);
+	IPC_SET_ARG5(call->u.msg.data, arg5);
 	/*
-	 * We need to make sure that we get callid before another thread accesses
-	 * the queue again.
+	 * We need to make sure that we get callid before another thread
+	 * accesses the queue again.
 	 */
 	futex_down(&ipc_futex);
Index: uspace/lib/libc/include/ipc/ipc.h
===================================================================
--- uspace/lib/libc/include/ipc/ipc.h	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ uspace/lib/libc/include/ipc/ipc.h	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -38,5 +38,4 @@
 #include <kernel/ipc/ipc.h>
 #include <kernel/ddi/irq.h>
-#include <libc.h>
 #include <sys/types.h>
 #include <kernel/synch/synch.h>
@@ -184,5 +183,4 @@
     ipcarg_t *result5);
 
-
 extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags);
 extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec);
@@ -194,19 +192,48 @@
 
 #define ipc_answer_fast_0(callid, retval) \
-	ipc_answer_fast((callid), (retval), 0, 0)
+    ipc_answer_fast((callid), (retval), 0, 0)
 #define ipc_answer_fast_1(callid, retval, arg1) \
-	ipc_answer_fast((callid), (retval), (arg1), 0)
+    ipc_answer_fast((callid), (retval), (arg1), 0)
 extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval,
     ipcarg_t arg1, ipcarg_t arg2);
 extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call);
 
-#define ipc_call_async(phoneid, method, arg1, private, callback, can_preempt) \
-    (ipc_call_async_2(phoneid, method, arg1, 0, private, callback, can_preempt))
-extern void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
-    int can_preempt);
-extern void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
-    int can_preempt);
+/*
+ * User-friendly wrappers for ipc_call_async_fast() and ipc_call_async_slow().
+ * They are in the form of ipc_call_async_m(), where m is the number of payload
+ * arguments. The macros decide between the fast and the slow version according
+ * to m.
+ */
+#define ipc_call_async_0(phoneid, method, private, callback, \
+    can_preempt) \
+	ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \
+	    (callback), (can_preempt))
+#define ipc_call_async_1(phoneid, method, arg1, private, callback, \
+    can_preempt) \
+	ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \
+	    (callback), (can_preempt))
+#define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback, \
+    can_preempt) \
+	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), 0, 0, \
+	    (private), (callback), (can_preempt))
+#define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback, \
+    can_preempt) \
+	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \
+	    (private), (callback), (can_preempt))
+#define ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, private, \
+    callback, can_preempt) \
+	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), \
+	    (arg4), (private), (callback), (can_preempt))
+#define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \
+    private, callback, can_preempt) \
+	ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \
+	    (arg4), (arg5), (private), (callback), (can_preempt))
+
+extern void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private,
+    ipc_async_callback_t callback, int can_preempt);
+extern void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private,
+    ipc_async_callback_t callback, int can_preempt);
 
 extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phone);
Index: uspace/srv/console/console.c
===================================================================
--- uspace/srv/console/console.c	(revision bc50fc42c6550ecdf5e89f83b811c2db9ff38684)
+++ uspace/srv/console/console.c	(revision 32099239a6124d59220f89570e99659141d22ed7)
@@ -33,7 +33,5 @@
  */
 
-/* TODO: remove */
-#include <stdio.h>
-
+#include <libc.h>
 #include <fb.h>
 #include <ipc/ipc.h>
