Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision c9c1c1cb39a44ae90eba78b399195de9a940648d)
+++ libcfa/src/concurrency/preemption.cfa	(revision 941e14acf71a35fcfc0c89401d4b7aeac4fae297)
@@ -661,5 +661,10 @@
 
 	// Check if it is safe to preempt here
-	if( !preemption_ready( ip ) ) { return; }
+	if( !preemption_ready( ip ) ) {
+		#if !defined(__CFA_NO_STATISTICS__)
+			__cfaabi_tls.this_stats->ready.threads.preempt.rllfwd++;
+		#endif
+		return;
+	}
 
 	__cfaabi_dbg_print_buffer_decl( " KERNEL: preempting core %p (%p @ %p).\n", __cfaabi_tls.this_processor, __cfaabi_tls.this_thread, (void *)(cxt->uc_mcontext.CFA_REG_IP) );
@@ -680,4 +685,8 @@
 
 	// Preemption can occur here
+
+	#if !defined(__CFA_NO_STATISTICS__)
+		__cfaabi_tls.this_stats->ready.threads.preempt.yield++;
+	#endif
 
 	force_yield( __ALARM_PREEMPTION ); // Do the actual __cfactx_switch
Index: libcfa/src/concurrency/stats.cfa
===================================================================
--- libcfa/src/concurrency/stats.cfa	(revision c9c1c1cb39a44ae90eba78b399195de9a940648d)
+++ libcfa/src/concurrency/stats.cfa	(revision 941e14acf71a35fcfc0c89401d4b7aeac4fae297)
@@ -29,4 +29,6 @@
 		stats->ready.threads.threads   = 0;
 		stats->ready.threads.cthreads  = 0;
+		stats->ready.threads.preempt.yield  = 0;
+		stats->ready.threads.preempt.rllfwd = 0;
 		stats->ready.sleep.halts   = 0;
 		stats->ready.sleep.cancels = 0;
@@ -77,28 +79,30 @@
 
 	void __tally_stats( struct __stats_t * cltr, struct __stats_t * proc ) {
-		tally_one( &cltr->ready.push.local.attempt, &proc->ready.push.local.attempt );
-		tally_one( &cltr->ready.push.local.success, &proc->ready.push.local.success );
-		tally_one( &cltr->ready.push.share.attempt, &proc->ready.push.share.attempt );
-		tally_one( &cltr->ready.push.share.success, &proc->ready.push.share.success );
-		tally_one( &cltr->ready.push.extrn.attempt, &proc->ready.push.extrn.attempt );
-		tally_one( &cltr->ready.push.extrn.success, &proc->ready.push.extrn.success );
-		tally_one( &cltr->ready.pop.local .attempt, &proc->ready.pop.local .attempt );
-		tally_one( &cltr->ready.pop.local .success, &proc->ready.pop.local .success );
-		tally_one( &cltr->ready.pop.help  .attempt, &proc->ready.pop.help  .attempt );
-		tally_one( &cltr->ready.pop.help  .success, &proc->ready.pop.help  .success );
-		tally_one( &cltr->ready.pop.steal .attempt, &proc->ready.pop.steal .attempt );
-		tally_one( &cltr->ready.pop.steal .success, &proc->ready.pop.steal .success );
-		tally_one( &cltr->ready.pop.search.attempt, &proc->ready.pop.search.attempt );
-		tally_one( &cltr->ready.pop.search.success, &proc->ready.pop.search.success );
-		tally_one( &cltr->ready.threads.migration , &proc->ready.threads.migration  );
-		tally_one( &cltr->ready.threads.extunpark , &proc->ready.threads.extunpark  );
-		tally_one( &cltr->ready.threads.threads   , &proc->ready.threads.threads    );
-		tally_one( &cltr->ready.threads.cthreads  , &proc->ready.threads.cthreads   );
-		tally_one( &cltr->ready.sleep.halts       , &proc->ready.sleep.halts        );
-		tally_one( &cltr->ready.sleep.cancels     , &proc->ready.sleep.cancels      );
-		tally_one( &cltr->ready.sleep.early       , &proc->ready.sleep.early        );
-		tally_one( &cltr->ready.sleep.wakes       , &proc->ready.sleep.wakes        );
-		tally_one( &cltr->ready.sleep.seen        , &proc->ready.sleep.wakes        );
-		tally_one( &cltr->ready.sleep.exits       , &proc->ready.sleep.exits        );
+		tally_one( &cltr->ready.push.local.attempt    , &proc->ready.push.local.attempt     );
+		tally_one( &cltr->ready.push.local.success    , &proc->ready.push.local.success     );
+		tally_one( &cltr->ready.push.share.attempt    , &proc->ready.push.share.attempt     );
+		tally_one( &cltr->ready.push.share.success    , &proc->ready.push.share.success     );
+		tally_one( &cltr->ready.push.extrn.attempt    , &proc->ready.push.extrn.attempt     );
+		tally_one( &cltr->ready.push.extrn.success    , &proc->ready.push.extrn.success     );
+		tally_one( &cltr->ready.pop.local .attempt    , &proc->ready.pop.local .attempt     );
+		tally_one( &cltr->ready.pop.local .success    , &proc->ready.pop.local .success     );
+		tally_one( &cltr->ready.pop.help  .attempt    , &proc->ready.pop.help  .attempt     );
+		tally_one( &cltr->ready.pop.help  .success    , &proc->ready.pop.help  .success     );
+		tally_one( &cltr->ready.pop.steal .attempt    , &proc->ready.pop.steal .attempt     );
+		tally_one( &cltr->ready.pop.steal .success    , &proc->ready.pop.steal .success     );
+		tally_one( &cltr->ready.pop.search.attempt    , &proc->ready.pop.search.attempt     );
+		tally_one( &cltr->ready.pop.search.success    , &proc->ready.pop.search.success     );
+		tally_one( &cltr->ready.threads.migration     , &proc->ready.threads.migration      );
+		tally_one( &cltr->ready.threads.extunpark     , &proc->ready.threads.extunpark      );
+		tally_one( &cltr->ready.threads.threads       , &proc->ready.threads.threads        );
+		tally_one( &cltr->ready.threads.cthreads      , &proc->ready.threads.cthreads       );
+		tally_one( &cltr->ready.threads.preempt.yield , &proc->ready.threads.preempt.yield  );
+		tally_one( &cltr->ready.threads.preempt.rllfwd, &proc->ready.threads.preempt.rllfwd );
+		tally_one( &cltr->ready.sleep.halts           , &proc->ready.sleep.halts            );
+		tally_one( &cltr->ready.sleep.cancels         , &proc->ready.sleep.cancels          );
+		tally_one( &cltr->ready.sleep.early           , &proc->ready.sleep.early            );
+		tally_one( &cltr->ready.sleep.wakes           , &proc->ready.sleep.wakes            );
+		tally_one( &cltr->ready.sleep.seen            , &proc->ready.sleep.wakes            );
+		tally_one( &cltr->ready.sleep.exits           , &proc->ready.sleep.exits            );
 
 		#if defined(CFA_HAVE_LINUX_IO_URING_H)
@@ -168,4 +172,5 @@
 			     | eng3(ready.sleep.wakes + ready.sleep.early) | '(' | eng3(ready.sleep.early) | ',' | eng3(ready.sleep.seen) | ')' | " wake(early, seen),"
 			     | eng3(ready.sleep.exits) | "exit";
+			sstr | "- Preemption : " | eng3(ready.threads.preempt.yield) | "yields," | eng3(ready.threads.preempt.rllfwd) | "delayed";
 			sstr | nl;
 		}
Index: libcfa/src/concurrency/stats.hfa
===================================================================
--- libcfa/src/concurrency/stats.hfa	(revision c9c1c1cb39a44ae90eba78b399195de9a940648d)
+++ libcfa/src/concurrency/stats.hfa	(revision 941e14acf71a35fcfc0c89401d4b7aeac4fae297)
@@ -65,4 +65,8 @@
 			volatile  int64_t threads;  // number of threads in the system, includes only local change
 			volatile  int64_t cthreads; // number of threads in the system, includes only local change
+			struct {
+				volatile uint64_t yield;
+				volatile uint64_t rllfwd;
+			} preempt;
 		} threads;
 		struct {
