Index: kernel/genarch/src/kbd/z8530.c
===================================================================
--- kernel/genarch/src/kbd/z8530.c	(revision 63530c623718a69d8b980518b5dec7e17f4d991d)
+++ kernel/genarch/src/kbd/z8530.c	(revision 5f9b4d9af46404a0fa7382a0a6d74b1fbf1e2334)
@@ -41,4 +41,5 @@
 #include <arch/drivers/z8530.h>
 #include <ddi/irq.h>
+#include <ipc/irq.h>
 #include <arch/interrupt.h>
 #include <arch/drivers/kbd.h>
@@ -59,6 +60,4 @@
 #define IGNORE_CODE	0x7f		/* all keys up */
 
-bool z8530_belongs_to_kernel = true;
-
 static z8530_t z8530;		/**< z8530 device structure. */
 static irq_t z8530_irq;		/**< z8530's IRQ. */ 
@@ -73,16 +72,12 @@
 };
 
-void z8530_wait(void);
-
-/** Initialize keyboard and service interrupts using kernel routine */
+/** Initialize keyboard and service interrupts using kernel routine. */
 void z8530_grab(void)
 {
-	z8530_belongs_to_kernel = true;
-}
-
-/** Resume the former interrupt vector */
+}
+
+/** Resume the former IPC notification behavior. */
 void z8530_release(void)
 {
-	z8530_belongs_to_kernel = false;
 }
 
@@ -132,8 +127,4 @@
 {
 	z8530_poll();
-}
-
-/** Wait until the controller reads its data. */
-void z8530_wait(void) {
 }
 
@@ -195,13 +186,13 @@
 	/*
 	 * So far, we know we got this interrupt through the FHC.
-	 * Since we don't have enough information about the FHC and
-	 * because the interrupt looks like level sensitive,
+	 * Since we don't have enough documentation about the FHC
+	 * and because the interrupt looks like level sensitive,
 	 * we cannot handle it by scheduling one of the level
 	 * interrupt traps. Process the interrupt directly.
 	 */
-	if (z8530_belongs_to_kernel)
+	if (irq->notif_cfg.answerbox)
+		ipc_irq_send_notif(irq);
+	else
 		z8530_interrupt();
-	else
-		ipc_irq_send_notif(0);
 	fhc_clear_interrupt(central_fhc, irq->inr);
 }
