diff --git a/src/event.rs b/src/event.rs
index dbe908f4e08fde38bcf0ded7f424d389b55479be..2e6cf9aed3ee705482dc102a5db8a63d2e7cd7ce 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -52,7 +52,10 @@ impl EventQueue {
                 event.flags
             );
 
-            send_flags(RegKey { scheme, number })?;
+            let flags = sync(RegKey { scheme, number })?;
+            if flags > 0 {
+                trigger(scheme, number, flags);
+            }
         }
 
         Ok(events.len())
@@ -133,7 +136,7 @@ pub fn register(reg_key: RegKey, queue_key: QueueKey, flags: usize) {
     }
 }
 
-pub fn send_flags(reg_key: RegKey) -> Result<()> {
+pub fn sync(reg_key: RegKey) -> Result<usize> {
     let mut flags = 0;
 
     {
@@ -146,21 +149,13 @@ pub fn send_flags(reg_key: RegKey) -> Result<()> {
         }
     }
 
-    let event_id = {
-        let scheme = {
-            let schemes = scheme::schemes();
-            let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?;
-            Arc::clone(&scheme)
-        };
-
-        scheme.fevent(reg_key.number, flags)?
+    let scheme = {
+        let schemes = scheme::schemes();
+        let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?;
+        Arc::clone(&scheme)
     };
 
-    if event_id != reg_key.number {
-        println!("scheme {} returned event id {} instead of {}", reg_key.scheme.into(), event_id, reg_key.number);
-    }
-
-    Ok(())
+    scheme.fevent(reg_key.number, flags)
 }
 
 pub fn unregister_file(scheme: SchemeId, number: usize) {
diff --git a/src/scheme/debug.rs b/src/scheme/debug.rs
index 35de9cc678d51a503a9468dc83e9c7b927c0b317..be93f99a1f508afe054a92f7f1763eac0c5899c3 100644
--- a/src/scheme/debug.rs
+++ b/src/scheme/debug.rs
@@ -108,7 +108,7 @@ impl Scheme for DebugScheme {
             *handles.get(&id).ok_or(Error::new(EBADF))?
         };
 
-        Ok(id)
+        Ok(0)
     }
 
     fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
diff --git a/src/scheme/irq.rs b/src/scheme/irq.rs
index 3c61091a46d6ae5ccf7dc4fc8ad41366c0b3451c..bb359e185a1d466558e3ffc54d7b92cf42b5770a 100644
--- a/src/scheme/irq.rs
+++ b/src/scheme/irq.rs
@@ -88,7 +88,7 @@ impl Scheme for IrqScheme {
     }
 
     fn fevent(&self, file: usize, _flags: usize) -> Result<usize> {
-        Ok(file)
+        Ok(0)
     }
 
     fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
diff --git a/src/scheme/itimer.rs b/src/scheme/itimer.rs
index 2eaae08966dc868e402d85eed6eb33fe8449df83..53c48fd5683c5919a564102873f4d50191f53b5b 100644
--- a/src/scheme/itimer.rs
+++ b/src/scheme/itimer.rs
@@ -81,7 +81,7 @@ impl Scheme for ITimerScheme {
 
     fn fevent(&self, id: usize, _flags: usize) ->  Result<usize> {
         let handles = self.handles.read();
-        handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(id))
+        handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(0))
     }
 
     fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
diff --git a/src/scheme/pipe.rs b/src/scheme/pipe.rs
index 80451d017e8f38ab26ed2dc807b1eac9554bb624..8bb6ae76b8eea760209929d7c461ce1db8637854 100644
--- a/src/scheme/pipe.rs
+++ b/src/scheme/pipe.rs
@@ -166,7 +166,7 @@ impl PipeRead {
     }
 
     fn fevent(&self, _flags: usize) -> Result<usize> {
-        Ok(self.event_id)
+        Ok(0)
     }
 
     fn read(&self, buf: &mut [u8]) -> Result<usize> {
diff --git a/src/scheme/time.rs b/src/scheme/time.rs
index 7ec3a185f36fc337968021d789c5209457b07e25..bf5f73d951f76626bbc67f902771476fa7444c9b 100644
--- a/src/scheme/time.rs
+++ b/src/scheme/time.rs
@@ -92,7 +92,7 @@ impl Scheme for TimeScheme {
 
     fn fevent(&self, id: usize, _flags: usize) ->  Result<usize> {
         let handles = self.handles.read();
-        handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(id))
+        handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(0))
     }
 
     fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
diff --git a/src/scheme/user.rs b/src/scheme/user.rs
index 94785cdcc808def8e2b856776f114ded5da39c2c..65a0dd50a5e3c4640df8c2a4e20654b11cbf5ee2 100644
--- a/src/scheme/user.rs
+++ b/src/scheme/user.rs
@@ -207,7 +207,7 @@ impl UserInner {
     }
 
     pub fn fevent(&self, _flags: usize) -> Result<usize> {
-        Ok(self.handle_id)
+        Ok(0)
     }
 
     pub fn fsync(&self) -> Result<usize> {