Index: src/libcfa/concurrency/coroutine.c
===================================================================
--- src/libcfa/concurrency/coroutine.c	(revision 75a17f10fc7c34b407256654caaa8d663af91674)
+++ src/libcfa/concurrency/coroutine.c	(revision 0e7b95c8b6e96fa15d9a05af23bbbdb80933a7ce)
@@ -32,5 +32,5 @@
 #include "invoke.h"
 
-extern processor * get_this_processor();
+extern thread_local processor * this_processor;
 
 //-----------------------------------------------------------------------------
@@ -109,5 +109,5 @@
 
 	// set new coroutine that task is executing
-	get_this_processor()->current_coroutine = dst;			
+	this_processor->current_coroutine = dst;
 
 	// context switch to specified coroutine
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 75a17f10fc7c34b407256654caaa8d663af91674)
+++ src/libcfa/concurrency/kernel.c	(revision 0e7b95c8b6e96fa15d9a05af23bbbdb80933a7ce)
@@ -55,8 +55,4 @@
 thread_local processor * this_processor;
 
-processor * get_this_processor() {
-	return this_processor;
-}
-
 coroutine * this_coroutine(void) {
 	return this_processor->current_coroutine;
@@ -317,19 +313,19 @@
 
 void ScheduleInternal( spinlock * lock ) {
-	get_this_processor()->finish.action_code = Release;
-	get_this_processor()->finish.lock = lock;
+	this_processor->finish.action_code = Release;
+	this_processor->finish.lock = lock;
 	suspend();
 }
 
 void ScheduleInternal( thread * thrd ) {
-	get_this_processor()->finish.action_code = Schedule;
-	get_this_processor()->finish.thrd = thrd;
+	this_processor->finish.action_code = Schedule;
+	this_processor->finish.thrd = thrd;
 	suspend();
 }
 
 void ScheduleInternal( spinlock * lock, thread * thrd ) {
-	get_this_processor()->finish.action_code = Release_Schedule;
-	get_this_processor()->finish.lock = lock;
-	get_this_processor()->finish.thrd = thrd;
+	this_processor->finish.action_code = Release_Schedule;
+	this_processor->finish.lock = lock;
+	this_processor->finish.thrd = thrd;
 	suspend();
 }
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 75a17f10fc7c34b407256654caaa8d663af91674)
+++ src/libcfa/concurrency/thread.c	(revision 0e7b95c8b6e96fa15d9a05af23bbbdb80933a7ce)
@@ -28,5 +28,5 @@
 }
 
-extern processor * get_this_processor();
+extern thread_local processor * this_processor;
 
 //-----------------------------------------------------------------------------
@@ -77,5 +77,5 @@
 	thread*  thrd_h = get_thread   (this);
 	thrd_c->last = this_coroutine();
-	get_this_processor()->current_coroutine = thrd_c;
+	this_processor->current_coroutine = thrd_c;
 
 	LIB_DEBUG_PRINTF("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);
@@ -94,5 +94,5 @@
 
 void yield( void ) {
-	ScheduleInternal( get_this_processor()->current_thread );
+	ScheduleInternal( this_processor->current_thread );
 }
 
@@ -107,7 +107,7 @@
 	// set new coroutine that the processor is executing
 	// and context switch to it
-	get_this_processor()->current_coroutine = dst;	
+	this_processor->current_coroutine = dst;
 	CtxSwitch( src->stack.context, dst->stack.context );
-	get_this_processor()->current_coroutine = src;	
+	this_processor->current_coroutine = src;
 
 	// set state of new coroutine to active
