Index: libcfa/src/concurrency/io/setup.cfa
===================================================================
--- libcfa/src/concurrency/io/setup.cfa	(revision eccb14d7241424d1aae22fb905858900c58eaa4e)
+++ libcfa/src/concurrency/io/setup.cfa	(revision 58d64a4bada7a16e278bcedc78907e029a2b9ddf)
@@ -147,4 +147,5 @@
 	static void * iopoll_loop( __attribute__((unused)) void * args ) {
 		__processor_id_t id;
+		id.full_proc = false;
 		id.id = doregister(&id);
 		__cfaabi_dbg_print_safe( "Kernel : IO poller thread starting\n" );
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision eccb14d7241424d1aae22fb905858900c58eaa4e)
+++ libcfa/src/concurrency/kernel.cfa	(revision 58d64a4bada7a16e278bcedc78907e029a2b9ddf)
@@ -237,7 +237,4 @@
 	$coroutine * proc_cor = get_coroutine(this->runner);
 
-	// Update global state
-	kernelTLS.this_thread = thrd_dst;
-
 	// set state of processor coroutine to inactive
 	verify(proc_cor->state == Active);
@@ -253,4 +250,6 @@
 			thrd_dst->unpark_stale = true;
 		)
+		// Update global state
+		kernelTLS.this_thread = thrd_dst;
 
 		/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
@@ -259,4 +258,5 @@
 		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor
 
+
 		// set context switch to the thread that the processor is executing
 		verify( thrd_dst->context.SP );
@@ -269,4 +269,6 @@
 		/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
 
+		// Reset global state
+		kernelTLS.this_thread = 0p;
 
 		// We just finished running a thread, there are a few things that could have happened.
@@ -313,5 +315,4 @@
 	// Just before returning to the processor, set the processor coroutine to active
 	proc_cor->state = Active;
-	kernelTLS.this_thread = 0p;
 
 	/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
@@ -521,5 +522,5 @@
 	disable_interrupts();
 		/* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
-		bool ret = post( this->idle );
+		post( this->idle );
 	enable_interrupts( __cfaabi_dbg_ctx );
 }
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision eccb14d7241424d1aae22fb905858900c58eaa4e)
+++ libcfa/src/concurrency/kernel.hfa	(revision 58d64a4bada7a16e278bcedc78907e029a2b9ddf)
@@ -48,5 +48,6 @@
 // Processor id, required for scheduling threads
 struct __processor_id_t {
-	unsigned id;
+	unsigned id:24;
+	bool full_proc:1;
 
 	#if !defined(__CFA_NO_STATISTICS__)
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision eccb14d7241424d1aae22fb905858900c58eaa4e)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 58d64a4bada7a16e278bcedc78907e029a2b9ddf)
@@ -471,4 +471,5 @@
 	this.cltr = &_cltr;
 	id = -1u;
+	full_proc = true;
 	destroyer = 0p;
 	do_terminate = false;
Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision eccb14d7241424d1aae22fb905858900c58eaa4e)
+++ libcfa/src/concurrency/preemption.cfa	(revision 58d64a4bada7a16e278bcedc78907e029a2b9ddf)
@@ -411,4 +411,5 @@
 static void * alarm_loop( __attribute__((unused)) void * args ) {
 	__processor_id_t id;
+	id.full_proc = false;
 	id.id = doregister(&id);
 
