Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ kernel/generic/include/ipc/ipc.h	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -98,4 +98,7 @@
 #define PHONE_NS	0
 
+/* Forwarding flags. */
+#define IPC_FF_NONE		0
+
 /* System-specific methods - only through special syscalls
  * These methods have special behaviour
@@ -276,5 +279,6 @@
 extern void ipc_call_static_init(call_t *call);
 extern void task_print_list(void);
-extern int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox);
+extern int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox,
+    int mode);
 extern void ipc_cleanup(void);
 extern int ipc_phone_hangup(phone_t *phone);
Index: kernel/generic/include/ipc/sysipc.h
===================================================================
--- kernel/generic/include/ipc/sysipc.h	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ kernel/generic/include/ipc/sysipc.h	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -53,5 +53,5 @@
     int nonblocking);
 unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid,
-    unative_t method, unative_t arg1);
+    unative_t method, unative_t arg1, int mode);
 unative_t sys_ipc_hangup(int phoneid);
 unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method,
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ kernel/generic/src/ipc/ipc.c	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -330,4 +330,5 @@
  * @param newphone	Phone structure to target answerbox.
  * @param oldbox	Old answerbox structure.
+ * @param mode		Flags that specify mode of the forward operation.
  *
  * @return		Return 0 if forwarding succeeded or an error code if
@@ -337,5 +338,5 @@
  * the original caller is notified automatically with EFORWARD.
  */
-int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox)
+int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox, int mode)
 {
 	spinlock_lock(&oldbox->lock);
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ kernel/generic/src/ipc/sysipc.c	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -538,4 +538,5 @@
  * @param method	New method to use for the forwarded call.
  * @param arg1		New value of the first argument for the forwarded call.
+ * @param mode		Flags that specify mode of the forward operation.
  *
  * @return		Return 0 on succes, otherwise return an error code.
@@ -547,9 +548,10 @@
  * new method and argument is not set and these values are ignored.
  *
- * Warning: If implementing non-fast version, make sure that
- *          ARG3 is not rewritten for certain system IPC
+ * Warning:	When implementing support for changing additional payload
+ *		arguments, make sure that ARG3 is not rewritten for certain
+ *		system IPC
  */
 unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid,
-    unative_t method, unative_t arg1)
+    unative_t method, unative_t arg1, int mode)
 {
 	call_t *call;
@@ -592,5 +594,5 @@
 	}
 
-	return ipc_forward(call, phone, &TASK->answerbox);
+	return ipc_forward(call, phone, &TASK->answerbox, mode);
 }
 
Index: uspace/lib/libc/generic/ipc.c
===================================================================
--- uspace/lib/libc/generic/ipc.c	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ uspace/lib/libc/generic/ipc.c	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -647,4 +647,5 @@
  * @param method	New method for the forwarded call.
  * @param arg1		New value of the first argument for the forwarded call.
+ * @param mode		Flags specifying mode of the forward operation.
  *
  * @return		Zero on success or an error code.
@@ -656,7 +657,8 @@
  */
 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);
+    ipcarg_t arg1, int mode)
+{
+	return __SYSCALL5(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1,
+	    mode);
 }
 
Index: uspace/lib/libc/include/ipc/ipc.h
===================================================================
--- uspace/lib/libc/include/ipc/ipc.h	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ uspace/lib/libc/include/ipc/ipc.h	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -259,5 +259,5 @@
 extern int ipc_unregister_irq(int inr, int devno);
 extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method,
-    ipcarg_t arg1);
+    ipcarg_t arg1, int mode);
 extern int ipc_data_send(int phoneid, void *src, size_t size);
 extern int ipc_data_receive(ipc_callid_t *callid, void **dst, size_t *size);
Index: uspace/srv/devmap/devmap.c
===================================================================
--- uspace/srv/devmap/devmap.c	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ uspace/srv/devmap/devmap.c	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -472,5 +472,5 @@
 	/* FIXME: is this correct method how to pass argument on forwarding ?*/
 	ipc_forward_fast(callid, dev->driver->phone, (ipcarg_t)(dev->handle),
-	    0);
+	    0, IPC_FF_NONE);
 	return;
 }
Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 0cc43137360df84474b0c4424e7571bdd7031787)
+++ uspace/srv/ns/ns.c	(revision d40a8ffa6b8ec244d5fe541f890ee182cc6727a9)
@@ -213,5 +213,6 @@
 	}
 	hs = hash_table_get_instance(hlp, hashed_service_t, link);
-	return ipc_forward_fast(callid, hs->phone, IPC_GET_ARG2(*call), 0);
+	return ipc_forward_fast(callid, hs->phone, IPC_GET_ARG2(*call), 0,
+	    IPC_FF_NONE);
 }
 
