Index: kernel/generic/include/cap/cap.h
===================================================================
--- kernel/generic/include/cap/cap.h	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/include/cap/cap.h	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -137,4 +137,6 @@
 extern void cap_free(struct task *, cap_handle_t);
 
+extern kobject_t *kobject_alloc(unsigned int);
+extern void kobject_free(kobject_t *);
 extern void kobject_initialize(kobject_t *, kobject_type_t, void *,
     kobject_ops_t *);
Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/src/cap/cap.c	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -93,4 +93,5 @@
 
 static slab_cache_t *cap_cache;
+static slab_cache_t *kobject_cache;
 
 static size_t caps_hash(const ht_link_t *item)
@@ -123,4 +124,6 @@
 	cap_cache = slab_cache_create("cap_t", sizeof(cap_t), 0, NULL,
 	    NULL, 0);
+	kobject_cache = slab_cache_create("kobject_t", sizeof(kobject_t), 0,
+	    NULL, NULL, 0);
 }
 
@@ -394,4 +397,14 @@
 }
 
+kobject_t *kobject_alloc(unsigned int flags)
+{
+	return slab_alloc(kobject_cache, flags);
+}
+
+void kobject_free(kobject_t *kobj)
+{
+	slab_free(kobject_cache, kobj);
+}
+
 /** Initialize kernel object
  *
@@ -462,5 +475,5 @@
 	if (atomic_postdec(&kobj->refcnt) == 1) {
 		kobj->ops->destroy(kobj->raw);
-		free(kobj);
+		kobject_free(kobj);
 	}
 }
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/src/ipc/ipc.c	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -120,5 +120,5 @@
 		return NULL;
 
-	kobject_t *kobj = (kobject_t *) malloc(sizeof(kobject_t));
+	kobject_t *kobj = kobject_alloc(0);
 	if (!kobj) {
 		slab_free(call_cache, call);
Index: kernel/generic/src/ipc/ipcrsc.c
===================================================================
--- kernel/generic/src/ipc/ipcrsc.c	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/src/ipc/ipcrsc.c	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -76,5 +76,5 @@
 			return ENOMEM;
 		}
-		kobject_t *kobj = malloc(sizeof(kobject_t));
+		kobject_t *kobj = kobject_alloc(FRAME_ATOMIC);
 		if (!kobj) {
 			cap_free(TASK, handle);
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/src/ipc/irq.c	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -356,5 +356,5 @@
 	}
 
-	kobject_t *kobject = malloc(sizeof(kobject_t));
+	kobject_t *kobject = kobject_alloc(FRAME_ATOMIC);
 	if (!kobject) {
 		cap_free(TASK, handle);
Index: kernel/generic/src/synch/syswaitq.c
===================================================================
--- kernel/generic/src/synch/syswaitq.c	(revision dd884cb4f1ed5c80d68f90b870325b3d7e0741ce)
+++ kernel/generic/src/synch/syswaitq.c	(revision 33ef2f2419b2f41cb9a1147279e99e224fce6e2e)
@@ -45,5 +45,4 @@
 
 #include <stdint.h>
-#include <stdlib.h>
 
 static slab_cache_t *waitq_cache;
@@ -96,5 +95,5 @@
 	waitq_initialize(wq);
 
-	kobject_t *kobj = (kobject_t *) malloc(sizeof(kobject_t));
+	kobject_t *kobj = kobject_alloc(0);
 	if (!kobj) {
 		slab_free(waitq_cache, wq);
@@ -107,5 +106,5 @@
 	if (rc != EOK) {
 		slab_free(waitq_cache, wq);
-		free(kobj);
+		kobject_free(kobj);
 		return (sys_errno_t) rc;
 	}
@@ -114,5 +113,5 @@
 	if (rc != EOK) {
 		cap_free(TASK, handle);
-		free(kobj);
+		kobject_free(kobj);
 		slab_free(waitq_cache, wq);
 		return (sys_errno_t) rc;
