Index: uspace/srv/hid/input/input.c
===================================================================
--- uspace/srv/hid/input/input.c	(revision c3bdc92b7c629f37d91f63d176952373c92dc7c1)
+++ uspace/srv/hid/input/input.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -54,5 +54,4 @@
 #include <io/keycode.h>
 #include <loc.h>
-#include <event.h>
 #include <str_error.h>
 #include "layout.h"
@@ -358,5 +357,6 @@
 }
 
-static void kconsole_event_received(ipc_callid_t callid, ipc_call_t *call)
+static void kconsole_event_handler(ipc_callid_t callid, ipc_call_t *call,
+    void *arg)
 {
 	if (IPC_GET_ARG1(*call)) {
@@ -772,6 +772,5 @@
 	
 	/* Receive kernel notifications */
-	async_set_interrupt_received(kconsole_event_received);
-	rc = event_subscribe(EVENT_KCONSOLE, 0);
+	rc = async_event_subscribe(EVENT_KCONSOLE, kconsole_event_handler, NULL);
 	if (rc != EOK)
 		printf("%s: Failed to register kconsole notifications (%s)\n",
Index: uspace/srv/hid/input/port/msim.c
===================================================================
--- uspace/srv/hid/input/port/msim.c	(revision c3bdc92b7c629f37d91f63d176952373c92dc7c1)
+++ uspace/srv/hid/input/port/msim.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -78,5 +78,8 @@
 };
 
-static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call);
+static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call, void *arg)
+{
+	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
+}
 
 static int msim_port_init(kbd_dev_t *kdev)
@@ -94,6 +97,6 @@
 	msim_ranges[0].base = paddr;
 	msim_cmds[0].addr = (void *) paddr;
-	async_set_interrupt_received(msim_irq_handler);
-	irq_register(inr, device_assign_devno(), 0, &msim_kbd);
+	async_irq_subscribe(inr, device_assign_devno(), msim_irq_handler, NULL,
+	    &msim_kbd);
 	
 	return 0;
@@ -105,9 +108,4 @@
 }
 
-static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call)
-{
-	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
-}
-
 /** @}
  */
Index: uspace/srv/hid/input/port/ns16550.c
===================================================================
--- uspace/srv/hid/input/port/ns16550.c	(revision c3bdc92b7c629f37d91f63d176952373c92dc7c1)
+++ uspace/srv/hid/input/port/ns16550.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -107,14 +107,21 @@
 };
 
-static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call);
+static uintptr_t ns16550_physical;
+static kbd_dev_t *kbd_dev;
+static sysarg_t inr;
 
-static uintptr_t ns16550_physical;
-
-static kbd_dev_t *kbd_dev;
+static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call, void *arg)
+{
+	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
+	
+	if (irc_service) {
+		async_exch_t *exch = async_exchange_begin(irc_sess);
+		async_msg_1(exch, IRC_CLEAR_INTERRUPT, inr);
+		async_exchange_end(exch);
+	}
+}
 
 static int ns16550_port_init(kbd_dev_t *kdev)
 {
-	void *vaddr;
-	
 	kbd_dev = kdev;
 	
@@ -128,5 +135,4 @@
 		return -1;
 	
-	sysarg_t inr;
 	if (sysinfo_get_value("kbd.inr", &inr) != EOK)
 		return -1;
@@ -136,7 +142,8 @@
 	ns16550_kbd.cmds[3].addr = (void *) (ns16550_physical + RBR_REG);
 	
-	async_set_interrupt_received(ns16550_irq_handler);
-	irq_register(inr, device_assign_devno(), inr, &ns16550_kbd);
+	async_irq_subscribe(inr, device_assign_devno(), ns16550_irq_handler, NULL,
+	    &ns16550_kbd);
 	
+	void *vaddr;
 	return pio_enable((void *) ns16550_physical, 8, &vaddr);
 }
@@ -147,15 +154,4 @@
 }
 
-static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call)
-{
-	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
-	
-	if (irc_service) {
-		async_exch_t *exch = async_exchange_begin(irc_sess);
-		async_msg_1(exch, IRC_CLEAR_INTERRUPT, IPC_GET_IMETHOD(*call));
-		async_exchange_end(exch);
-	}
-}
-
 /**
  * @}
Index: uspace/srv/hid/input/port/pl050.c
===================================================================
--- uspace/srv/hid/input/port/pl050.c	(revision c3bdc92b7c629f37d91f63d176952373c92dc7c1)
+++ uspace/srv/hid/input/port/pl050.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -101,5 +101,8 @@
 };
 
-static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call);
+static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call, void *arg)
+{
+	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
+}
 
 static int pl050_port_init(kbd_dev_t *kdev)
@@ -119,6 +122,6 @@
 		return -1;
 	
-	async_set_interrupt_received(pl050_irq_handler);
-	irq_register(inr, device_assign_devno(), 0, &pl050_kbd);
+	async_irq_subscribe(inr, device_assign_devno(), pl050_irq_handler, NULL,
+	    &pl050_kbd);
 	
 	return 0;
@@ -130,9 +133,4 @@
 }
 
-static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call)
-{
-	kbd_push_data(kbd_dev, IPC_GET_ARG2(*call));
-}
-
 /**
  * @}
