Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision b9237fe0edfbccbac4d39fccfd57c962f750768e)
+++ libcfa/src/concurrency/io.cfa	(revision 47746a2cb957a0678b03156aee12451463ab8235)
@@ -191,4 +191,6 @@
 		struct io_uring_params params;
 		memset(&params, 0, sizeof(params));
+		if( io_flags & CFA_CLUSTER_IO_KERNEL_POLL_SUBMITS   ) params.flags |= IORING_SETUP_SQPOLL;
+		if( io_flags & CFA_CLUSTER_IO_KERNEL_POLL_COMPLETES ) params.flags |= IORING_SETUP_IOPOLL;
 
 		uint32_t nentries = entries_per_cluster();
@@ -264,4 +266,6 @@
 			}
 		}
+
+		(sq.lock){};
 
 		if( io_flags & ( CFA_CLUSTER_IO_POLLER_THREAD_SUBMITS | CFA_CLUSTER_IO_EAGER_SUBMITS ) ) {
@@ -457,11 +461,11 @@
 
 		// update statistics
-		#if !defined(__CFA_NO_STATISTICS__)
+		__STATS__( true,
 			if( to_submit > 0 ) {
-				__tls_stats()->io.submit_q.submit_avg.rdy += to_submit;
-				__tls_stats()->io.submit_q.submit_avg.csm += ret;
-				__tls_stats()->io.submit_q.submit_avg.cnt += 1;
-			}
-		#endif
+				io.submit_q.submit_avg.rdy += to_submit;
+				io.submit_q.submit_avg.csm += ret;
+				io.submit_q.submit_avg.cnt += 1;
+			}
+		)
 
 		// Drain the queue
@@ -543,8 +547,8 @@
 
 				// Update statistics
-				#if !defined(__CFA_NO_STATISTICS__)
-					__tls_stats()->io.complete_q.completed_avg.val += count;
-					__tls_stats()->io.complete_q.completed_avg.slow_cnt += 1;
-				#endif
+				__STATS__( true,
+					io.complete_q.completed_avg.val += count;
+					io.complete_q.completed_avg.slow_cnt += 1;
+				)
 
 				if(again) {
@@ -563,8 +567,8 @@
 
 				// Update statistics
-				#if !defined(__CFA_NO_STATISTICS__)
-					__tls_stats()->io.complete_q.completed_avg.val += count;
-					__tls_stats()->io.complete_q.completed_avg.slow_cnt += 1;
-				#endif
+				__STATS__( true,
+					io.complete_q.completed_avg.val += count;
+					io.complete_q.completed_avg.slow_cnt += 1;
+				)
 			}
 		}
@@ -603,8 +607,8 @@
 
 				// Update statistics
-				#if !defined(__CFA_NO_STATISTICS__)
-					__tls_stats()->io.complete_q.completed_avg.val += count;
-					__tls_stats()->io.complete_q.completed_avg.fast_cnt += 1;
-				#endif
+				__STATS__( true,
+					io.complete_q.completed_avg.val += count;
+					io.complete_q.completed_avg.fast_cnt += 1;
+				)
 			enable_interrupts( __cfaabi_dbg_ctx );
 
@@ -683,11 +687,9 @@
 				{
 					// update statistics
-					#if !defined(__CFA_NO_STATISTICS__)
-						disable_interrupts();
-							__tls_stats()->io.submit_q.alloc_avg.val   += len;
-							__tls_stats()->io.submit_q.alloc_avg.block += block;
-							__tls_stats()->io.submit_q.alloc_avg.cnt   += 1;
-						enable_interrupts( __cfaabi_dbg_ctx );
-					#endif
+					__STATS__( false,
+						io.submit_q.alloc_avg.val   += len;
+						io.submit_q.alloc_avg.block += block;
+						io.submit_q.alloc_avg.cnt   += 1;
+					)
 
 
@@ -736,11 +738,9 @@
 
 		// update statistics
-		#if !defined(__CFA_NO_STATISTICS__)
-			disable_interrupts();
-				__tls_stats()->io.submit_q.look_avg.val   += len;
-				__tls_stats()->io.submit_q.look_avg.block += block;
-				__tls_stats()->io.submit_q.look_avg.cnt   += 1;
-			enable_interrupts( __cfaabi_dbg_ctx );
-		#endif
+		__STATS__( false,
+			io.submit_q.look_avg.val   += len;
+			io.submit_q.look_avg.block += block;
+			io.submit_q.look_avg.cnt   += 1;
+		)
 
 		return picked;
@@ -770,24 +770,20 @@
 				#warning ABA problem
 				if( ring.submit_q.ready[picked] != idx ) {
-					#if !defined(__CFA_NO_STATISTICS__)
-						disable_interrupts();
-							__tls_stats()->io.submit_q.helped += 1;
-						enable_interrupts( __cfaabi_dbg_ctx );
-					#endif
+					__STATS__( false,
+						io.submit_q.helped += 1;
+					)
 					return;
 				}
 
 				if( try_lock(ring.submit_q.lock __cfaabi_dbg_ctx2) ) {
-					#if !defined(__CFA_NO_STATISTICS__)
-						__tls_stats()->io.submit_q.leader += 1;
-					#endif
+					__STATS__( false,
+						io.submit_q.leader += 1;
+					)
 					break;
 				}
 
-				#if !defined(__CFA_NO_STATISTICS__)
-					disable_interrupts();
-						__tls_stats()->io.submit_q.busy += 1;
-					enable_interrupts( __cfaabi_dbg_ctx );
-				#endif
+				__STATS__( false,
+					io.submit_q.busy += 1;
+				)
 			}
 
@@ -817,9 +813,9 @@
 
 			// update statistics
-			#if !defined(__CFA_NO_STATISTICS__)
-				__tls_stats()->io.submit_q.submit_avg.rdy += to_submit;
-				__tls_stats()->io.submit_q.submit_avg.csm += ret;
-				__tls_stats()->io.submit_q.submit_avg.cnt += 1;
-			#endif
+			__STATS__( true,
+				io.submit_q.submit_avg.rdy += to_submit;
+				io.submit_q.submit_avg.csm += ret;
+				io.submit_q.submit_avg.cnt += 1;
+			)
 
 			unlock(ring.submit_q.lock);
@@ -846,11 +842,8 @@
 
 			// update statistics
-			#if !defined(__CFA_NO_STATISTICS__)
-				disable_interrupts();
-					abort();
-					__tls_stats()->io.submit_q.submit_avg.csm += 1;
-					__tls_stats()->io.submit_q.submit_avg.cnt += 1;
-				enable_interrupts( __cfaabi_dbg_ctx );
-			#endif
+			__STATS__( false,
+				io.submit_q.submit_avg.csm += 1;
+				io.submit_q.submit_avg.cnt += 1;
+			)
 
 			ring.submit_q.sqes[ idx & mask ].user_data = 0;
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision b9237fe0edfbccbac4d39fccfd57c962f750768e)
+++ libcfa/src/concurrency/kernel.hfa	(revision 47746a2cb957a0678b03156aee12451463ab8235)
@@ -129,7 +129,9 @@
 struct __io_data;
 
-#define CFA_CLUSTER_IO_POLLER_USER_THREAD    1 << 0 // 0x1
-#define CFA_CLUSTER_IO_POLLER_THREAD_SUBMITS 1 << 1 // 0x2
-#define CFA_CLUSTER_IO_EAGER_SUBMITS         1 << 2 // 0x4
+#define CFA_CLUSTER_IO_POLLER_USER_THREAD    (1 << 0) // 0x01
+#define CFA_CLUSTER_IO_POLLER_THREAD_SUBMITS (1 << 1) // 0x02
+#define CFA_CLUSTER_IO_EAGER_SUBMITS         (1 << 2) // 0x04
+#define CFA_CLUSTER_IO_KERNEL_POLL_SUBMITS   (1 << 3) // 0x08
+#define CFA_CLUSTER_IO_KERNEL_POLL_COMPLETES (1 << 4) // 0x10
 #define CFA_CLUSTER_IO_BUFFLEN_OFFSET        16
 
Index: libcfa/src/concurrency/kernel_private.hfa
===================================================================
--- libcfa/src/concurrency/kernel_private.hfa	(revision b9237fe0edfbccbac4d39fccfd57c962f750768e)
+++ libcfa/src/concurrency/kernel_private.hfa	(revision 47746a2cb957a0678b03156aee12451463ab8235)
@@ -286,9 +286,19 @@
 // Statics call at the end of each thread to register statistics
 #if !defined(__CFA_NO_STATISTICS__)
-static inline struct __stats_t * __tls_stats() {
-	/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
-	/* paranoid */ verify( kernelTLS.this_stats );
-	return kernelTLS.this_stats;
-}
+	static inline struct __stats_t * __tls_stats() {
+		/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
+		/* paranoid */ verify( kernelTLS.this_stats );
+		return kernelTLS.this_stats;
+	}
+
+	#define __STATS__(in_kernel, ...) { \
+		if( !(in_kernel) ) disable_interrupts(); \
+		with( *__tls_stats() ) { \
+			__VA_ARGS__ \
+		} \
+		if( !(in_kernel) ) enable_interrupts( __cfaabi_dbg_ctx ); \
+	}
+#else
+	#define __STATS__(in_kernel, ...)
 #endif
 
