Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision c97b086863698061db8b61eda0502d65fc6091e2)
+++ kernel/generic/src/ipc/ipc.c	(revision 03a8a8e368c4f45bcf4052f070b0a6cbabbdcec0)
@@ -76,5 +76,5 @@
 	call->active = false;
 	call->forget = false;
-	call->sender = TASK;
+	call->sender = NULL;
 	call->buffer = NULL;
 }
@@ -175,9 +175,11 @@
  *
  * @param phone Phone structure to be initialized.
- *
- */
-void ipc_phone_init(phone_t *phone)
+ * @param caller Owning task.
+ *
+ */
+void ipc_phone_init(phone_t *phone, task_t *caller)
 {
 	mutex_initialize(&phone->lock, MUTEX_PASSIVE);
+	phone->caller = caller;
 	phone->callee = NULL;
 	phone->state = IPC_PHONE_FREE;
@@ -265,11 +267,14 @@
 void ipc_backsend_err(phone_t *phone, call_t *call, sysarg_t err)
 {
+	task_t *caller = phone->caller;
+
 	atomic_inc(&phone->active_calls);
 	call->caller_phone = phone;
+	call->sender = caller;
 
 	call->active = true;
-	spinlock_lock(&TASK->active_calls_lock);
-	list_append(&call->ta_link, &TASK->active_calls);
-	spinlock_unlock(&TASK->active_calls_lock);
+	spinlock_lock(&caller->active_calls_lock);
+	list_append(&call->ta_link, &caller->active_calls);
+	spinlock_unlock(&caller->active_calls_lock);
 
 	call->data.phone = phone;
@@ -288,20 +293,23 @@
 static void _ipc_call(phone_t *phone, answerbox_t *box, call_t *call)
 {
+	task_t *caller = phone->caller;
+
 	/* Count sent ipc call */
-	irq_spinlock_lock(&TASK->lock, true);
-	TASK->ipc_info.call_sent++;
-	irq_spinlock_unlock(&TASK->lock, true);
+	irq_spinlock_lock(&caller->lock, true);
+	caller->ipc_info.call_sent++;
+	irq_spinlock_unlock(&caller->lock, true);
 	
 	if (!(call->flags & IPC_CALL_FORWARDED)) {
 		atomic_inc(&phone->active_calls);
 		call->caller_phone = phone;
+		call->sender = caller;
 
 		call->active = true;
-		spinlock_lock(&TASK->active_calls_lock);
-		list_append(&call->ta_link, &TASK->active_calls);
-		spinlock_unlock(&TASK->active_calls_lock);
+		spinlock_lock(&caller->active_calls_lock);
+		list_append(&call->ta_link, &caller->active_calls);
+		spinlock_unlock(&caller->active_calls_lock);
 
 		call->data.phone = phone;
-		call->data.task_id = TASK->taskid;
+		call->data.task_id = phone->caller->taskid;
 	}
 	
@@ -559,6 +567,4 @@
 			// FIXME: phone can become deallocated at any time now
 
-			// FIXME: call->sender == TASK
-			
 			/*
 			 * Send one message to the answerbox for each
Index: kernel/generic/src/ipc/kbox.c
===================================================================
--- kernel/generic/src/ipc/kbox.c	(revision c97b086863698061db8b61eda0502d65fc6091e2)
+++ kernel/generic/src/ipc/kbox.c	(revision 03a8a8e368c4f45bcf4052f070b0a6cbabbdcec0)
@@ -168,5 +168,5 @@
 	while (!done) {
 		call_t *call = ipc_wait_for_call(&TASK->kb.box, SYNCH_NO_TIMEOUT,
-			SYNCH_FLAGS_NONE);
+		    SYNCH_FLAGS_NONE);
 		
 		if (call == NULL)
