Index: uspace/drv/char/i8042/i8042.c
===================================================================
--- uspace/drv/char/i8042/i8042.c	(revision 7ee7e6a46a8c5572893213586024c72f56b3db7f)
+++ uspace/drv/char/i8042/i8042.c	(revision 24abb85d299db39cc03f429adc41bb1ed4f23e23)
@@ -269,7 +269,8 @@
 	};
 	
-	rc = register_interrupt_handler(ddf_dev, irq_kbd, i8042_irq_handler,
-	    &irq_code);
-	if (rc != EOK) {
+	const int irq_kbd_cap = register_interrupt_handler(ddf_dev, irq_kbd,
+	    i8042_irq_handler, &irq_code);
+	if (irq_kbd_cap < 0) {
+		rc = irq_kbd_cap;
 		ddf_msg(LVL_ERROR, "Failed set handler for kbd: %s.",
 		    ddf_dev_get_name(ddf_dev));
@@ -277,7 +278,8 @@
 	}
 	
-	rc = register_interrupt_handler(ddf_dev, irq_mouse, i8042_irq_handler,
-	    &irq_code);
-	if (rc != EOK) {
+	const int irq_mouse_cap = register_interrupt_handler(ddf_dev, irq_mouse,
+	    i8042_irq_handler, &irq_code);
+	if (irq_mouse_cap < 0) {
+		rc = irq_mouse_cap;
 		ddf_msg(LVL_ERROR, "Failed set handler for mouse: %s.",
 		    ddf_dev_get_name(ddf_dev));
Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision 7ee7e6a46a8c5572893213586024c72f56b3db7f)
+++ uspace/drv/char/ns8250/ns8250.c	(revision 24abb85d299db39cc03f429adc41bb1ed4f23e23)
@@ -160,4 +160,6 @@
 	/** The irq assigned to this device. */
 	int irq;
+	/** IRQ capability */
+	int irq_cap;
 	/** The base i/o address of the devices registers. */
 	uintptr_t io_addr;
@@ -797,5 +799,5 @@
 static inline int ns8250_unregister_interrupt_handler(ns8250_t *ns)
 {
-	return unregister_interrupt_handler(ns->dev, ns->irq);
+	return unregister_interrupt_handler(ns->dev, ns->irq_cap);
 }
 
@@ -849,5 +851,6 @@
 	
 	/* Register interrupt handler. */
-	if (ns8250_register_interrupt_handler(ns) != EOK) {
+	ns->irq_cap = ns8250_register_interrupt_handler(ns);
+	if (ns->irq_cap < 0) {
 		ddf_msg(LVL_ERROR, "Failed to register interrupt handler.");
 		rc = EADDRNOTAVAIL;
Index: uspace/drv/char/pl050/pl050.c
===================================================================
--- uspace/drv/char/pl050/pl050.c	(revision 7ee7e6a46a8c5572893213586024c72f56b3db7f)
+++ uspace/drv/char/pl050/pl050.c	(revision 24abb85d299db39cc03f429adc41bb1ed4f23e23)
@@ -212,7 +212,8 @@
 	pl050->regs = regs;
 
-	rc = register_interrupt_handler(pl050->dev, res.irqs.irqs[0],
-	    pl050_interrupt, &pl050_irq_code);
-	if (rc != EOK) {
+	const int irq_cap = register_interrupt_handler(pl050->dev,
+	    res.irqs.irqs[0], pl050_interrupt, &pl050_irq_code);
+	if (irq_cap < 0) {
+		rc = irq_cap;
 		ddf_msg(LVL_ERROR, "Failed registering interrupt handler. (%d)",
 		    rc);
