Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/coroutine.cfa	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -267,4 +267,10 @@
 		struct $coroutine * cor = active_coroutine();
 
+		// get the active thread once
+		$thread * athrd = active_thread();
+
+		/* paranoid */ verify( athrd->corctx_flag );
+		athrd->corctx_flag = false;
+
 		if(cor->state == Primed) {
 			__cfactx_suspend();
Index: libcfa/src/concurrency/coroutine.hfa
===================================================================
--- libcfa/src/concurrency/coroutine.hfa	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/coroutine.hfa	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -86,11 +86,21 @@
 	src->state = src->state == Halted ? Halted : Blocked;
 
+	// get the active thread once
+	$thread * athrd = active_thread();
+
+	// Mark the coroutine
+	/* paranoid */ verify( !athrd->corctx_flag );
+	athrd->corctx_flag = true;
+
 	// set new coroutine that task is executing
-	active_thread()->curr_cor = dst;
+	athrd->curr_cor = dst;
 
 	// context switch to specified coroutine
-	verify( dst->context.SP );
+	/* paranoid */ verify( dst->context.SP );
 	__cfactx_switch( &src->context, &dst->context );
 	// when __cfactx_switch returns we are back in the src coroutine
+
+	/* paranoid */ verify( athrd->corctx_flag );
+	athrd->corctx_flag = false;
 
 	// set state of new coroutine to active
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/invoke.h	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -167,4 +167,6 @@
 		enum __Preemption_Reason preempted:8;
 
+		bool corctx_flag;
+
 		//SKULLDUGGERY errno is not save in the thread data structure because returnToKernel appears to be the only function to require saving and restoring it
 
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/kernel.cfa	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -424,6 +424,6 @@
 
 		/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
-		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );
-		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
+		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->corctx_flag, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );
+		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->corctx_flag, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
 		/* paranoid */ verify( thrd_dst->context.SP );
 		/* paranoid */ verify( thrd_dst->curr_cluster == this->cltr );
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -397,4 +397,5 @@
 	// make sure the current state is still correct
 	/* paranoid */ verify(src->state == Ready);
+	src->corctx_flag = true;
 
 	// context switch to specified coroutine
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision ab388c536b8215ac2ef5f04702372e97e5c026a7)
+++ libcfa/src/concurrency/thread.cfa	(revision b303ec1d48f1b063f117ed65367b26155bbaf9bb)
@@ -32,4 +32,5 @@
 	state = Start;
 	preempted = __NO_PREEMPTION;
+	corctx_flag = false;
 	curr_cor = &self_cor;
 	self_mon.owner = &this;
