Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision cfaa35a2627b7c78cd80ef394dfcb862cb582f7b)
+++ kernel/generic/include/ipc/ipc.h	(revision 86939b1cfc4e60d1449f2f92c6a1e36462943230)
@@ -106,4 +106,7 @@
 
 typedef struct {
+	/** Task link. */
+	link_t ta_link;
+
 	/** Answerbox link. */
 	link_t ab_link;
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision cfaa35a2627b7c78cd80ef394dfcb862cb582f7b)
+++ kernel/generic/include/proc/task.h	(revision 86939b1cfc4e60d1449f2f92c6a1e36462943230)
@@ -91,8 +91,24 @@
 	
 	/* IPC stuff */
-	answerbox_t answerbox;  /**< Communication endpoint */
+
+	/** Receiving communication endpoint */
+	answerbox_t answerbox;
+
+	/** Sending communication endpoints */
 	phone_t phones[IPC_MAX_PHONES];
-	stats_ipc_t ipc_info;   /**< IPC statistics */
+
+	/** Spinlock protecting the active_calls list. */
+	SPINLOCK_DECLARE(active_calls_lock);
+
+	/**
+	 * List of all calls sent by this task that have not yet been
+	 * answered.
+	 */
+	list_t active_calls;
+
 	event_t events[EVENT_TASK_END - EVENT_END];
+
+	/** IPC statistics */
+	stats_ipc_t ipc_info;
 	
 #ifdef CONFIG_UDEBUG
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision cfaa35a2627b7c78cd80ef394dfcb862cb582f7b)
+++ kernel/generic/src/ipc/ipc.c	(revision 86939b1cfc4e60d1449f2f92c6a1e36462943230)
@@ -230,4 +230,9 @@
 	call->data.phone = phone;
 	atomic_inc(&phone->active_calls);
+
+	spinlock_lock(&TASK->active_calls_lock);
+	list_append(&call->ta_link, &TASK->active_calls);
+	spinlock_unlock(&TASK->active_calls_lock);
+
 	IPC_SET_RETVAL(call->data, err);
 	_ipc_answer_free_call(call, false);
@@ -250,4 +255,9 @@
 	if (!(call->flags & IPC_CALL_FORWARDED)) {
 		atomic_inc(&phone->active_calls);
+
+		spinlock_lock(&TASK->active_calls_lock);
+		list_append(&call->ta_link, &TASK->active_calls);
+		spinlock_unlock(&TASK->active_calls_lock);
+
 		call->data.phone = phone;
 		call->data.task_id = TASK->taskid;
@@ -419,4 +429,11 @@
 		list_remove(&request->ab_link);
 		atomic_dec(&request->data.phone->active_calls);
+
+		/*
+		 * Remove the call from this task's active call list.
+		 */
+		spinlock_lock(&TASK->active_calls_lock);
+		list_remove(&request->ta_link);
+		spinlock_unlock(&TASK->active_calls_lock);
 	} else if (!list_empty(&box->calls)) {
 		/* Count received call */
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision cfaa35a2627b7c78cd80ef394dfcb862cb582f7b)
+++ kernel/generic/src/proc/task.c	(revision 86939b1cfc4e60d1449f2f92c6a1e36462943230)
@@ -162,4 +162,7 @@
 	for (i = 0; i < IPC_MAX_PHONES; i++)
 		ipc_phone_init(&task->phones[i]);
+
+	spinlock_initialize(&task->active_calls_lock, "active_calls_lock");
+	list_initialize(&task->active_calls);
 	
 #ifdef CONFIG_UDEBUG
