Index: uspace/drv/block/ahci/ahci.c
===================================================================
--- uspace/drv/block/ahci/ahci.c	(revision e5424e9c9ff4b025227b44586f4b079542090d74)
+++ uspace/drv/block/ahci/ahci.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -38,7 +38,5 @@
 #include <device/hw_res_parsed.h>
 #include <pci_dev_iface.h>
-#include <sysinfo.h>
-#include <ipc/irc.h>
-#include <ns.h>
+#include <irc.h>
 #include <ahci_iface.h>
 #include "ahci.h"
@@ -129,5 +127,4 @@
 
 static void ahci_get_model_name(uint16_t *, char *);
-static int ahci_enable_interrupt(int);
 
 static fibril_mutex_t sata_devices_count_lock;
@@ -1195,5 +1192,5 @@
 	}
 	
-	rc = ahci_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
+	rc = irc_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
 	if (rc != EOK) {
 		ddf_msg(LVL_ERROR, "Failed enable interupt.");
@@ -1315,26 +1312,4 @@
 }
 
-/** Enable interrupt using SERVICE_IRC.
- *
- * @param irq Requested irq number.
- *
- * @return EOK if succeed, error code otherwise.
- *
- */
-static int ahci_enable_interrupt(int irq)
-{
-	async_sess_t *irc_sess = NULL;
-	irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_IRC, 0, 0);
-	if (!irc_sess)
-		return EINTR;
-	
-	async_exch_t *exch = async_exchange_begin(irc_sess);
-	const int rc = async_req_1_0(exch, IRC_ENABLE_INTERRUPT, irq);
-	async_exchange_end(exch);
-	
-	async_hangup(irc_sess);
-	return rc;
-}
-
 /*----------------------------------------------------------------------------*/
 /*-- AHCI Main routine -------------------------------------------------------*/
Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision e5424e9c9ff4b025227b44586f4b079542090d74)
+++ uspace/drv/bus/isa/isa.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -54,10 +54,6 @@
 #include <ipc/irc.h>
 #include <ipc/services.h>
-#include <sysinfo.h>
-#include <ns.h>
 #include <sys/stat.h>
-#include <ipc/irc.h>
-#include <ipc/services.h>
-#include <sysinfo.h>
+#include <irc.h>
 #include <ns.h>
 
@@ -120,37 +116,16 @@
 	assert(fun);
 
-	sysarg_t apic;
-	sysarg_t i8259;
-
-	async_sess_t *irc_sess = NULL;
-
-	if (((sysinfo_get_value("apic", &apic) == EOK) && (apic))
-	    || ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259))) {
-		irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-		    SERVICE_IRC, 0, 0);
-	}
-
-	if (!irc_sess)
-		return false;
-
 	const hw_resource_list_t *res = &fun->hw_resources;
 	assert(res);
 	for (size_t i = 0; i < res->count; ++i) {
 		if (res->resources[i].type == INTERRUPT) {
-			const int irq = res->resources[i].res.interrupt.irq;
-
-			async_exch_t *exch = async_exchange_begin(irc_sess);
-			const int rc =
-			    async_req_1_0(exch, IRC_ENABLE_INTERRUPT, irq);
-			async_exchange_end(exch);
-
-			if (rc != EOK) {
-				async_hangup(irc_sess);
+			int rc = irc_enable_interrupt(
+			    res->resources[i].res.interrupt.irq);
+
+			if (rc != EOK)
 				return false;
-			}
-		}
-	}
-
-	async_hangup(irc_sess);
+		}
+	}
+
 	return true;
 }
Index: uspace/drv/bus/pci/pciintel/pci.c
===================================================================
--- uspace/drv/bus/pci/pciintel/pci.c	(revision e5424e9c9ff4b025227b44586f4b079542090d74)
+++ uspace/drv/bus/pci/pciintel/pci.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -51,8 +51,5 @@
 #include <ddf/log.h>
 #include <ipc/dev_iface.h>
-#include <ipc/irc.h>
-#include <ns.h>
-#include <ipc/services.h>
-#include <sysinfo.h>
+#include <irc.h>
 #include <ops/hw_res.h>
 #include <device/hw_res.h>
@@ -107,37 +104,16 @@
 	pci_fun_t *dev_data = pci_fun(fnode);
 	
-	sysarg_t apic;
-	sysarg_t i8259;
-	
-	async_sess_t *irc_sess = NULL;
-	
-	if (((sysinfo_get_value("apic", &apic) == EOK) && (apic))
-	    || ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259))) {
-		irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-		    SERVICE_IRC, 0, 0);
-	}
-	
-	if (!irc_sess)
-		return false;
-	
 	size_t i = 0;
 	hw_resource_list_t *res = &dev_data->hw_resources;
 	for (; i < res->count; i++) {
 		if (res->resources[i].type == INTERRUPT) {
-			const int irq = res->resources[i].res.interrupt.irq;
-			
-			async_exch_t *exch = async_exchange_begin(irc_sess);
-			const int rc =
-			    async_req_1_0(exch, IRC_ENABLE_INTERRUPT, irq);
-			async_exchange_end(exch);
-			
-			if (rc != EOK) {
-				async_hangup(irc_sess);
+			int rc = irc_enable_interrupt(
+			    res->resources[i].res.interrupt.irq);
+			
+			if (rc != EOK)
 				return false;
-			}
 		}
 	}
 	
-	async_hangup(irc_sess);
 	return true;
 }
Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision e5424e9c9ff4b025227b44586f4b079542090d74)
+++ uspace/drv/char/ns8250/ns8250.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -57,7 +57,5 @@
 #include <ops/char_dev.h>
 
-#include <ns.h>
-#include <ipc/services.h>
-#include <ipc/irc.h>
+#include <irc.h>
 #include <device/hw_res.h>
 #include <ipc/serial_ctl.h>
@@ -488,25 +486,12 @@
 static int ns8250_interrupt_enable(ns8250_t *ns)
 {
-	/*
-	 * Enable interrupt using IRC service.
-	 * TODO: This is a temporary solution until the device framework
-	 * takes care of this itself.
-	 */
-	async_sess_t *irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
-	    SERVICE_IRC, 0, 0);
-	if (!irc_sess) {
+	/* Enable interrupt using IRC service. */
+	int rc = irc_enable_interrupt(ns->irq);
+	if (rc != EOK)
 		return EIO;
-	}
-
-	async_exch_t *exch = async_exchange_begin(irc_sess);
-	if (!exch) {
-		return EIO;
-	}
-	async_msg_1(exch, IRC_ENABLE_INTERRUPT, ns->irq);
-	async_exchange_end(exch);
-
+	
 	/* Read LSR to clear possible previous LSR interrupt */
 	pio_read_8(&ns->regs->lsr);
-
+	
 	/* Enable interrupt on the serial port. */
 	ns8250_port_interrupts_enable(ns->regs);
