Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision bfcf6b93d595af7bc5fcb05405720c63f503db8f)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 90ecadea9792707606c9a33a28ac43a7f894d078)
@@ -29,4 +29,6 @@
 #include "exception.hfa"
 #include "math.hfa"
+
+#define CFA_COROUTINE_USE_MMAP 0
 
 #define __CFA_INVOKE_PRIVATE__
@@ -110,16 +112,4 @@
 	if ( ! userStack && this.storage ) {
 		__stack_clean( &this );
-		// __attribute__((may_alias)) intptr_t * istorage = (intptr_t *)&this.storage;
-		// *istorage &= (intptr_t)-1;
-
-		// void * storage = this.storage->limit;
-		// __cfaabi_dbg_debug_do(
-		// 	storage = (char*)(storage) - __page_size;
-		// 	if ( mprotect( storage, __page_size, PROT_READ | PROT_WRITE ) == -1 ) {
-		// 		abort( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", &this, errno, strerror( errno ) );
-		// 	}
-		// );
-		// __cfaabi_dbg_print_safe("Kernel : Deleting stack %p\n", storage);
-		// free( storage );
 	}
 }
@@ -174,26 +164,29 @@
 	// If we are running debug, we also need to allocate a guardpage to catch stack overflows.
 	void * storage;
-	// __cfaabi_dbg_debug_do(
-	// 	storage = memalign( __page_size, size + __page_size );
-	// );
-	// __cfaabi_dbg_no_debug_do(
-	// 	storage = (void*)malloc(size);
-	// );
-
-	// __cfaabi_dbg_print_safe("Kernel : Created stack %p of size %zu\n", storage, size);
-	// __cfaabi_dbg_debug_do(
-	// 	if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) {
-	// 		abort( "__stack_alloc : internal error, mprotect failure, error(%d) %s.", (int)errno, strerror( (int)errno ) );
-	// 	}
-	// 	storage = (void *)(((intptr_t)storage) + __page_size);
-	// );
-	storage = mmap(0p, size + __page_size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
-	if(storage == ((void*)-1)) {
-		abort( "coroutine stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) );
-	}
-	if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) {
-		abort( "coroutine stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
-	} // if
-	storage = (void *)(((intptr_t)storage) + __page_size);
+	#if CFA_COROUTINE_USE_MMAP
+		storage = mmap(0p, size + __page_size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+		if(storage == ((void*)-1)) {
+			abort( "coroutine stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) );
+		}
+		if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) {
+			abort( "coroutine stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
+		} // if
+		storage = (void *)(((intptr_t)storage) + __page_size);
+	#else
+		__cfaabi_dbg_debug_do(
+			storage = memalign( __page_size, size + __page_size );
+		);
+		__cfaabi_dbg_no_debug_do(
+			storage = (void*)malloc(size);
+		);
+
+		__cfaabi_dbg_debug_do(
+			if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) {
+				abort( "__stack_alloc : internal error, mprotect failure, error(%d) %s.", (int)errno, strerror( (int)errno ) );
+			}
+			storage = (void *)(((intptr_t)storage) + __page_size);
+		);
+	#endif
+	__cfaabi_dbg_print_safe("Kernel : Created stack %p of size %zu\n", storage, size);
 
 	verify( ((intptr_t)storage & (libAlign() - 1)) == 0ul );
@@ -205,8 +198,20 @@
 	void * storage = this->storage->limit;
 
-	storage = (void *)(((intptr_t)storage) - __page_size);
-	if(munmap(storage, size + __page_size) == -1) {
-		abort( "coroutine stack destruction : internal error, munmap failure, error(%d) %s.", errno, strerror( errno ) );
-	}
+	#if CFA_COROUTINE_USE_MMAP
+		storage = (void *)(((intptr_t)storage) - __page_size);
+		if(munmap(storage, size + __page_size) == -1) {
+			abort( "coroutine stack destruction : internal error, munmap failure, error(%d) %s.", errno, strerror( errno ) );
+		}
+	#else
+		__cfaabi_dbg_debug_do(
+			storage = (char*)(storage) - __page_size;
+			if ( mprotect( storage, __page_size, PROT_READ | PROT_WRITE ) == -1 ) {
+				abort( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", &this, errno, strerror( errno ) );
+			}
+		);
+
+		free( storage );
+	#endif
+	__cfaabi_dbg_print_safe("Kernel : Deleting stack %p\n", storage);
 }
 
