Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision b74959bd4f5b3c25215165e16f18a594cc56d741)
+++ kernel/generic/src/ipc/sysipc.c	(revision 8498915fcb2cf4aa2a0cc399866d4191c963b740)
@@ -378,4 +378,10 @@
 	IPC_SET_ARG2(call.data, arg2);
 	IPC_SET_ARG3(call.data, arg3);
+	/*
+	 * To achieve deterministic behavior, zero out arguments that are beyond
+	 * the limits of the fast version.
+	 */
+	IPC_SET_ARG4(call.data, 0);
+	IPC_SET_ARG5(call.data, 0);
 
 	if (!(res = request_preprocess(&call))) {
@@ -478,4 +484,9 @@
 	IPC_SET_ARG3(call->data, arg3);
 	IPC_SET_ARG4(call->data, arg4);
+	/*
+	 * To achieve deterministic behavior, zero out arguments that are beyond
+	 * the limits of the fast version.
+	 */
+	IPC_SET_ARG5(call->data, 0);
 
 	if (!(res = request_preprocess(call)))
@@ -624,4 +635,9 @@
 	IPC_SET_ARG3(call->data, arg3);
 	IPC_SET_ARG4(call->data, arg4);
+	/*
+	 * To achieve deterministic behavior, zero out arguments that are beyond
+	 * the limits of the fast version.
+	 */
+	IPC_SET_ARG5(call->data, 0);
 	rc = answer_preprocess(call, saveddata ? &saved_data : NULL);
 
Index: uspace/lib/libc/generic/ipc.c
===================================================================
--- uspace/lib/libc/generic/ipc.c	(revision b74959bd4f5b3c25215165e16f18a594cc56d741)
+++ uspace/lib/libc/generic/ipc.c	(revision 8498915fcb2cf4aa2a0cc399866d4191c963b740)
@@ -321,4 +321,9 @@
 		IPC_SET_ARG3(call->u.msg.data, arg3);
 		IPC_SET_ARG4(call->u.msg.data, arg4);
+		/*
+		 * To achieve deterministic behavior, we always zero out the
+		 * arguments that are beyond the limits of the fast version.
+		 */
+		IPC_SET_ARG5(call->u.msg.data, 0);
 	}
 	ipc_finish_async(callid, phoneid, call, can_preempt);
@@ -436,5 +441,6 @@
 	while (!list_empty(&queued_calls)) {
 		call = list_get_instance(queued_calls.next, async_call_t, list);
-		callid = _ipc_call_async(call->u.msg.phoneid, &call->u.msg.data);
+		callid = _ipc_call_async(call->u.msg.phoneid,
+		    &call->u.msg.data);
 		if (callid == IPC_CALLRET_TEMPORARY) {
 			break;
@@ -646,7 +652,9 @@
  * For non-system methods, the old method and arg1 are rewritten by the new
  * values. For system methods, the new method and arg1 are written to the old
- * arg1 and arg2, respectivelly.
- */
-int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1)
+ * arg1 and arg2, respectivelly. Calls with immutable methods are forwarded
+ * verbatim.
+ */
+int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method,
+    ipcarg_t arg1)
 {
 	return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1);
