diff --git a/scheme/irq.rs b/scheme/irq.rs
index ce99c42335bcded79be69874b9e602385b5f3680..f91118e870e079a5b7cc55fc7d2198ac2a8eb340 100644
--- a/scheme/irq.rs
+++ b/scheme/irq.rs
@@ -1,10 +1,9 @@
 use core::{mem, str};
 use core::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering};
-use spin::{Mutex, Once};
+use spin::Mutex;
 
 use arch::interrupt::irq::acknowledge;
 use context;
-use sync::WaitCondition;
 use syscall::error::*;
 use syscall::flag::EVENT_READ;
 use syscall::scheme::Scheme;
@@ -14,22 +13,11 @@ pub static IRQ_SCHEME_ID: AtomicUsize = ATOMIC_USIZE_INIT;
 /// IRQ queues
 static ACKS: Mutex<[usize; 16]> = Mutex::new([0; 16]);
 static COUNTS: Mutex<[usize; 16]> = Mutex::new([0; 16]);
-static WAITS: Once<[WaitCondition; 16]> = Once::new();
-
-fn init_waits() -> [WaitCondition; 16] {
-    [
-        WaitCondition::new(), WaitCondition::new(), WaitCondition::new(), WaitCondition::new(),
-        WaitCondition::new(), WaitCondition::new(), WaitCondition::new(), WaitCondition::new(),
-        WaitCondition::new(), WaitCondition::new(), WaitCondition::new(), WaitCondition::new(),
-        WaitCondition::new(), WaitCondition::new(), WaitCondition::new(), WaitCondition::new()
-    ]
-}
 
 /// Add to the input queue
 #[no_mangle]
 pub extern fn irq_trigger(irq: u8) {
     COUNTS.lock()[irq as usize] += 1;
-    WAITS.call_once(init_waits)[irq as usize].notify();
     context::event::trigger(IRQ_SCHEME_ID.load(Ordering::SeqCst), irq as usize, EVENT_READ, mem::size_of::<usize>());
 }
 
@@ -59,17 +47,15 @@ impl Scheme for IrqScheme {
     fn read(&self, file: usize, buffer: &mut [u8]) -> Result<usize> {
         // Ensures that the length of the buffer is larger than the size of a usize
         if buffer.len() >= mem::size_of::<usize>() {
-            loop {
-                let ack = ACKS.lock()[file];
-                let current = COUNTS.lock()[file];
-                if ack != current {
-                    // Safe if the length of the buffer is larger than the size of a usize
-                    assert!(buffer.len() >= mem::size_of::<usize>());
-                    unsafe { *(buffer.as_mut_ptr() as *mut usize) = current; }
-                    return Ok(mem::size_of::<usize>());
-                } else {
-                    WAITS.call_once(init_waits)[file].wait();
-                }
+            let ack = ACKS.lock()[file];
+            let current = COUNTS.lock()[file];
+            if ack != current {
+                // Safe if the length of the buffer is larger than the size of a usize
+                assert!(buffer.len() >= mem::size_of::<usize>());
+                unsafe { *(buffer.as_mut_ptr() as *mut usize) = current; }
+                Ok(mem::size_of::<usize>())
+            } else {
+                Ok(0)
             }
         } else {
             Err(Error::new(EINVAL))