Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision d99c1d2ba8c7b2c687d430f2e9fd237046606545)
+++ kernel/generic/src/ipc/ipc.c	(revision bdfd3c978d7f3378bdc591ff4fe153a17d5c2ea3)
@@ -219,4 +219,8 @@
 	bool do_lock = ((!selflocked) || callerbox != (&TASK->answerbox));
 
+	spinlock_lock(&TASK->lock);
+	TASK->ipc_info.answer_sent++;
+	spinlock_unlock(&TASK->lock);
+
 	call->flags |= IPC_CALL_ANSWERED;
 
@@ -276,4 +280,8 @@
 static void _ipc_call(phone_t *phone, answerbox_t *box, call_t *call)
 {
+	spinlock_lock(&TASK->lock);
+	TASK->ipc_info.call_sent++;
+	spinlock_unlock(&TASK->lock);
+
 	if (!(call->flags & IPC_CALL_FORWARDED)) {
 		atomic_inc(&phone->active_calls);
@@ -376,4 +384,8 @@
 int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox, int mode)
 {
+	spinlock_lock(&TASK->lock);
+	TASK->ipc_info.forwarded++;
+	spinlock_unlock(&TASK->lock);
+
 	spinlock_lock(&oldbox->lock);
 	list_remove(&call->link);
@@ -416,4 +428,9 @@
 	spinlock_lock(&box->lock);
 	if (!list_empty(&box->irq_notifs)) {
+
+		spinlock_lock(&TASK->lock);
+		TASK->ipc_info.irq_notif_recieved++;
+		spinlock_unlock(&TASK->lock);
+
 		ipl = interrupts_disable();
 		spinlock_lock(&box->irq_lock);
@@ -425,4 +442,8 @@
 		interrupts_restore(ipl);
 	} else if (!list_empty(&box->answers)) {
+		spinlock_lock(&TASK->lock);
+		TASK->ipc_info.answer_recieved++;
+		spinlock_unlock(&TASK->lock);
+
 		/* Handle asynchronous answers */
 		request = list_get_instance(box->answers.next, call_t, link);
@@ -430,4 +451,9 @@
 		atomic_dec(&request->data.phone->active_calls);
 	} else if (!list_empty(&box->calls)) {
+
+		spinlock_lock(&TASK->lock);
+		TASK->ipc_info.call_recieved++;
+		spinlock_unlock(&TASK->lock);
+
 		/* Handle requests */
 		request = list_get_instance(box->calls.next, call_t, link);
