Index: libcfa/src/concurrency/kernel/cluster.cfa
===================================================================
--- libcfa/src/concurrency/kernel/cluster.cfa	(revision 8f01ad7153c7eaa08ba052530901201317088623)
+++ libcfa/src/concurrency/kernel/cluster.cfa	(revision 78a580d0f8719cd1f71563bdcdef7a9930002650)
@@ -27,4 +27,5 @@
 
 #include "ready_subqueue.hfa"
+#include "io/types.hfa"
 
 #include <errno.h>
@@ -259,5 +260,5 @@
 		it->rdq.id = valrq;
 		it->rdq.target = MAX;
-		it->io.id = valio;
+		it->io.ctx->cq.id = valio;
 		it->io.target = MAX;
 		valrq += __shard_factor.readyq;
@@ -278,6 +279,6 @@
 	while(it) {
 		/* paranoid */ verifyf( it, "Unexpected null iterator\n");
-		/* paranoid */ verifyf( it->io.id < count, "Processor %p has id %u above count %zu\n", it, it->rdq.id, count);
-		data[it->io.id] = it->io.ctx;
+		/* paranoid */ verifyf( it->io.ctx->cq.id < count, "Processor %p has id %u above count %zu\n", it, it->rdq.id, count);
+		data[it->io.ctx->cq.id] = it->io.ctx;
 		it = &(*it)`next;
 	}
Index: libcfa/src/concurrency/kernel/cluster.hfa
===================================================================
--- libcfa/src/concurrency/kernel/cluster.hfa	(revision 8f01ad7153c7eaa08ba052530901201317088623)
+++ libcfa/src/concurrency/kernel/cluster.hfa	(revision 78a580d0f8719cd1f71563bdcdef7a9930002650)
@@ -16,5 +16,8 @@
 #pragma once
 
+#include "device/cpu.hfa"
 #include "kernel/private.hfa"
+
+#include "limits.hfa"
 
 //-----------------------------------------------------------------------
@@ -31,4 +34,12 @@
 	const unsigned long long ret = ((new_weight * new_val) + (old_weight * old_avg)) / total_weight;
 	return ret;
+}
+
+static inline void touch_tsc(__timestamp_t * tscs, size_t idx, unsigned long long ts_prev, unsigned long long ts_next) {
+	if (ts_next == MAX) return;
+	unsigned long long now = rdtscl();
+	unsigned long long pma = __atomic_load_n(&tscs[ idx ].ma, __ATOMIC_RELAXED);
+	__atomic_store_n(&tscs[ idx ].tv, ts_next, __ATOMIC_RELAXED);
+	__atomic_store_n(&tscs[ idx ].ma, moving_average(now, ts_prev, pma), __ATOMIC_RELAXED);
 }
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 8f01ad7153c7eaa08ba052530901201317088623)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 78a580d0f8719cd1f71563bdcdef7a9930002650)
@@ -233,6 +233,6 @@
 	/* paranoid */ verify( sizeof(storage_mainIdleEventFd) == sizeof(eventfd_t) );
 
+	__cfa_io_start( mainProcessor );
 	register_tls( mainProcessor );
-	__cfa_io_start( mainProcessor );
 
 	// Start by initializing the main thread
@@ -314,6 +314,6 @@
 	mainProcessor->local_data = 0p;
 
+	unregister_tls( mainProcessor );
 	__cfa_io_stop( mainProcessor );
-	unregister_tls( mainProcessor );
 
 	// Destroy the main processor and its context in reverse order of construction
@@ -364,7 +364,6 @@
 	proc->local_data = &__cfaabi_tls;
 
+	__cfa_io_start( proc );
 	register_tls( proc );
-
-	__cfa_io_start( proc );
 
 	// used for idle sleep when io_uring is present
@@ -401,6 +400,4 @@
 	// Main routine of the core returned, the core is now fully terminated
 	__cfadbg_print_safe(runtime_core, "Kernel : core %p main ended (%p)\n", proc, &proc->runner);
-
-	__cfa_io_stop( proc );
 
 	#if !defined(__CFA_NO_STATISTICS__)
@@ -417,4 +414,5 @@
 
 	unregister_tls( proc );
+	__cfa_io_stop( proc );
 
 	return 0p;
