Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision c33ed65112a6818997381f17f4295679b9da9c3b)
+++ libcfa/src/concurrency/io.cfa	(revision df40a5609f2a0d7e3d2ad2acbfe04866705db329)
@@ -580,5 +580,5 @@
 				int count;
 				bool again;
-				[count, again] = __drain_io( ring, &mask, 1, true );
+				[count, again] = __drain_io( ring, &mask, 0, true );
 
 				// Update statistics
@@ -593,4 +593,8 @@
 
 		unregister( &ring.poller.slow.id );
+
+		#if !defined(__CFA_NO_STATISTICS__)
+			__tally_stats(cltr->stats, &local_stats);
+		#endif
 
 		return 0p;
@@ -681,4 +685,5 @@
 //
 
+	// [* struct io_uring_sqe, uint32_t] __submit_alloc( struct __io_data & ring, uint64_t data ) __attribute__((noinline));
 	static inline [* struct io_uring_sqe, uint32_t] __submit_alloc( struct __io_data & ring, uint64_t data ) {
 		verify( data != 0 );
@@ -730,4 +735,47 @@
 	}
 
+	static inline uint32_t __submit_to_ready_array( struct __io_data & ring, uint32_t idx, const uint32_t mask ) {
+		/* paranoid */ verify( idx <= mask   );
+		/* paranoid */ verify( idx != -1ul32 );
+
+		// We need to find a spot in the ready array
+		__attribute((unused)) int len   = 0;
+		__attribute((unused)) int block = 0;
+		uint32_t ready_mask = ring.submit_q.ready_cnt - 1;
+
+		disable_interrupts();
+			uint32_t off = __tls_rand();
+		enable_interrupts( __cfaabi_dbg_ctx );
+
+		uint32_t picked;
+		LOOKING: for() {
+			for(i; ring.submit_q.ready_cnt) {
+				picked = (i + off) & ready_mask;
+				uint32_t expected = -1ul32;
+				if( __atomic_compare_exchange_n( &ring.submit_q.ready[picked], &expected, idx, true, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED ) ) {
+					break LOOKING;
+				}
+				verify(expected != idx);
+
+				len ++;
+			}
+
+			block++;
+			yield();
+		}
+
+		// 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
+
+		return picked;
+	}
+
+	// void __submit( struct __io_data & ring, uint32_t idx ) __attribute__((noinline));
 	static inline void __submit( struct __io_data & ring, uint32_t idx ) {
 		// Get now the data we definetely need
@@ -735,42 +783,11 @@
 		const uint32_t mask = *ring.submit_q.mask;
 
-		disable_interrupts();
-
 		// There are 2 submission schemes, check which one we are using
 		if( ring.cltr_flags & CFA_CLUSTER_IO_POLLER_THREAD_SUBMITS ) {
 			// If the poller thread submits, then we just need to add this to the ready array
 
-			/* paranoid */ verify( idx <= mask   );
-			/* paranoid */ verify( idx != -1ul32 );
-
-			// We need to find a spot in the ready array
-			__attribute((unused)) int len   = 0;
-			__attribute((unused)) int block = 0;
-			uint32_t ready_mask = ring.submit_q.ready_cnt - 1;
-			uint32_t off = __tls_rand();
-			LOOKING: for() {
-				for(i; ring.submit_q.ready_cnt) {
-					uint32_t ii = (i + off) & ready_mask;
-					uint32_t expected = -1ul32;
-					if( __atomic_compare_exchange_n( &ring.submit_q.ready[ii], &expected, idx, true, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED ) ) {
-						break LOOKING;
-					}
-					verify(expected != idx);
-
-					len ++;
-				}
-
-				block++;
-				yield();
-			}
+			__submit_to_ready_array( ring, idx, mask );
 
 			__wake_poller( ring );
-
-			// update statistics
-			#if !defined(__CFA_NO_STATISTICS__)
-				__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;
-			#endif
 
 			__cfadbg_print_safe( io, "Kernel I/O : Added %u to ready for %p\n", idx, active_thread() );
@@ -808,6 +825,4 @@
 			__cfadbg_print_safe( io, "Kernel I/O : Performed io_submit for %p, returned %d\n", active_thread(), ret );
 		}
-
-		enable_interrupts( __cfaabi_dbg_ctx );
 	}
 
