Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Mon Nov 28 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 30 17:20:57 2018
-// Update Count     : 9
+// Last Modified On : Sat Nov 30 09:59:36 2019
+// Update Count     : 14
 //
 
@@ -90,11 +90,11 @@
 
 void ?{}( coroutine_desc & this, const char * name, void * storage, size_t storageSize ) with( this ) {
-	(this.context){NULL, NULL};
+	(this.context){0p, 0p};
 	(this.stack){storage, storageSize};
 	this.name = name;
 	state = Start;
-	starter = NULL;
-	last = NULL;
-	cancellation = NULL;
+	starter = 0p;
+	last = 0p;
+	cancellation = 0p;
 }
 
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/concurrency/invoke.h	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 22 18:19:13 2019
-// Update Count     : 40
+// Last Modified On : Thu Nov 28 22:34:07 2019
+// Update Count     : 41
 //
 
@@ -51,4 +51,5 @@
 
 			struct {
+				void * stack;
 				volatile unsigned short disable_count;
 				volatile bool enabled;
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/concurrency/kernel.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 21 16:46:59 2019
-// Update Count     : 27
+// Last Modified On : Fri Nov 29 17:59:16 2019
+// Update Count     : 35
 //
 
@@ -26,4 +26,5 @@
 #include <signal.h>
 #include <unistd.h>
+#include <limits.h>										// PTHREAD_STACK_MIN
 }
 
@@ -133,5 +134,5 @@
 	NULL,
 	NULL,
-	{ 1, false, false },
+	{ NULL, 1, false, false },
 	6u //this should be seeded better but due to a bug calling rdtsc doesn't work
 };
@@ -233,4 +234,5 @@
 
 	pthread_join( kernel_thread, NULL );
+	free( this.stack );
 }
 
@@ -445,5 +447,29 @@
 	__cfaabi_dbg_print_safe("Kernel : Starting core %p\n", this);
 
-	pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this );
+	pthread_attr_t attr;
+	int ret;
+	ret = pthread_attr_init( &attr );					// initialize attribute
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_init failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+
+	size_t stacksize;
+	ret = pthread_attr_getstacksize( &attr, &stacksize ); // default stack size, normally defined by shell limit
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_getstacksize failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+	assert( stacksize >= PTHREAD_STACK_MIN );
+
+	this->stack = malloc( stacksize );
+	ret = pthread_attr_setstack( &attr, this->stack, stacksize ); 
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_setstack failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+
+	ret = pthread_create( &this->kernel_thread, &attr, CtxInvokeProcessor, (void *)this );
+	if ( ret ) {
+		abort( "%s : internal error, pthread_create failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+//	pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this );
 
 	__cfaabi_dbg_print_safe("Kernel : core %p started\n", this);
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/concurrency/kernel.hfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 22 11:39:17 2019
-// Update Count     : 16
+// Last Modified On : Thu Nov 28 21:24:12 2019
+// Update Count     : 17
 //
 
@@ -135,4 +135,7 @@
 	semaphore terminated;
 
+	// pthread Stack
+	void * stack;
+
 	// Link lists fields
 	struct __dbg_node_proc {
Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/concurrency/preemption.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 5 14:20:42 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun  5 17:35:49 2018
-// Update Count     : 37
+// Last Modified On : Sat Nov 30 08:02:56 2019
+// Update Count     : 39
 //
 
@@ -24,4 +24,5 @@
 #include <string.h>
 #include <unistd.h>
+#include <limits.h>										// PTHREAD_STACK_MIN
 }
 
@@ -81,14 +82,14 @@
 // Get next expired node
 static inline alarm_node_t * get_expired( alarm_list_t * alarms, Time currtime ) {
-	if( !alarms->head ) return NULL;                          // If no alarms return null
-	if( alarms->head->alarm >= currtime ) return NULL;        // If alarms head not expired return null
-	return pop(alarms);                                       // Otherwise just pop head
+	if( !alarms->head ) return 0p;						// If no alarms return null
+	if( alarms->head->alarm >= currtime ) return 0p;	// If alarms head not expired return null
+	return pop(alarms);									// Otherwise just pop head
 }
 
 // Tick one frame of the Discrete Event Simulation for alarms
 static void tick_preemption() {
-	alarm_node_t * node = NULL;                     // Used in the while loop but cannot be declared in the while condition
-	alarm_list_t * alarms = &event_kernel->alarms;  // Local copy for ease of reading
-	Time currtime = __kernel_get_time();			// Check current time once so we everything "happens at once"
+	alarm_node_t * node = 0p;							// Used in the while loop but cannot be declared in the while condition
+	alarm_list_t * alarms = &event_kernel->alarms;		// Local copy for ease of reading
+	Time currtime = __kernel_get_time();				// Check current time once so everything "happens at once"
 
 	//Loop throught every thing expired
@@ -243,5 +244,5 @@
 	sigaddset( &mask, sig );
 
-	if ( pthread_sigmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) {
+	if ( pthread_sigmask( SIG_UNBLOCK, &mask, 0p ) == -1 ) {
 	    abort( "internal error, pthread_sigmask" );
 	}
@@ -254,5 +255,5 @@
 	sigaddset( &mask, sig );
 
-	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
+	if ( pthread_sigmask( SIG_BLOCK, &mask, 0p ) == -1 ) {
 	    abort( "internal error, pthread_sigmask" );
 	}
@@ -301,9 +302,32 @@
 
 	// Setup proper signal handlers
-	__cfaabi_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO | SA_RESTART );         // CtxSwitch handler
+	__cfaabi_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO | SA_RESTART ); // CtxSwitch handler
 
 	signal_block( SIGALRM );
 
-	pthread_create( &alarm_thread, NULL, alarm_loop, NULL );
+	pthread_attr_t attr;
+	int ret;
+	ret = pthread_attr_init( &attr );					// initialize attribute
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_init failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+
+	size_t stacksize;
+	ret = pthread_attr_getstacksize( &attr, &stacksize ); // default stack size, normally defined by shell limit
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_getstacksize failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+	assert( stacksize >= PTHREAD_STACK_MIN );
+
+	kernelTLS.preemption_state.stack = malloc( stacksize );
+	ret = pthread_attr_setstack( &attr, kernelTLS.preemption_state.stack, stacksize ); 
+	if ( ret ) {
+		abort( "%s : internal error, pthread_attr_setstack failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
+
+	ret = pthread_create( &alarm_thread, &attr, alarm_loop, 0p );
+	if ( ret ) {
+		abort( "%s : internal error, pthread_create failed, error(%d) %s.", __PRETTY_FUNCTION__, ret, strerror( ret ) );
+	} // if
 }
 
@@ -316,5 +340,5 @@
 	sigset_t mask;
 	sigfillset( &mask );
-	sigprocmask( SIG_BLOCK, &mask, NULL );
+	sigprocmask( SIG_BLOCK, &mask, 0p );
 
 	// Notify the alarm thread of the shutdown
@@ -323,5 +347,7 @@
 
 	// Wait for the preemption thread to finish
-	pthread_join( alarm_thread, NULL );
+
+	pthread_join( alarm_thread, 0p );
+	free( kernelTLS.preemption_state.stack );
 
 	// Preemption is now fully stopped
@@ -380,5 +406,5 @@
 	static_assert( sizeof( sigset_t ) == sizeof( cxt->uc_sigmask ), "Expected cxt->uc_sigmask to be of sigset_t" );
 	#endif
-	if ( pthread_sigmask( SIG_SETMASK, (sigset_t *)&(cxt->uc_sigmask), NULL ) == -1 ) {
+	if ( pthread_sigmask( SIG_SETMASK, (sigset_t *)&(cxt->uc_sigmask), 0p ) == -1 ) {
 		abort( "internal error, sigprocmask" );
 	}
@@ -399,5 +425,5 @@
 	sigset_t mask;
 	sigfillset(&mask);
-	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
+	if ( pthread_sigmask( SIG_BLOCK, &mask, 0p ) == -1 ) {
 	    abort( "internal error, pthread_sigmask" );
 	}
@@ -420,5 +446,5 @@
 					{__cfaabi_dbg_print_buffer_decl( " KERNEL: Spurious wakeup %d.\n", err );}
 					continue;
-       			case EINVAL :
+				case EINVAL :
 				 	abort( "Timeout was invalid." );
 				default:
@@ -453,5 +479,5 @@
 EXIT:
 	__cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" );
-	return NULL;
+	return 0p;
 }
 
@@ -466,5 +492,5 @@
 	sigset_t oldset;
 	int ret;
-	ret = pthread_sigmask(0, NULL, &oldset);
+	ret = pthread_sigmask(0, 0p, &oldset);
 	if(ret != 0) { abort("ERROR sigprocmask returned %d", ret); }
 
Index: libcfa/src/fstream.cfa
===================================================================
--- libcfa/src/fstream.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/fstream.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Sep 10 22:19:56 2019
-// Update Count     : 354
+// Last Modified On : Fri Nov 29 06:56:46 2019
+// Update Count     : 355
 //
 
@@ -66,4 +66,8 @@
 } // ?{}
 
+void ^?{}( ofstream & os ) {
+	close( os );
+} // ^?{}
+
 void sepOn( ofstream & os ) { os.sepOnOff = ! getNL( os ); }
 void sepOff( ofstream & os ) { os.sepOnOff = false; }
@@ -195,4 +199,8 @@
 } // ?{}
 
+void ^?{}( ifstream & is ) {
+	close( is );
+} // ^?{}
+
 void nlOn( ifstream & os ) { os.nlOnOff = true; }
 void nlOff( ifstream & os ) { os.nlOnOff = false; }
Index: libcfa/src/fstream.hfa
===================================================================
--- libcfa/src/fstream.hfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/fstream.hfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul 15 18:10:23 2019
-// Update Count     : 167
+// Last Modified On : Fri Nov 29 06:56:02 2019
+// Update Count     : 168
 //
 
@@ -72,4 +72,5 @@
 void ?{}( ofstream & os, const char * name, const char * mode );
 void ?{}( ofstream & os, const char * name );
+void ^?{}( ofstream & os );
 
 extern ofstream & sout, & stdout, & serr, & stderr;		// aliases
@@ -101,4 +102,5 @@
 void ?{}( ifstream & is, const char * name, const char * mode );
 void ?{}( ifstream & is, const char * name );
+void ^?{}( ifstream & is );
 
 extern ifstream & sin, & stdin;							// aliases
Index: libcfa/src/heap.cfa
===================================================================
--- libcfa/src/heap.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/heap.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Dec 19 21:58:35 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Nov 24 17:56:15 2019
-// Update Count     : 638
+// Last Modified On : Fri Nov 29 17:33:58 2019
+// Update Count     : 641
 //
 
@@ -71,23 +71,4 @@
 
 
-// static bool traceHeapTerm = false;
-
-// inline bool traceHeapTerm() {
-// 	return traceHeapTerm;
-// } // traceHeapTerm
-
-// bool traceHeapTermOn() {
-// 	bool temp = traceHeapTerm;
-// 	traceHeapTerm = true;
-// 	return temp;
-// } // traceHeapTermOn
-
-// bool traceHeapTermOff() {
-// 	bool temp = traceHeapTerm;
-// 	traceHeapTerm = false;
-// 	return temp;
-// } // traceHeapTermOff
-
-
 enum {
 	// Define the default extension heap amount in units of bytes. When the uC++ supplied heap reaches the brk address,
@@ -115,9 +96,9 @@
 	if ( allocFree != 0 ) {
 		// DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT.
-		// char helpText[512];
-		// int len = snprintf( helpText, sizeof(helpText), "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n"
-		// 					"Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n",
-		// 					(long int)getpid(), allocFree, allocFree ); // always print the UNIX pid
-		// __cfaabi_dbg_bits_write( STDERR_FILENO, helpText, len ); // print debug/nodebug
+		char helpText[512];
+		int len = snprintf( helpText, sizeof(helpText), "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n"
+							"Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n",
+							(long int)getpid(), allocFree, allocFree ); // always print the UNIX pid
+		__cfaabi_bits_write( STDERR_FILENO, helpText, len ); // print debug/nodebug
 	} // if
 } // prtUnfreed
Index: libcfa/src/interpose.cfa
===================================================================
--- libcfa/src/interpose.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/interpose.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 29 16:10:31 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 21 16:47:02 2019
-// Update Count     : 118
+// Last Modified On : Sat Nov 30 07:09:42 2019
+// Update Count     : 119
 //
 
@@ -196,6 +196,6 @@
 	__cfaabi_bits_print_nolock( STDERR_FILENO, "Stack back trace for: %s\n", messages[0]);
 
-	for ( int i = Start; i < size - abort_lastframe && messages != NULL; i += 1 ) {
-		char * name = NULL, * offset_begin = NULL, * offset_end = NULL;
+	for ( int i = Start; i < size - abort_lastframe && messages != 0p; i += 1 ) {
+		char * name = 0p, * offset_begin = 0p, * offset_end = 0p;
 
 		for ( char * p = messages[i]; *p; ++p ) {
Index: libcfa/src/startup.cfa
===================================================================
--- libcfa/src/startup.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/startup.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,15 +10,15 @@
 // Created On       : Tue Jul 24 16:21:57 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 25 16:42:01 2018
-// Update Count     : 11
+// Last Modified On : Sat Nov 30 07:07:56 2019
+// Update Count     : 13
 //
 
 #include "startup.hfa"
-#include <unistd.h>
-
+#include <time.h>										// tzset
 
 extern "C" {
     static void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) ));
     void __cfaabi_appready_startup( void ) {
+		tzset();										// initialize time global variables
 		#ifdef __CFA_DEBUG__
 		extern void heapAppStart();
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ libcfa/src/stdlib.hfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Nov 22 15:13:14 2019
-// Update Count     : 399
+// Last Modified On : Fri Nov 29 23:08:02 2019
+// Update Count     : 400
 //
 
@@ -210,18 +210,18 @@
 
 static inline {
-	int ato( const char * sptr ) { return (int)strtol( sptr, 0, 10 ); }
-	unsigned int ato( const char * sptr ) { return (unsigned int)strtoul( sptr, 0, 10 ); }
-	long int ato( const char * sptr ) { return strtol( sptr, 0, 10 ); }
-	unsigned long int ato( const char * sptr ) { return strtoul( sptr, 0, 10 ); }
-	long long int ato( const char * sptr ) { return strtoll( sptr, 0, 10 ); }
-	unsigned long long int ato( const char * sptr ) { return strtoull( sptr, 0, 10 ); }
-
-	float ato( const char * sptr ) { return strtof( sptr, 0 ); }
-	double ato( const char * sptr ) { return strtod( sptr, 0 ); }
-	long double ato( const char * sptr ) { return strtold( sptr, 0 ); }
-
-	float _Complex ato( const char * sptr ) { return strto( sptr, NULL ); }
-	double _Complex ato( const char * sptr ) { return strto( sptr, NULL ); }
-	long double _Complex ato( const char * sptr ) { return strto( sptr, NULL ); }
+	int ato( const char * sptr ) { return (int)strtol( sptr, 0p, 10 ); }
+	unsigned int ato( const char * sptr ) { return (unsigned int)strtoul( sptr, 0p, 10 ); }
+	long int ato( const char * sptr ) { return strtol( sptr, 0p, 10 ); }
+	unsigned long int ato( const char * sptr ) { return strtoul( sptr, 0p, 10 ); }
+	long long int ato( const char * sptr ) { return strtoll( sptr, 0p, 10 ); }
+	unsigned long long int ato( const char * sptr ) { return strtoull( sptr, 0p, 10 ); }
+
+	float ato( const char * sptr ) { return strtof( sptr, 0p ); }
+	double ato( const char * sptr ) { return strtod( sptr, 0p ); }
+	long double ato( const char * sptr ) { return strtold( sptr, 0p ); }
+
+	float _Complex ato( const char * sptr ) { return strto( sptr, 0p ); }
+	double _Complex ato( const char * sptr ) { return strto( sptr, 0p ); }
+	long double _Complex ato( const char * sptr ) { return strto( sptr, 0p ); }
 } // distribution
 
Index: tests/concurrent/thread.cfa
===================================================================
--- tests/concurrent/thread.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ tests/concurrent/thread.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -7,6 +7,6 @@
 thread Second { semaphore* lock; };
 
-void ?{}( First  & this, semaphore & lock ) { ((thread&)this){"Thread 1"}; this.lock = &lock; }
-void ?{}( Second & this, semaphore & lock ) { ((thread&)this){"Thread 2"}; this.lock = &lock; }
+void ?{}( First  & this, semaphore & lock ) { ((thread&)this).self_cor.name = "Thread 1"; this.lock = &lock; }
+void ?{}( Second & this, semaphore & lock ) { ((thread&)this).self_cor.name = "Thread 2"; this.lock = &lock; }
 
 void main(First& this) {
Index: tests/time.cfa
===================================================================
--- tests/time.cfa	(revision e71c1d42d8496ccd3b54a96f7ca5013bba8d0198)
+++ tests/time.cfa	(revision 4fa8f1a27914992a8569614b5cf2ae9c88dff55e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Mar 27 17:24:56 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec 20 23:09:21 2018
-// Update Count     : 23
+// Last Modified On : Fri Nov 29 23:05:30 2019
+// Update Count     : 24
 //
 
@@ -20,5 +20,4 @@
 	Duration d1 = 3`h, d2 = 2`s, d3 = 3.375`s, d4 = 12`s, d5 = 1`s + 10_000`ns;
 	sout | d1 | d2 | d3 | d4 | d5;
-	int i;
 	d1 = 0;
 	sout | d1 | d2 | d3;
