Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision ddd2ec9d646ba47067feec6e4ae77e23aeecd234)
+++ libcfa/src/concurrency/io.cfa	(revision c7b22150acba21cf4f3fdf6053901e85f794879b)
@@ -133,5 +133,5 @@
 	}
 
-	bool __cfa_io_flush( processor * proc, bool wait ) {
+	bool __cfa_io_flush( processor * proc, int min_comp ) {
 		/* paranoid */ verify( ! __preemption_enabled() );
 		/* paranoid */ verify( proc );
@@ -144,5 +144,5 @@
 
 		__STATS__( true, io.calls.flush++; )
-		int ret = syscall( __NR_io_uring_enter, ctx.fd, ctx.sq.to_submit, wait ? 1 : 0, 0, (sigset_t *)0p, _NSIG / 8);
+		int ret = syscall( __NR_io_uring_enter, ctx.fd, ctx.sq.to_submit, min_comp, min_comp > 0 ? IORING_ENTER_GETEVENTS : 0, (sigset_t *)0p, _NSIG / 8);
 		if( ret < 0 ) {
 			switch((int)errno) {
@@ -302,5 +302,5 @@
 		ctx->proc->io.dirty   = true;
 		if(sq.to_submit > 30 || !lazy) {
-			__cfa_io_flush( ctx->proc, false );
+			__cfa_io_flush( ctx->proc, 0 );
 		}
 	}
@@ -521,5 +521,5 @@
 		sqe->flags = 0;
 		sqe->ioprio = 0;
-		sqe->fd = 0;
+		sqe->fd = fd;
 		sqe->off = 0;
 		sqe->fsync_flags = 0;
Index: libcfa/src/concurrency/io/setup.cfa
===================================================================
--- libcfa/src/concurrency/io/setup.cfa	(revision ddd2ec9d646ba47067feec6e4ae77e23aeecd234)
+++ libcfa/src/concurrency/io/setup.cfa	(revision c7b22150acba21cf4f3fdf6053901e85f794879b)
@@ -32,5 +32,5 @@
 
 	void __cfa_io_start( processor * proc ) {}
-	bool __cfa_io_flush( processor * proc, bool ) {}
+	bool __cfa_io_flush( processor * proc, int ) {}
 	void __cfa_io_stop ( processor * proc ) {}
 
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision ddd2ec9d646ba47067feec6e4ae77e23aeecd234)
+++ libcfa/src/concurrency/kernel.cfa	(revision c7b22150acba21cf4f3fdf6053901e85f794879b)
@@ -125,5 +125,5 @@
 static void __wake_one(cluster * cltr);
 
-static void idle_sleep(processor * proc, io_future_t & future, char buf[]);
+static void idle_sleep(processor * proc, io_future_t & future, eventfd_t & val);
 static bool mark_idle (__cluster_proc_list & idles, processor & proc);
 static void mark_awake(__cluster_proc_list & idles, processor & proc);
@@ -131,5 +131,5 @@
 extern void __cfa_io_start( processor * );
 extern bool __cfa_io_drain( processor * );
-extern bool __cfa_io_flush( processor *, bool wait );
+extern bool __cfa_io_flush( processor *, int min_comp );
 extern void __cfa_io_stop ( processor * );
 static inline bool __maybe_io_drain( processor * );
@@ -169,5 +169,5 @@
 	io_future_t future; // used for idle sleep when io_uring is present
 	future.self.ptr = 1p;  // mark it as already fulfilled so we know if there is a pending request or not
-	char buf[sizeof(uint64_t)];
+	eventfd_t idle_val;
 
 	__cfa_io_start( this );
@@ -204,5 +204,5 @@
 
 			if( !readyThread ) {
-				__cfa_io_flush( this, false );
+				__cfa_io_flush( this, 0 );
 
 				readyThread = __next_thread_slow( this->cltr );
@@ -235,5 +235,5 @@
 				}
 
-				idle_sleep( this, future, buf );
+				idle_sleep( this, future, idle_val );
 
 				// We were woken up, remove self from idle
@@ -256,5 +256,5 @@
 
 			if(this->io.pending && !this->io.dirty) {
-				__cfa_io_flush( this, false );
+				__cfa_io_flush( this, 0 );
 			}
 
@@ -272,5 +272,5 @@
 
 				// If we can't find a thread, might as well flush any outstanding I/O
-				if(this->io.pending) { __cfa_io_flush( this, false ); }
+				if(this->io.pending) { __cfa_io_flush( this, 0 ); }
 
 				// Spin a little on I/O, just in case
@@ -367,5 +367,5 @@
 
 			if(this->io.pending && !this->io.dirty) {
-				__cfa_io_flush( this, false );
+				__cfa_io_flush( this, 0 );
 			}
 
@@ -777,5 +777,5 @@
 }
 
-static void idle_sleep(processor * this, io_future_t & future, char buf[]) {
+static void idle_sleep(processor * this, io_future_t & future, eventfd_t & val) {
 	#if !defined(IO_URING_IDLE) || !defined(CFA_HAVE_LINUX_IO_URING_H)
 		#if !defined(__CFA_NO_STATISTICS__)
@@ -819,8 +819,8 @@
 			reset(future);
 
-			__kernel_read(this, future, buf, this->idle_fd );
-		}
-
-		__cfa_io_flush( this, true );
+			__kernel_read(this, future, (char *)&val, this->idle_fd );
+		}
+
+		__cfa_io_flush( this, 1 );
 	#endif
 }
