Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision e3a5a73f76c9a4e3291e13112839d8e420bda8be)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 69a61d208f84a31df0da633405dc55a920f8e768)
@@ -84,4 +84,5 @@
 
 void ?{}( coroutine_desc & this, const char * name, void * storage, size_t storageSize ) with( this ) {
+	(this.context){NULL, NULL};
 	(this.stack){storage, storageSize};
 	this.name = name;
@@ -137,4 +138,6 @@
 
 	// context switch to specified coroutine
+	verify( src->context.SP );
+	verify( dst->context.SP );
 	CtxSwitch( &src->context, &dst->context );
 	// when CtxSwitch returns we are back in the src coroutine
@@ -187,5 +190,5 @@
 	} else {
 		userStack = true;
-		__cfaabi_dbg_print_safe("Kernel : stack obj %p using user stack %p(%zu bytes)\n", this, this->storage, this->storage->size);
+		__cfaabi_dbg_print_safe("Kernel : stack obj %p using user stack %p(%zd bytes)\n", this, this->storage, (intptr_t)this->storage->limit - (intptr_t)this->storage->base);
 
 		// The stack must be aligned, advance the pointer to the next align data
@@ -199,5 +202,4 @@
 
 	this->storage = (__stack_t *)((intptr_t)storage + size);
-	this->storage->size  = size;
 	this->storage->limit = storage;
 	this->storage->base  = (void*)((intptr_t)storage + size);
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision e3a5a73f76c9a4e3291e13112839d8e420bda8be)
+++ libcfa/src/concurrency/invoke.h	(revision 69a61d208f84a31df0da633405dc55a920f8e768)
@@ -84,7 +84,4 @@
 
 	struct __stack_t {
-		// size of stack
-		size_t size;
-
 		// stack grows towards stack limit
 		void * limit;
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision e3a5a73f76c9a4e3291e13112839d8e420bda8be)
+++ libcfa/src/concurrency/kernel.cfa	(revision 69a61d208f84a31df0da633405dc55a920f8e768)
@@ -69,5 +69,4 @@
 struct current_stack_info_t {
 	__stack_t * storage;		// pointer to stack object
-	unsigned int size;		// size of stack
 	void *base;				// base of stack
 	void *limit;			// stack grows towards stack limit
@@ -82,7 +81,7 @@
 	rlimit r;
 	getrlimit( RLIMIT_STACK, &r);
-	this.size = r.rlim_cur;
-
-	this.limit = (void *)(((intptr_t)this.base) - this.size);
+	size_t size = r.rlim_cur;
+
+	this.limit = (void *)(((intptr_t)this.base) - size);
 	this.context = &storage_mainThreadCtx;
 }
@@ -95,5 +94,4 @@
 	stack.storage = info->storage;
 	with(*stack.storage) {
-		size      = info->size;
 		limit     = info->limit;
 		base      = info->base;
@@ -370,4 +368,5 @@
 
 	// context switch to specified coroutine
+	verify( dst->context.SP );
 	CtxSwitch( &src->context, &dst->context );
 	// when CtxSwitch returns we are back in the src coroutine
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision e3a5a73f76c9a4e3291e13112839d8e420bda8be)
+++ libcfa/src/concurrency/thread.cfa	(revision 69a61d208f84a31df0da633405dc55a920f8e768)
@@ -82,4 +82,6 @@
 	assert( thrd_c->stack.storage );
 	CtxStart(&this, CtxInvokeThread);
+	verify( thrd_c->last->context.SP );
+	verify( thrd_c->      context.SP );
 	CtxSwitch( &thrd_c->last->context, &thrd_c->context );
 
@@ -117,4 +119,5 @@
 	// set new coroutine that the processor is executing
 	// and context switch to it
+	verify( dst->context.SP );
 	CtxSwitch( &src->context, &dst->context );
 
