Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 4cd7fd0713fc8a65f5878a0fdb8fdc5ed84c41df)
+++ kernel/generic/src/ipc/sysipc.c	(revision 95a30824096771c7746ed932641426c7db8ddc13)
@@ -412,21 +412,24 @@
 {
 	call_t *call = get_call(callid);
+	bool need_old;
+	int rc;
+
 	if (!call)
 		return ENOENT;
-	
-	call->flags |= IPC_CALL_FORWARDED;
 	
 	phone_t *phone;
 	if (phone_get(phoneid, &phone) != EOK) {
 		IPC_SET_RETVAL(call->data, EFORWARD);
-		ipc_answer(&TASK->answerbox, call);
-		return ENOENT;
+		rc = ENOENT;
+		goto error;
 	}
 	
 	if (!method_is_forwardable(IPC_GET_IMETHOD(call->data))) {
 		IPC_SET_RETVAL(call->data, EFORWARD);
-		ipc_answer(&TASK->answerbox, call);
-		return EPERM;
-	}
+		rc = EPERM;
+		goto error;
+	}
+
+	call->flags |= IPC_CALL_FORWARDED;
 	
 	/*
@@ -465,4 +468,15 @@
 	
 	return ipc_forward(call, phone, &TASK->answerbox, mode);
+
+error:
+	need_old = answer_need_old(call);
+	ipc_data_t old;
+
+	if (need_old)
+		old = call->data;
+
+	answer_preprocess(call, need_old ? &old : NULL);
+	ipc_answer(&TASK->answerbox, call);
+	return rc;
 }
 
