Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision b2f6113b6922a9164605cb05cd095dc177208621)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 8c01e1b356802f8f115089e75d81248e8ac783e8)
@@ -68,6 +68,8 @@
 
 void ^?{}(__stack_info_t & this) {
-	if ( ! this.userStack && this.storage ) {
-		void * storage = (char*)(this.storage) - this.storage->size;
+	bool userStack = ((intptr_t)this.storage & 0x1) != 0;
+	if ( ! userStack && this.storage ) {
+		*((intptr_t*)&this.storage) &= (intptr_t)-1;
+		void * storage = this.storage->limit;
 		__cfaabi_dbg_debug_do(
 			storage = (char*)(storage) - __page_size;
@@ -200,5 +202,5 @@
 	this->storage->limit = storage;
 	this->storage->base  = (void*)((intptr_t)storage + size);
-	this->userStack = userStack;
+	*((intptr_t*)&this->storage) |= userStack ? 0x1 : 0x0;
 }
 
Index: libcfa/src/concurrency/coroutine.hfa
===================================================================
--- libcfa/src/concurrency/coroutine.hfa	(revision b2f6113b6922a9164605cb05cd095dc177208621)
+++ libcfa/src/concurrency/coroutine.hfa	(revision 8c01e1b356802f8f115089e75d81248e8ac783e8)
@@ -102,5 +102,5 @@
 	coroutine_desc * dst = get_coroutine(cor);
 
-	if( unlikely(!dst->stack.storage || !dst->stack.storage->base) ) {
+	if( unlikely(dst->context.SP == NULL) ) {
 		__stack_prepare(&dst->stack, 65000);
 		CtxStart(&cor, CtxInvokeCoroutine);
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision b2f6113b6922a9164605cb05cd095dc177208621)
+++ libcfa/src/concurrency/invoke.h	(revision 8c01e1b356802f8f115089e75d81248e8ac783e8)
@@ -97,7 +97,4 @@
 		// pointer to stack
 		struct __stack_t * storage;
-
-		// whether or not the user allocated the stack
-		bool userStack;
 	};
 
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision b2f6113b6922a9164605cb05cd095dc177208621)
+++ libcfa/src/concurrency/kernel.cfa	(revision 8c01e1b356802f8f115089e75d81248e8ac783e8)
@@ -94,5 +94,4 @@
 	context.errno_ = 0;
 	stack.storage = info->storage;
-	stack.userStack = true;
 	with(*stack.storage) {
 		size      = info->size;
@@ -100,4 +99,5 @@
 		base      = info->base;
 	}
+	*((intptr_t*)&stack.storage) |= 0x1;
 	name = "Main Thread";
 	state = Start;
