Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision f39d5c2ee4de3323791f6a8b8dd245a8d5e0befb)
+++ kernel/generic/include/ipc/ipc.h	(revision 5a775507255e91a5b1fa95384f853e5beed2f792)
@@ -141,4 +141,7 @@
 	struct task *sender;
 	
+	/** Phone which was used to send the call. */
+	phone_t *caller_phone;
+	
 	/** Private data to internal IPC. */
 	sysarg_t priv;
@@ -152,11 +155,4 @@
 	/** Buffer for IPC_M_DATA_WRITE and IPC_M_DATA_READ. */
 	uint8_t *buffer;
-	
-	/*
-	 * The forward operation can masquerade the caller phone. For those
-	 * cases, we must keep it aside so that the answer is processed
-	 * correctly.
-	 */
-	phone_t *caller_phone;
 } call_t;
 
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision f39d5c2ee4de3323791f6a8b8dd245a8d5e0befb)
+++ kernel/generic/src/ipc/ipc.c	(revision 5a775507255e91a5b1fa95384f853e5beed2f792)
@@ -165,14 +165,4 @@
 }
 
-/** Demasquerade the caller phone. */
-static void ipc_caller_phone_demasquerade(call_t *call)
-{
-	if (call->flags & IPC_CALL_FORWARDED) {
-		if (call->caller_phone) {
-			call->data.phone = call->caller_phone;
-		}
-	}
-}
-
 /** Answer a message which was not dispatched and is not listed in any queue.
  *
@@ -213,6 +203,4 @@
 	call->flags |= IPC_CALL_ANSWERED;
 	
-	ipc_caller_phone_demasquerade(call);
-
 	call->data.task_id = TASK->taskid;
 	
@@ -257,4 +245,5 @@
 void ipc_backsend_err(phone_t *phone, call_t *call, sysarg_t err)
 {
+	call->caller_phone = phone;
 	call->data.phone = phone;
 	atomic_inc(&phone->active_calls);
@@ -285,4 +274,5 @@
 		atomic_inc(&phone->active_calls);
 
+		call->caller_phone = phone;
 		call->active = true;
 
@@ -401,6 +391,4 @@
 	
 	if (mode & IPC_FF_ROUTE_FROM_ME) {
-		if (!call->caller_phone)
-			call->caller_phone = call->data.phone;
 		call->data.phone = newphone;
 		call->data.task_id = TASK->taskid;
@@ -459,5 +447,5 @@
 		    call_t, ab_link);
 		list_remove(&request->ab_link);
-		atomic_dec(&request->data.phone->active_calls);
+		atomic_dec(&request->caller_phone->active_calls);
 	} else if (!list_empty(&box->calls)) {
 		/* Count received call */
@@ -605,9 +593,8 @@
 	list_remove(&call->ta_link);
 
-	ipc_caller_phone_demasquerade(call);
-	atomic_dec(&call->data.phone->active_calls);
-
 	spinlock_unlock(&call->forget_lock);
 	spinlock_unlock(&TASK->active_calls_lock);
+
+	atomic_dec(&call->caller_phone->active_calls);
 
 	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
