Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision 9675296fe33ff287a6d2d86321c97dbd34619703)
+++ kernel/generic/src/cap/cap.c	(revision fc65b8760fae24da9071307235240d5c2290731b)
@@ -83,4 +83,8 @@
 #include <mm/slab.h>
 #include <adt/list.h>
+#include <synch/syswaitq.h>
+#include <ipc/ipcrsc.h>
+#include <ipc/ipc.h>
+#include <ipc/irq.h>
 
 #include <limits.h>
@@ -94,4 +98,11 @@
 static slab_cache_t *cap_cache;
 static slab_cache_t *kobject_cache;
+
+kobject_ops_t *kobject_ops[KOBJECT_TYPE_MAX] = {
+	[KOBJECT_TYPE_CALL] = &call_kobject_ops,
+	[KOBJECT_TYPE_IRQ] = &irq_kobject_ops,
+	[KOBJECT_TYPE_PHONE] = &phone_kobject_ops,
+	[KOBJECT_TYPE_WAITQ] = &waitq_kobject_ops
+};
 
 static size_t caps_hash(const ht_link_t *item)
@@ -412,8 +423,6 @@
  * @param type  Type of the kernel object.
  * @param raw   Raw pointer to the encapsulated object.
- * @param ops   Pointer to kernel object operations for the respective type.
- */
-void kobject_initialize(kobject_t *kobj, kobject_type_t type, void *raw,
-    kobject_ops_t *ops)
+ */
+void kobject_initialize(kobject_t *kobj, kobject_type_t type, void *raw)
 {
 	atomic_store(&kobj->refcnt, 1);
@@ -424,5 +433,4 @@
 	kobj->type = type;
 	kobj->raw = raw;
-	kobj->ops = ops;
 }
 
@@ -474,5 +482,5 @@
 {
 	if (atomic_postdec(&kobj->refcnt) == 1) {
-		kobj->ops->destroy(kobj->raw);
+		KOBJECT_OP(kobj)->destroy(kobj->raw);
 		kobject_free(kobj);
 	}
