Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision 7c012e806c8d24ca16d0122265ab3d2916617a7f)
+++ libcfa/src/concurrency/kernel.hfa	(revision ca0c311012ec648cff08394473a39dae0292ec46)
@@ -195,4 +195,8 @@
 	// Total number of processors
 	unsigned total;
+
+    // Number of processors constructed
+    //  incremented at construction time, total is incremented once the processor asyncronously registers
+	unsigned constructed;
 
 	// Total number of idle processors
@@ -297,4 +301,7 @@
 static inline struct cluster   * active_cluster  () { return publicTLS_get( this_processor )->cltr; }
 
+// gets the number of constructed processors on the cluster
+static inline unsigned get_proc_count( cluster & this ) { return this.procs.constructed; }
+
 // set the number of internal processors
 // these processors are in addition to any explicitly declared processors
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 7c012e806c8d24ca16d0122265ab3d2916617a7f)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision ca0c311012ec648cff08394473a39dae0292ec46)
@@ -528,4 +528,5 @@
 	this.name = name;
 	this.cltr = &_cltr;
+    __atomic_add_fetch( &_cltr.procs.constructed, 1u, __ATOMIC_RELAXED );
 	this.rdq.its = 0;
 	this.rdq.itr = 0;
@@ -595,4 +596,6 @@
 	__cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this);
 
+    __atomic_sub_fetch( &this.cltr->procs.constructed, 1u, __ATOMIC_RELAXED );
+
 	__atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
 	__disable_interrupts_checked();
@@ -615,4 +618,5 @@
 	this.fdw   = 0p;
 	this.idle  = 0;
+    this.constructed = 0;
 	this.total = 0;
 }
