Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision 3f74275b545272926eb993b683eae30e42326ab4)
+++ kernel/generic/src/cap/cap.c	(revision e68765ee99cd285c57aa4a30d7ac3dfd1598259c)
@@ -39,7 +39,8 @@
 #include <mm/slab.h>
 
-void cap_initialize(cap_t *cap)
+void cap_initialize(cap_t *cap, int handle)
 {
 	cap->type = CAP_TYPE_INVALID;
+	cap->handle = handle;
 	cap->can_reclaim = NULL;
 }
@@ -53,5 +54,5 @@
 {
 	for (int i = 0; i < MAX_CAPS; i++)
-		cap_initialize(&task->caps[i]);
+		cap_initialize(&task->caps[i], i);
 }
 
@@ -84,5 +85,5 @@
 		if (cap->type > CAP_TYPE_ALLOCATED) {
 			if (cap->can_reclaim && cap->can_reclaim(cap))
-				cap_initialize(cap);
+				cap_initialize(cap, handle);
 		}
 		if (cap->type == CAP_TYPE_INVALID) {
@@ -104,11 +105,6 @@
 
 	irq_spinlock_lock(&task->lock, true);
-	cap_initialize(&task->caps[handle]);
+	cap_initialize(&task->caps[handle], handle);
 	irq_spinlock_unlock(&task->lock, true);
-}
-
-int cap_get_handle(task_t *task, cap_t *cap)
-{
-	return cap - task->caps;
 }
 
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 3f74275b545272926eb993b683eae30e42326ab4)
+++ kernel/generic/src/ipc/ipc.c	(revision e68765ee99cd285c57aa4a30d7ac3dfd1598259c)
@@ -913,13 +913,12 @@
 	for_each_cap(task, cap, CAP_TYPE_PHONE) {
 		phone_t *phone = &cap->phone;
-		int cap_handle = cap_get_handle(task, cap);
 	
 		if (SYNCH_FAILED(mutex_trylock(&phone->lock))) {
-			printf("%-11d (mutex busy)\n", cap_handle);
+			printf("%-11d (mutex busy)\n", cap->handle);
 			continue;
 		}
 		
 		if (phone->state != IPC_PHONE_FREE) {
-			printf("%-11d %7" PRIun " ", cap_handle,
+			printf("%-11d %7" PRIun " ", cap->handle,
 			    atomic_get(&phone->active_calls));
 			
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 3f74275b545272926eb993b683eae30e42326ab4)
+++ kernel/generic/src/proc/task.c	(revision e68765ee99cd285c57aa4a30d7ac3dfd1598259c)
@@ -627,6 +627,5 @@
 			phone_t *phone = &cap->phone;
 			if (phone->callee)
-				printf(" %d:%p", cap_get_handle(task, cap),
-				    phone->callee);
+				printf(" %d:%p", cap->handle, phone->callee);
 		}
 		printf("\n");
