diff --git a/include/platform/interrupts.h b/include/platform/interrupts.h
index 7f563a5..7ee25bc 100644
--- a/include/platform/interrupts.h
+++ b/include/platform/interrupts.h
@@ -25,8 +25,8 @@
 
 #include <sys/types.h>
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate);
-status_t unmask_interrupt(unsigned int vector, bool *oldstate);
+status_t mask_interrupt(unsigned int vector);
+status_t unmask_interrupt(unsigned int vector);
 
 typedef enum handler_return (*int_handler)(void *arg);
 
diff --git a/platform/armemu/interrupts.c b/platform/armemu/interrupts.c
index 604d2dc..9b149a3 100644
--- a/platform/armemu/interrupts.c
+++ b/platform/armemu/interrupts.c
@@ -44,7 +44,7 @@
 	*REG32(PIC_MASK_LATCH) = 0xffffffff;
 }
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate)
+status_t mask_interrupt(unsigned int vector)
 {
 	if (vector >= PIC_MAX_INT)
 		return ERR_INVALID_ARGS;
@@ -53,8 +53,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = *REG32(PIC_MASK) & (1<<vector);
 	*REG32(PIC_MASK_LATCH) = 1 << vector;
 
 	exit_critical_section();
@@ -62,7 +60,7 @@
 	return NO_ERROR;
 }
 
-status_t unmask_interrupt(unsigned int vector, bool *oldstate)
+status_t unmask_interrupt(unsigned int vector)
 {
 	if (vector >= PIC_MAX_INT)
 		return ERR_INVALID_ARGS;
@@ -71,8 +69,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = *REG32(PIC_MASK) & (1<<vector);
 	*REG32(PIC_UNMASK_LATCH) = 1 << vector;
 
 	exit_critical_section();
diff --git a/platform/armemu/timer.c b/platform/armemu/timer.c
index 770905b..4d209a4 100644
--- a/platform/armemu/timer.c
+++ b/platform/armemu/timer.c
@@ -41,7 +41,7 @@
 	*REG(PIT_INTERVAL) = interval;
 	*REG(PIT_START_PERIODIC) = 1;
 
-	unmask_interrupt(INT_PIT, NULL);
+	unmask_interrupt(INT_PIT);
 
 	exit_critical_section();
 
diff --git a/platform/at91sam7/interrupts.c b/platform/at91sam7/interrupts.c
index 6c08ef9..1bfd277 100644
--- a/platform/at91sam7/interrupts.c
+++ b/platform/at91sam7/interrupts.c
@@ -45,37 +45,23 @@
 }
 
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate)
+status_t mask_interrupt(unsigned int vector)
 {
     AT91AIC *aic = AT91AIC_ADDR;
     
     if(vector > 31) return ERR_INVALID_ARGS;
     
-    if(oldstate) {
-        enter_critical_section();
-        *oldstate = aic->IMR & (1 << vector) ? 1 : 0;
-        aic->IDCR = (1 << vector);
-        exit_critical_section();
-    } else {
-        aic->IDCR = (1 << vector);
-    }
+	aic->IDCR = (1 << vector);
     
     return NO_ERROR;
 }
 
-status_t unmask_interrupt(unsigned int vector, bool *oldstate)
+status_t unmask_interrupt(unsigned int vector)
 {
     AT91AIC *aic = AT91AIC_ADDR;
     if(vector > 31) return ERR_INVALID_ARGS;
 
-    if(oldstate) {
-        enter_critical_section();
-        *oldstate = aic->IMR & (1 << vector) ? 1 : 0;
-        aic->IECR = (1 << vector);
-        exit_critical_section();
-    } else {
-        aic->IECR = (1 << vector);
-    }
+	aic->IECR = (1 << vector);
     
     return NO_ERROR;
 }
diff --git a/platform/at91sam7/timer.c b/platform/at91sam7/timer.c
index e4b6596..52224c5 100644
--- a/platform/at91sam7/timer.c
+++ b/platform/at91sam7/timer.c
@@ -93,7 +93,7 @@
     pit->MR = PIT_PITEN | PIT_PITIEN | (n & 0xfffff);
     
     register_int_handler(PID_SYSIRQ, pit_irq_handler, 0);
-    unmask_interrupt(PID_SYSIRQ, 0);
+    unmask_interrupt(PID_SYSIRQ);
 
     exit_critical_section();
     
diff --git a/platform/integrator/interrupts.c b/platform/integrator/interrupts.c
index ef5f221..7391eda 100644
--- a/platform/integrator/interrupts.c
+++ b/platform/integrator/interrupts.c
@@ -128,7 +128,7 @@
 #endif
 }
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate)
+status_t mask_interrupt(unsigned int vector)
 {
 #if 0
 	if (vector >= INT_VECTORS)
@@ -150,7 +150,7 @@
 	return NO_ERROR;
 }
 
-status_t unmask_interrupt(unsigned int vector, bool *oldstate)
+status_t unmask_interrupt(unsigned int vector)
 {
 #if 0
 	if (vector >= INT_VECTORS)
diff --git a/platform/omap3/interrupts.c b/platform/omap3/interrupts.c
index 225d810..77c632d 100644
--- a/platform/omap3/interrupts.c
+++ b/platform/omap3/interrupts.c
@@ -73,7 +73,7 @@
 	*REG32(INTC_CONTROL) = 3; // reset and enable the controller
 }
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate)
+status_t mask_interrupt(unsigned int vector)
 {
 	if (vector >= INT_VECTORS)
 		return ERR_INVALID_ARGS;
@@ -82,9 +82,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = false;
-
 	*REG32(INTC_MIR_SET(vectorToController(vector))) = 1 << (vector % 32);
 
 	exit_critical_section();
@@ -97,10 +94,10 @@
 {
 	int i;
 	for (i=0; i<INT_VECTORS; i++)
-		mask_interrupt(i, NULL);
+		mask_interrupt(i);
 }
 
-status_t unmask_interrupt(unsigned int vector, bool *oldstate)
+status_t unmask_interrupt(unsigned int vector)
 {
 	if (vector >= INT_VECTORS)
 		return ERR_INVALID_ARGS;
@@ -109,9 +106,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = false;
-
 	*REG32(INTC_MIR_CLEAR(vectorToController(vector))) = 1 << (vector % 32);
 
 	exit_critical_section();
diff --git a/platform/omap3/timer.c b/platform/omap3/timer.c
index 7c2b1f3..c6df208 100644
--- a/platform/omap3/timer.c
+++ b/platform/omap3/timer.c
@@ -57,7 +57,7 @@
 	TIMER_REG(TIER) = 0x2;
 	TIMER_REG(TCLR) = 0x3; // autoreload, start
 
-	unmask_interrupt(GPT2_IRQ, NULL);
+	unmask_interrupt(GPT2_IRQ);
 
 	exit_critical_section();
 
diff --git a/platform/omap5912/interrupts.c b/platform/omap5912/interrupts.c
index 5621561..730618f 100644
--- a/platform/omap5912/interrupts.c
+++ b/platform/omap5912/interrupts.c
@@ -99,7 +99,7 @@
 	*ICReg(0, INTCON_GMR) = 0;
 }
 
-status_t mask_interrupt(unsigned int vector, bool *oldstate)
+status_t mask_interrupt(unsigned int vector)
 {
 	if (vector >= INT_VECTORS)
 		return ERR_INVALID_ARGS;
@@ -108,9 +108,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = false;
-
 	volatile uint32_t *mir = ICReg(vectorToController(vector), INTCON_MIR);
 	*mir = *mir | (1<<(vector % 32));
 
@@ -119,7 +116,7 @@
 	return NO_ERROR;
 }
 
-status_t unmask_interrupt(unsigned int vector, bool *oldstate)
+status_t unmask_interrupt(unsigned int vector)
 {
 	if (vector >= INT_VECTORS)
 		return ERR_INVALID_ARGS;
@@ -128,9 +125,6 @@
 
 	enter_critical_section();
 
-	if (oldstate)
-		*oldstate = false;
-
 	volatile uint32_t *mir = ICReg(vectorToController(vector), INTCON_MIR);
 	*mir = *mir & ~(1<<(vector % 32));
 
diff --git a/platform/omap5912/timer.c b/platform/omap5912/timer.c
index 72659f1..2bc09ce 100644
--- a/platform/omap5912/timer.c
+++ b/platform/omap5912/timer.c
@@ -105,6 +105,6 @@
 	OS_TIMER_CTRL_REG = 0; // stop the timer if it's already running
 
 	register_int_handler(IRQ_OS_TIMER, &os_timer_tick, NULL);
-	unmask_interrupt(IRQ_OS_TIMER, NULL);
+	unmask_interrupt(IRQ_OS_TIMER);
 }
 
