Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision 6502a2b0f468295de4697bfd8846469780414c30)
+++ libcfa/src/concurrency/io.cfa	(revision 3c039b0fd26ae5a91be2186806d965e4c3bb3975)
@@ -204,5 +204,6 @@
 			this.io.submit_q.stats.submit_avg.cnt = 0;
 			this.io.completion_q.stats.completed_avg.val = 0;
-			this.io.completion_q.stats.completed_avg.cnt = 0;
+			this.io.completion_q.stats.completed_avg.slow_cnt = 0;
+			this.io.completion_q.stats.completed_avg.fast_cnt = 0;
 		#endif
 
@@ -269,10 +270,11 @@
 					"- total submit calls  : %llu\n"
 					"- avg submit          : %lf\n"
-					"- total wait calls    : %llu\n"
+					"- total wait calls    : %llu (%llu slow, %llu fast)\n"
 					"- avg completion/wait : %lf\n",
 					this.io.submit_q.stats.submit_avg.cnt,
 					((double)this.io.submit_q.stats.submit_avg.val) / this.io.submit_q.stats.submit_avg.cnt,
-					this.io.completion_q.stats.completed_avg.cnt,
-					((double)this.io.completion_q.stats.completed_avg.val) / this.io.completion_q.stats.completed_avg.cnt
+					this.io.completion_q.stats.completed_avg.slow_cnt + this.io.completion_q.stats.completed_avg.fast_cnt,
+					this.io.completion_q.stats.completed_avg.slow_cnt, this.io.completion_q.stats.completed_avg.fast_cnt,
+					((double)this.io.completion_q.stats.completed_avg.val) / (this.io.completion_q.stats.completed_avg.slow_cnt + this.io.completion_q.stats.completed_avg.fast_cnt)
 				);
 			}
@@ -326,7 +328,4 @@
 		// Nothing was new return 0
 		if (head == tail) {
-			#if !defined(__CFA_NO_STATISTICS__)
-				ring.completion_q.stats.completed_avg.cnt += 1;
-			#endif
 			return 0;
 		}
@@ -354,10 +353,4 @@
 		__atomic_fetch_add( ring.completion_q.head, count, __ATOMIC_RELAXED );
 
-		// Update statistics
-		#if !defined(__CFA_NO_STATISTICS__)
-			ring.completion_q.stats.completed_avg.val += count;
-			ring.completion_q.stats.completed_avg.cnt += 1;
-		#endif
-
 		return count;
 	}
@@ -386,4 +379,11 @@
 				// batton pass to the user-thread
 				int count = __drain_io( ring, &mask, 1, true );
+
+				// Update statistics
+				#if !defined(__CFA_NO_STATISTICS__)
+					ring.completion_q.stats.completed_avg.val += count;
+					ring.completion_q.stats.completed_avg.slow_cnt += 1;
+				#endif
+
 				if(count > 0) {
 					__cfadbg_print_safe(io_core, "Kernel I/O : Moving to ring %p to fast poller\n", &ring);
@@ -395,5 +395,11 @@
 
 				//In the naive approach, just poll the io completion queue directly
-				__drain_io( ring, &mask, 1, true );
+				int count = __drain_io( ring, &mask, 1, true );
+
+				// Update statistics
+				#if !defined(__CFA_NO_STATISTICS__)
+					ring.completion_q.stats.completed_avg.val += count;
+					ring.completion_q.stats.completed_avg.slow_cnt += 1;
+				#endif
 
 			#endif
@@ -416,7 +422,14 @@
 				// Drain the io
 				this.waiting = false;
-				int ret = __drain_io( *this.ring, 0p, 0, false );
+				int count = __drain_io( *this.ring, 0p, 0, false );
+
+				// Update statistics
+				#if !defined(__CFA_NO_STATISTICS__)
+					this.ring->completion_q.stats.completed_avg.val += count;
+					this.ring->completion_q.stats.completed_avg.fast_cnt += 1;
+				#endif
+
 				this.waiting = true;
-				if(0 > ret) {
+				if(0 > count) {
 					// If we got something, just yield and check again
 					yield();
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision 6502a2b0f468295de4697bfd8846469780414c30)
+++ libcfa/src/concurrency/kernel.hfa	(revision 3c039b0fd26ae5a91be2186806d965e4c3bb3975)
@@ -182,5 +182,6 @@
 			struct {
 				unsigned long long int val;
-				unsigned long long int cnt;
+				unsigned long long int slow_cnt;
+				unsigned long long int fast_cnt;
 			} completed_avg;
 		} stats;
