Index: uspace/drv/nic/e1k/e1k.c
===================================================================
--- uspace/drv/nic/e1k/e1k.c	(revision 8d2dd7f2d52fbc7693f94b66e451eeff3756d061)
+++ uspace/drv/nic/e1k/e1k.c	(revision 4d76cfcee2adf467c41933f143f3cbbec41c9624)
@@ -1253,5 +1253,5 @@
  * @param nic Driver data
  *
- * @return EOK if the handler was registered
+ * @return IRQ capability if the handler was registered
  * @return Negative error code otherwise
  *
@@ -1268,9 +1268,9 @@
 	e1000_irq_code.cmds[2].addr = e1000->reg_base_phys + E1000_IMC;
 	
-	int rc = register_interrupt_handler(nic_get_ddf_dev(nic),
-	    e1000->irq, e1000_interrupt_handler, &e1000_irq_code);
+	int cap = register_interrupt_handler(nic_get_ddf_dev(nic), e1000->irq,
+	    e1000_interrupt_handler, &e1000_irq_code);
 	
 	fibril_mutex_unlock(&irq_reg_mutex);
-	return rc;
+	return cap;
 }
 
@@ -2152,7 +2152,9 @@
 	ddf_fun_set_ops(fun, &e1000_dev_ops);
 	
-	rc = e1000_register_int_handler(nic);
-	if (rc != EOK)
+	int irq_cap = e1000_register_int_handler(nic);
+	if (irq_cap < 0) {
+		rc = irq_cap;
 		goto err_fun_create;
+	}
 	
 	rc = e1000_initialize_rx_structure(nic);
@@ -2189,5 +2191,5 @@
 	e1000_uninitialize_rx_structure(nic);
 err_irq:
-	unregister_interrupt_handler(dev, DRIVER_DATA_DEV(dev)->irq);
+	unregister_interrupt_handler(dev, irq_cap);
 err_fun_create:
 	ddf_fun_destroy(fun);
Index: uspace/drv/nic/ne2k/ne2k.c
===================================================================
--- uspace/drv/nic/ne2k/ne2k.c	(revision 8d2dd7f2d52fbc7693f94b66e451eeff3756d061)
+++ uspace/drv/nic/ne2k/ne2k.c	(revision 4d76cfcee2adf467c41933f143f3cbbec41c9624)
@@ -160,7 +160,7 @@
 	}
 
-	int rc = register_interrupt_handler(nic_get_ddf_dev(nic_data),
+	int irq_cap = register_interrupt_handler(nic_get_ddf_dev(nic_data),
 		ne2k->irq, ne2k_interrupt_handler, &ne2k->code);
-	return rc;
+	return irq_cap;
 }
 
@@ -228,6 +228,6 @@
 	ne2k->probed = true;
 	
-	rc = ne2k_register_interrupt(nic_data);
-	if (rc != EOK)
+	int irq_cap = ne2k_register_interrupt(nic_data);
+	if (irq_cap < 0)
 		return EINVAL;
 	
Index: uspace/drv/nic/rtl8139/driver.c
===================================================================
--- uspace/drv/nic/rtl8139/driver.c	(revision 8d2dd7f2d52fbc7693f94b66e451eeff3756d061)
+++ uspace/drv/nic/rtl8139/driver.c	(revision 4d76cfcee2adf467c41933f143f3cbbec41c9624)
@@ -881,5 +881,6 @@
  *  @param nic_data  The driver data
  *
- *  @return EOK if the handler was registered, negative error code otherwise
+ *  @return IRQ capability if the handler was registered.
+ *  @return Negative error code otherwise.
  */
 inline static int rtl8139_register_int_handler(nic_t *nic_data)
@@ -894,10 +895,10 @@
 	rtl8139_irq_code.cmds[2].addr = rtl8139->io_addr + ISR;
 	rtl8139_irq_code.cmds[3].addr = rtl8139->io_addr + IMR;
-	int rc = register_interrupt_handler(nic_get_ddf_dev(nic_data),
+	int cap = register_interrupt_handler(nic_get_ddf_dev(nic_data),
 	    rtl8139->irq, rtl8139_interrupt_handler, &rtl8139_irq_code);
 
 	RTL8139_IRQ_STRUCT_UNLOCK();
 
-	return rc;
+	return cap;
 }
 
@@ -1321,7 +1322,9 @@
 
 	/* Register interrupt handler */
-	rc = rtl8139_register_int_handler(nic_data);
-	if (rc != EOK)
+	int irq_cap = rtl8139_register_int_handler(nic_data);
+	if (irq_cap < 0) {
+		rc = irq_cap;
 		goto err_pio;
+	}
 
 	fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
@@ -1355,5 +1358,5 @@
 	ddf_fun_destroy(fun);
 err_srv:
-	unregister_interrupt_handler(dev, rtl8139->irq);
+	unregister_interrupt_handler(dev, irq_cap);
 err_pio:
 	// rtl8139_pio_disable(dev);
Index: uspace/drv/nic/rtl8169/driver.c
===================================================================
--- uspace/drv/nic/rtl8169/driver.c	(revision 8d2dd7f2d52fbc7693f94b66e451eeff3756d061)
+++ uspace/drv/nic/rtl8169/driver.c	(revision 4d76cfcee2adf467c41933f143f3cbbec41c9624)
@@ -371,8 +371,8 @@
 	rtl8169_irq_code.cmds[2].addr = rtl8169->regs + ISR;
 	rtl8169_irq_code.cmds[3].addr = rtl8169->regs + IMR;
-	int rc = register_interrupt_handler(nic_get_ddf_dev(nic_data),
+	int irq_cap = register_interrupt_handler(nic_get_ddf_dev(nic_data),
 	    rtl8169->irq, rtl8169_irq_handler, &rtl8169_irq_code);
 
-	return rc;
+	return irq_cap;
 }
 
@@ -426,9 +426,9 @@
 		goto err_pio;
 
-	rc = rtl8169_register_int_handler(nic_data);
-	if (rc != EOK) {
+	int irq_cap = rtl8169_register_int_handler(nic_data);
+	if (irq_cap < 0) {
+		rc = irq_cap;
 		ddf_msg(LVL_ERROR, "Failed to register IRQ handler (%d)", rc);
 		goto err_irq;
-
 	}
 
@@ -469,6 +469,6 @@
 err_srv:
 	/* XXX Disconnect from services */
+	unregister_interrupt_handler(dev, irq_cap);
 err_irq:
-	//unregister_interrupt_handler(dev, rtl8169->irq);
 err_pio:
 err_destroy:
