Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 88dea9d01a9bc5e8482c1ceafa6e6531ac50cb4f)
+++ kernel/generic/src/ipc/ipc.c	(revision d69f959d2337abd30f567ea2dd4e53e341f79af1)
@@ -422,4 +422,7 @@
 	call_t *request;
 	ipl_t ipl;
+	uint64_t irq_cnt = 0;
+	uint64_t answer_cnt = 0;
+	uint64_t call_cnt = 0;
 	int rc;
 
@@ -431,9 +434,6 @@
 	spinlock_lock(&box->lock);
 	if (!list_empty(&box->irq_notifs)) {
-
 		/* Count recieved IRQ notification */
-		spinlock_lock(&TASK->lock);
-		TASK->ipc_info.irq_notif_recieved++;
-		spinlock_unlock(&TASK->lock);
+		irq_cnt++;	
 
 		ipl = interrupts_disable();
@@ -447,7 +447,5 @@
 	} else if (!list_empty(&box->answers)) {
 		/* Count recieved answer */
-		spinlock_lock(&TASK->lock);
-		TASK->ipc_info.answer_recieved++;
-		spinlock_unlock(&TASK->lock);
+		answer_cnt++;
 
 		/* Handle asynchronous answers */
@@ -457,7 +455,5 @@
 	} else if (!list_empty(&box->calls)) {
 		/* Count recieved call */
-		spinlock_lock(&TASK->lock);
-		TASK->ipc_info.call_recieved++;
-		spinlock_unlock(&TASK->lock);
+		call_cnt++;
 
 		/* Handle requests */
@@ -472,4 +468,13 @@
 	}
 	spinlock_unlock(&box->lock);
+	
+	ipl = interrupts_disable();
+	spinlock_lock(&TASK->lock);
+	TASK->ipc_info.irq_notif_recieved += irq_cnt;
+	TASK->ipc_info.answer_recieved += answer_cnt;
+	TASK->ipc_info.call_recieved += call_cnt;
+	spinlock_unlock(&TASK->lock);
+	interrupts_restore(ipl);
+
 	return request;
 }
