Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 0030ada32a3825ed4613414b4b0cc4cb9ef84380)
+++ libcfa/src/concurrency/invoke.h	(revision 09d4b228a8366465289c3d46bb4186f7d19e42af)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Dec  4 08:05:32 2019
-// Update Count     : 43
+// Last Modified On : Thu Dec  5 16:26:03 2019
+// Update Count     : 44
 //
 
@@ -51,5 +51,4 @@
 
 			struct {
-				void * stack;
 				volatile unsigned short disable_count;
 				volatile bool enabled;
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 0030ada32a3825ed4613414b4b0cc4cb9ef84380)
+++ libcfa/src/concurrency/kernel.cfa	(revision 09d4b228a8366465289c3d46bb4186f7d19e42af)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Dec  3 21:46:54 2019
-// Update Count     : 49
+// Last Modified On : Thu Dec  5 16:25:52 2019
+// Update Count     : 52
 //
 
@@ -135,5 +135,5 @@
 	NULL,												// cannot use 0p
 	NULL,
-	{ NULL, 1, false, false },
+	{ 1, false, false },
 	6u //this should be seeded better but due to a bug calling rdtsc doesn't work
 };
@@ -453,17 +453,19 @@
 
 	size_t stacksize;
-	 // default stack size, normally defined by shell limit
+	// default stack size, normally defined by shell limit
 	Abort( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" );
 	assert( stacksize >= PTHREAD_STACK_MIN );
 
-#ifdef __CFA_DEBUG__
-	void * stack = memalign( __page_size, stacksize + __page_size );
-	// pthread has no mechanism to create the guard page in user supplied stack.
-	if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) {
-		abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
-	} // if
-#else
-	void * stack = malloc( stacksize );
-#endif
+	void * stack;
+	__cfaabi_dbg_debug_do(
+		stack = memalign( __page_size, stacksize + __page_size );
+		// pthread has no mechanism to create the guard page in user supplied stack.
+		if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) {
+			abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
+		} // if
+	);
+	__cfaabi_dbg_no_debug_do(
+		stack = malloc( stacksize );
+	);
 
 	Abort( pthread_attr_setstack( &attr, stack, stacksize ), "pthread_attr_setstack" ); 
Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision 0030ada32a3825ed4613414b4b0cc4cb9ef84380)
+++ libcfa/src/concurrency/preemption.cfa	(revision 09d4b228a8366465289c3d46bb4186f7d19e42af)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 5 14:20:42 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Dec  1 22:22:56 2019
-// Update Count     : 41
+// Last Modified On : Thu Dec  5 16:34:05 2019
+// Update Count     : 43
 //
 
@@ -65,4 +65,5 @@
 event_kernel_t * event_kernel;                        // kernel public handle to even kernel
 static pthread_t alarm_thread;                        // pthread handle to alarm thread
+static void * alarm_stack;							  // pthread stack for alarm thread
 
 static void ?{}(event_kernel_t & this) with( this ) {
@@ -306,5 +307,5 @@
 	signal_block( SIGALRM );
 
-	kernelTLS.preemption_state.stack = create_pthread( &alarm_thread, alarm_loop, 0p );
+	alarm_stack = create_pthread( &alarm_thread, alarm_loop, 0p );
 }
 
@@ -326,5 +327,5 @@
 
 	pthread_join( alarm_thread, 0p );
-	free( kernelTLS.preemption_state.stack );
+	free( alarm_stack );
 
 	// Preemption is now fully stopped
