Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 111b9b97905c174ce8c3ed7e4e2a890da2be2d66)
+++ kernel/generic/src/ipc/irq.c	(revision 2df21755623b239a0d57f0639a0bfcf636cd3d5b)
@@ -295,13 +295,13 @@
 }
 
-static void irq_destroy(void *arg)
-{
-	irq_t *irq = (irq_t *) arg;
-
-	irq_hash_out(irq);
+static void irq_destroy(kobject_t *arg)
+{
+	irq_kobject_t *kobj = (irq_kobject_t *) arg;
+
+	irq_hash_out(&kobj->irq);
 
 	/* Free up the IRQ code and associated structures. */
-	code_free(irq->notif_cfg.code);
-	slab_free(irq_cache, irq);
+	code_free(kobj->irq.notif_cfg.code);
+	slab_free(irq_cache, kobj);
 }
 
@@ -350,16 +350,13 @@
 	}
 
-	irq_t *irq = (irq_t *) slab_alloc(irq_cache, FRAME_ATOMIC);
-	if (!irq) {
+	irq_kobject_t *kobj = slab_alloc(irq_cache, FRAME_ATOMIC);
+	if (!kobj) {
 		cap_free(TASK, handle);
 		return ENOMEM;
 	}
 
-	kobject_t *kobject = kobject_alloc(FRAME_ATOMIC);
-	if (!kobject) {
-		cap_free(TASK, handle);
-		slab_free(irq_cache, irq);
-		return ENOMEM;
-	}
+	kobject_initialize(&kobj->kobject, KOBJECT_TYPE_IRQ);
+
+	irq_t *irq = &kobj->irq;
 
 	irq_initialize(irq);
@@ -385,6 +382,5 @@
 	irq_spinlock_unlock(&irq_uspace_hash_table_lock, true);
 
-	kobject_initialize(kobject, KOBJECT_TYPE_IRQ, irq);
-	cap_publish(TASK, handle, kobject);
+	cap_publish(TASK, handle, &kobj->kobject);
 
 	return EOK;
@@ -405,7 +401,7 @@
 		return ENOENT;
 
-	assert(kobj->irq->notif_cfg.answerbox == box);
-
-	irq_hash_out(kobj->irq);
+	assert(irq_from_kobject(kobj)->notif_cfg.answerbox == box);
+
+	irq_hash_out(irq_from_kobject(kobj));
 
 	kobject_put(kobj);
