Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 64a7146c54101e2d816b7c6fd793f072222b5599)
+++ libcfa/src/concurrency/kernel.cfa	(revision 68f36f466e0d4b6c66374329d439152ca1c1f7ea)
@@ -371,15 +371,12 @@
 
 			// Make sure we aren't on the idle queue
+			#if !defined(__CFA_NO_STATISTICS__)
+				bool removed =
+			#endif
 			unsafe_remove( this->cltr->idles, this );
-			Link(processor) * link = &this->cltr->idles.stack;
-			for() {
-				processor * next = link->top;
-				if( next == this ) {
-					link->top = getNext(this)->top;
-					break;
-				}
-				if( next == 0p ) break;
-				link = getNext(next);
-			}
+
+			#if !defined(__CFA_NO_STATISTICS__)
+				if(removed) __tls_stats()->ready.sleep.exits++;
+			#endif
 
 		// Unlock the RWlock
@@ -672,5 +669,12 @@
 		push( thrd->curr_cluster, thrd );
 
-		__wake_one(id, thrd->curr_cluster);
+		#if !defined(__CFA_NO_STATISTICS__)
+			bool woke =
+		#endif
+			__wake_one(id, thrd->curr_cluster);
+
+		#if !defined(__CFA_NO_STATISTICS__)
+			if(woke) __tls_stats()->ready.sleep.wakes++;
+		#endif
 	ready_schedule_unlock( id );
 
@@ -969,4 +973,7 @@
 	if( do_terminate ) return;
 
+	#if !defined(__CFA_NO_STATISTICS__)
+		__tls_stats()->ready.sleep.halts++;
+	#endif
 	// Push self to queue
 	push(cltr->idles, *this);
@@ -979,4 +986,7 @@
 			__wake_one( id, cltr );
 		ready_schedule_unlock( id );
+		#if !defined(__CFA_NO_STATISTICS__)
+			__tls_stats()->ready.sleep.cancels++;
+		#endif
 	}
 
Index: libcfa/src/concurrency/stats.cfa
===================================================================
--- libcfa/src/concurrency/stats.cfa	(revision 64a7146c54101e2d816b7c6fd793f072222b5599)
+++ libcfa/src/concurrency/stats.cfa	(revision 68f36f466e0d4b6c66374329d439152ca1c1f7ea)
@@ -13,4 +13,8 @@
 		stats->ready.pick.pop .attempt = 0;
 		stats->ready.pick.pop .success = 0;
+		stats->ready.sleep.halts   = 0;
+		stats->ready.sleep.cancels = 0;
+		stats->ready.sleep.wakes   = 0;
+		stats->ready.sleep.exits   = 0;
 
 		#if defined(HAVE_LINUX_IO_URING_H)
@@ -37,4 +41,8 @@
 		__atomic_fetch_add( &cltr->ready.pick.pop .attempt, proc->ready.pick.pop .attempt, __ATOMIC_SEQ_CST );
 		__atomic_fetch_add( &cltr->ready.pick.pop .success, proc->ready.pick.pop .success, __ATOMIC_SEQ_CST );
+		__atomic_fetch_add( &cltr->ready.sleep.halts  , proc->ready.sleep.halts  , __ATOMIC_SEQ_CST );
+		__atomic_fetch_add( &cltr->ready.sleep.cancels, proc->ready.sleep.cancels, __ATOMIC_SEQ_CST );
+		__atomic_fetch_add( &cltr->ready.sleep.wakes  , proc->ready.sleep.wakes  , __ATOMIC_SEQ_CST );
+		__atomic_fetch_add( &cltr->ready.sleep.exits  , proc->ready.sleep.exits  , __ATOMIC_SEQ_CST );
 
 		#if defined(HAVE_LINUX_IO_URING_H)
@@ -89,4 +97,9 @@
 			"- push average probe len : %'18.2lf, %'18.2lf%% (%'15lu attempts)\n"
 			"- pop  average probe len : %'18.2lf, %'18.2lf%% (%'15lu attempts)\n"
+			"- Idle Sleep -\n"
+			"-- halts                 : %'15lu\n"
+			"-- cancelled halts       : %'15lu\n"
+			"-- schedule wake         : %'15lu\n"
+			"-- wake on exit          : %'15lu\n"
 			#if defined(HAVE_LINUX_IO_URING_H)
 				"\n"
@@ -109,4 +122,5 @@
 			, push_len, push_sur, stats->ready.pick.push.attempt
 			, pop_len , pop_sur , stats->ready.pick.pop .attempt
+			, stats->ready.sleep.halts, stats->ready.sleep.cancels, stats->ready.sleep.wakes, stats->ready.sleep.exits
 			#if defined(HAVE_LINUX_IO_URING_H)
 				, submit_avg.cnt
Index: libcfa/src/concurrency/stats.hfa
===================================================================
--- libcfa/src/concurrency/stats.hfa	(revision 64a7146c54101e2d816b7c6fd793f072222b5599)
+++ libcfa/src/concurrency/stats.hfa	(revision 68f36f466e0d4b6c66374329d439152ca1c1f7ea)
@@ -34,4 +34,10 @@
 			} pop;
 		} pick;
+		struct {
+			volatile uint64_t halts;
+			volatile uint64_t cancels;
+			volatile uint64_t wakes;
+			volatile uint64_t exits;
+		} sleep;
 	};
 
