Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision 3f74275b545272926eb993b683eae30e42326ab4)
+++ kernel/generic/src/cap/cap.c	(revision 30c27e95e487a311a88c5e35518a4cd018b0ed7f)
@@ -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;
 }
 
