Index: kernel/generic/src/synch/syswaitq.c
===================================================================
--- kernel/generic/src/synch/syswaitq.c	(revision df721df422cfb20304ab89fc1a3e626084a124f3)
+++ kernel/generic/src/synch/syswaitq.c	(revision 2df21755623b239a0d57f0639a0bfcf636cd3d5b)
@@ -48,12 +48,17 @@
 static slab_cache_t *waitq_cache;
 
-static void waitq_destroy(void *arg)
+typedef struct {
+	kobject_t kobject;
+	waitq_t waitq;
+} waitq_kobject_t;
+
+static void waitq_destroy(kobject_t *arg)
 {
-	waitq_t *wq = (waitq_t *) arg;
+	waitq_kobject_t *wq = (waitq_kobject_t *) arg;
 	slab_free(waitq_cache, wq);
 }
 
 kobject_ops_t waitq_kobject_ops = {
-	.destroy = waitq_destroy
+	.destroy = waitq_destroy,
 };
 
@@ -61,6 +66,6 @@
 void sys_waitq_init(void)
 {
-	waitq_cache = slab_cache_create("waitq_t", sizeof(waitq_t), 0, NULL,
-	    NULL, 0);
+	waitq_cache = slab_cache_create("syswaitq_t", sizeof(waitq_kobject_t),
+	    0, NULL, NULL, 0);
 }
 
@@ -74,21 +79,15 @@
 sys_errno_t sys_waitq_create(uspace_ptr_cap_waitq_handle_t whandle)
 {
-	waitq_t *wq = slab_alloc(waitq_cache, FRAME_ATOMIC);
-	if (!wq)
+	waitq_kobject_t *kobj = slab_alloc(waitq_cache, FRAME_ATOMIC);
+	if (!kobj)
 		return (sys_errno_t) ENOMEM;
-	waitq_initialize(wq);
 
-	kobject_t *kobj = kobject_alloc(0);
-	if (!kobj) {
-		slab_free(waitq_cache, wq);
-		return (sys_errno_t) ENOMEM;
-	}
-	kobject_initialize(kobj, KOBJECT_TYPE_WAITQ, wq);
+	kobject_initialize(&kobj->kobject, KOBJECT_TYPE_WAITQ);
+	waitq_initialize(&kobj->waitq);
 
 	cap_handle_t handle;
 	errno_t rc = cap_alloc(TASK, &handle);
 	if (rc != EOK) {
-		slab_free(waitq_cache, wq);
-		kobject_free(kobj);
+		slab_free(waitq_cache, kobj);
 		return (sys_errno_t) rc;
 	}
@@ -97,10 +96,9 @@
 	if (rc != EOK) {
 		cap_free(TASK, handle);
-		kobject_free(kobj);
-		slab_free(waitq_cache, wq);
+		slab_free(waitq_cache, kobj);
 		return (sys_errno_t) rc;
 	}
 
-	cap_publish(TASK, handle, kobj);
+	cap_publish(TASK, handle, &kobj->kobject);
 
 	return (sys_errno_t) EOK;
@@ -135,5 +133,6 @@
     unsigned int flags)
 {
-	kobject_t *kobj = kobject_get(TASK, whandle, KOBJECT_TYPE_WAITQ);
+	waitq_kobject_t *kobj =
+	    (waitq_kobject_t *) kobject_get(TASK, whandle, KOBJECT_TYPE_WAITQ);
 	if (!kobj)
 		return (sys_errno_t) ENOENT;
@@ -143,5 +142,5 @@
 #endif
 
-	errno_t rc = _waitq_sleep_timeout(kobj->waitq, timeout,
+	errno_t rc = _waitq_sleep_timeout(&kobj->waitq, timeout,
 	    SYNCH_FLAGS_INTERRUPTIBLE | flags);
 
@@ -150,5 +149,5 @@
 #endif
 
-	kobject_put(kobj);
+	kobject_put(&kobj->kobject);
 
 	return (sys_errno_t) rc;
@@ -163,11 +162,12 @@
 sys_errno_t sys_waitq_wakeup(cap_waitq_handle_t whandle)
 {
-	kobject_t *kobj = kobject_get(TASK, whandle, KOBJECT_TYPE_WAITQ);
+	waitq_kobject_t *kobj =
+	    (waitq_kobject_t *) kobject_get(TASK, whandle, KOBJECT_TYPE_WAITQ);
 	if (!kobj)
 		return (sys_errno_t) ENOENT;
 
-	waitq_wake_one(kobj->waitq);
+	waitq_wake_one(&kobj->waitq);
 
-	kobject_put(kobj);
+	kobject_put(&kobj->kobject);
 	return (sys_errno_t) EOK;
 }
