Index: src/libcfa/concurrency/coroutine.c
===================================================================
--- src/libcfa/concurrency/coroutine.c	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/coroutine.c	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,6 +10,6 @@
 // Created On       : Mon Nov 28 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 21 22:34:57 2017
-// Update Count     : 1
+// Last Modified On : Thu Feb  8 16:10:31 2018
+// Update Count     : 4
 //
 
@@ -77,5 +77,5 @@
 		__cfaabi_dbg_debug_do(
 			if ( mprotect( this.storage, pageSize, PROT_READ | PROT_WRITE ) == -1 ) {
-				abortf( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", &this, errno, strerror( errno ) );
+				abort( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", &this, errno, strerror( errno ) );
 			}
 		);
@@ -99,5 +99,5 @@
 // Wrapper for co
 void CoroutineCtxSwitch(coroutine_desc* src, coroutine_desc* dst) {
-	// THREAD_GETMEM( This )->disableInterrupts();
+	disable_interrupts();
 
 	// set state of current coroutine to inactive
@@ -115,5 +115,5 @@
 	src->state = Active;
 
-	// THREAD_GETMEM( This )->enableInterrupts();
+	enable_interrupts( __cfaabi_dbg_ctx );
 } //ctxSwitchDirect
 
@@ -135,10 +135,10 @@
 		__cfaabi_dbg_debug_do(
 			if ( mprotect( storage, pageSize, PROT_NONE ) == -1 ) {
-				abortf( "(uMachContext &)%p.createContext() : internal error, mprotect failure, error(%d) %s.", this, (int)errno, strerror( (int)errno ) );
+				abort( "(uMachContext &)%p.createContext() : internal error, mprotect failure, error(%d) %s.", this, (int)errno, strerror( (int)errno ) );
 			} // if
 		);
 
 		if ( (intptr_t)storage == 0 ) {
-			abortf( "Attempt to allocate %d bytes of storage for coroutine or task execution-state but insufficient memory available.", size );
+			abort( "Attempt to allocate %zd bytes of storage for coroutine or task execution-state but insufficient memory available.", size );
 		} // if
 
Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/invoke.c	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb  6 23:00:57 2018
-// Update Count     : 3
+// Last Modified On : Fri Feb  9 16:37:42 2018
+// Update Count     : 5
 //
 
@@ -51,5 +51,5 @@
 	//Final suspend, should never return
 	__leave_coroutine();
-	abortf( "Resumed dead coroutine" );
+	__cabi_abort( "Resumed dead coroutine" );
 }
 
@@ -81,5 +81,5 @@
 	//Final suspend, should never return
 	__leave_thread_monitor( thrd );
-	abortf( "Resumed dead thread" );
+	__cabi_abort( "Resumed dead thread" );
 }
 
@@ -93,5 +93,5 @@
 	struct coStack_t* stack = &get_coroutine( this )->stack;
 
-#if defined( __i386__ )
+#if defined( __i386 )
 
 	struct FakeStack {
@@ -114,5 +114,5 @@
 	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7
 
-#elif defined( __x86_64__ )
+#elif defined( __x86_64 )
 
 	struct FakeStack {
@@ -150,6 +150,7 @@
 	fs->arg[0] = this;
 	fs->arg[1] = invoke;
+
 #else
-	#error Only __i386__ and __x86_64__ is supported for threads in cfa
+	#error uknown hardware architecture
 #endif
 }
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/invoke.h	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 23 14:55:46 2018
-// Update Count     : 3
+// Last Modified On : Fri Feb  9 14:41:55 2018
+// Update Count     : 6
 //
 
@@ -202,13 +202,13 @@
 	void CtxSwitch( void * from, void * to ) asm ("CtxSwitch");
 
-	#if   defined( __x86_64__ )
+	#if   defined( __i386 )
+	#define CtxGet( ctx ) __asm__ ( \
+			"movl %%esp,%0\n"   \
+			"movl %%ebp,%1\n"   \
+		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
+	#elif defined( __x86_64 )
 	#define CtxGet( ctx ) __asm__ ( \
 			"movq %%rsp,%0\n"   \
 			"movq %%rbp,%1\n"   \
-		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
-	#elif defined( __i386__ )
-	#define CtxGet( ctx ) __asm__ ( \
-			"movl %%esp,%0\n"   \
-			"movl %%ebp,%1\n"   \
 		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
 	#elif defined( __ARM_ARCH )
@@ -217,4 +217,6 @@
 			"mov %1,%%r11\n"   \
 		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
+	#else
+		#error unknown hardware architecture
 	#endif
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/kernel.c	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,11 +10,10 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb  6 21:51:26 2018
-// Update Count     : 4
+// Last Modified On : Thu Feb  8 23:52:19 2018
+// Update Count     : 5
 //
 
 //C Includes
 #include <stddef.h>
-#define ftype `ftype`
 extern "C" {
 #include <stdio.h>
@@ -24,5 +23,4 @@
 #include <unistd.h>
 }
-#undef ftype
 
 //CFA Includes
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/monitor.c	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,6 +10,6 @@
 // Created On       : Thd Feb 23 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul 31 14:59:05 2017
-// Update Count     : 3
+// Last Modified On : Thu Feb  8 16:12:20 2018
+// Update Count     : 4
 //
 
@@ -87,5 +87,5 @@
 		thread_desc * thrd = this_thread;
 
-		__cfaabi_dbg_print_safe("Kernel : %10p Entering mon %p (%p)\n", thrd, this, this->owner);
+		__cfaabi_dbg_print_safe( "Kernel : %10p Entering mon %p (%p)\n", thrd, this, this->owner);
 
 		if( !this->owner ) {
@@ -93,5 +93,5 @@
 			set_owner( this, thrd );
 
-			__cfaabi_dbg_print_safe("Kernel :  mon is free \n");
+			__cfaabi_dbg_print_safe( "Kernel :  mon is free \n" );
 		}
 		else if( this->owner == thrd) {
@@ -99,5 +99,5 @@
 			this->recursion += 1;
 
-			__cfaabi_dbg_print_safe("Kernel :  mon already owned \n");
+			__cfaabi_dbg_print_safe( "Kernel :  mon already owned \n" );
 		}
 		else if( is_accepted( this, group) ) {
@@ -108,8 +108,8 @@
 			reset_mask( this );
 
-			__cfaabi_dbg_print_safe("Kernel :  mon accepts \n");
+			__cfaabi_dbg_print_safe( "Kernel :  mon accepts \n" );
 		}
 		else {
-			__cfaabi_dbg_print_safe("Kernel :  blocking \n");
+			__cfaabi_dbg_print_safe( "Kernel :  blocking \n" );
 
 			// Some one else has the monitor, wait in line for it
@@ -118,5 +118,5 @@
 			BlockInternal( &this->lock );
 
-			__cfaabi_dbg_print_safe("Kernel : %10p Entered  mon %p\n", thrd, this);
+			__cfaabi_dbg_print_safe( "Kernel : %10p Entered  mon %p\n", thrd, this);
 
 			// BlockInternal will unlock spinlock, no need to unlock ourselves
@@ -124,5 +124,5 @@
 		}
 
-		__cfaabi_dbg_print_safe("Kernel : %10p Entered  mon %p\n", thrd, this);
+		__cfaabi_dbg_print_safe( "Kernel : %10p Entered  mon %p\n", thrd, this);
 
 		// Release the lock and leave
@@ -136,9 +136,9 @@
 		thread_desc * thrd = this_thread;
 
-		__cfaabi_dbg_print_safe("Kernel : %10p Entering dtor for mon %p (%p)\n", thrd, this, this->owner);
+		__cfaabi_dbg_print_safe( "Kernel : %10p Entering dtor for mon %p (%p)\n", thrd, this, this->owner);
 
 
 		if( !this->owner ) {
-			__cfaabi_dbg_print_safe("Kernel : Destroying free mon %p\n", this);
+			__cfaabi_dbg_print_safe( "Kernel : Destroying free mon %p\n", this);
 
 			// No one has the monitor, just take it
@@ -151,5 +151,5 @@
 			// We already have the monitor... but where about to destroy it so the nesting will fail
 			// Abort!
-			abortf("Attempt to destroy monitor %p by thread \"%.256s\" (%p) in nested mutex.");
+			abort( "Attempt to destroy monitor %p by thread \"%.256s\" (%p) in nested mutex." );
 		}
 
@@ -158,5 +158,5 @@
 		__monitor_group_t group = { &this, 1, func };
 		if( is_accepted( this, group) ) {
-			__cfaabi_dbg_print_safe("Kernel :  mon accepts dtor, block and signal it \n");
+			__cfaabi_dbg_print_safe( "Kernel :  mon accepts dtor, block and signal it \n" );
 
 			// Wake the thread that is waiting for this
@@ -177,5 +177,5 @@
 		}
 		else {
-			__cfaabi_dbg_print_safe("Kernel :  blocking \n");
+			__cfaabi_dbg_print_safe( "Kernel :  blocking \n" );
 
 			wait_ctx( this_thread, 0 )
@@ -190,5 +190,5 @@
 		}
 
-		__cfaabi_dbg_print_safe("Kernel : Destroying %p\n", this);
+		__cfaabi_dbg_print_safe( "Kernel : Destroying %p\n", this);
 
 	}
@@ -199,5 +199,5 @@
 		lock( this->lock __cfaabi_dbg_ctx2 );
 
-		__cfaabi_dbg_print_safe("Kernel : %10p Leaving mon %p (%p)\n", this_thread, this, this->owner);
+		__cfaabi_dbg_print_safe( "Kernel : %10p Leaving mon %p (%p)\n", this_thread, this, this->owner);
 
 		verifyf( this_thread == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", this_thread, this->owner, this->recursion, this );
@@ -209,5 +209,5 @@
 		// it means we don't need to do anything
 		if( this->recursion != 0) {
-			__cfaabi_dbg_print_safe("Kernel :  recursion still %d\n", this->recursion);
+			__cfaabi_dbg_print_safe( "Kernel :  recursion still %d\n", this->recursion);
 			unlock( this->lock );
 			return;
@@ -228,8 +228,8 @@
 		__cfaabi_dbg_debug_do(
 			if( this_thread != this->owner ) {
-				abortf("Destroyed monitor %p has inconsistent owner, expected %p got %p.\n", this, this_thread, this->owner);
+				abort( "Destroyed monitor %p has inconsistent owner, expected %p got %p.\n", this, this_thread, this->owner);
 			}
 			if( this->recursion != 1 ) {
-				abortf("Destroyed monitor %p has %d outstanding nested calls.\n", this, this->recursion - 1);
+				abort( "Destroyed monitor %p has %d outstanding nested calls.\n", this, this->recursion - 1);
 			}
 		)
@@ -256,5 +256,5 @@
 		// If we haven't left the last level of recursion
 		// it must mean there is an error
-		if( this->recursion != 0) { abortf("Thread internal monitor has unbalanced recursion"); }
+		if( this->recursion != 0) { abort( "Thread internal monitor has unbalanced recursion" ); }
 
 		// Fetch the next thread, can be null
@@ -302,5 +302,5 @@
 	(this_thread->monitors){m, count, func};
 
-	// __cfaabi_dbg_print_safe("MGUARD : enter %d\n", count);
+	// __cfaabi_dbg_print_safe( "MGUARD : enter %d\n", count);
 
 	// Enter the monitors in order
@@ -308,5 +308,5 @@
 	enter( group );
 
-	// __cfaabi_dbg_print_safe("MGUARD : entered\n");
+	// __cfaabi_dbg_print_safe( "MGUARD : entered\n" );
 }
 
@@ -314,10 +314,10 @@
 // Dtor for monitor guard
 void ^?{}( monitor_guard_t & this ) {
-	// __cfaabi_dbg_print_safe("MGUARD : leaving %d\n", this.count);
+	// __cfaabi_dbg_print_safe( "MGUARD : leaving %d\n", this.count);
 
 	// Leave the monitors in order
 	leave( this.m, this.count );
 
-	// __cfaabi_dbg_print_safe("MGUARD : left\n");
+	// __cfaabi_dbg_print_safe( "MGUARD : left\n" );
 
 	// Restore thread context
@@ -427,10 +427,10 @@
 		thread_desc * this_thrd = this_thread;
 		if ( this.monitor_count != this_thrd->monitors.size ) {
-			abortf( "Signal on condition %p made with different number of monitor(s), expected %i got %i", &this, this.monitor_count, this_thrd->monitors.size );
+			abort( "Signal on condition %p made with different number of monitor(s), expected %i got %i", &this, this.monitor_count, this_thrd->monitors.size );
 		}
 
 		for(int i = 0; i < this.monitor_count; i++) {
 			if ( this.monitors[i] != this_thrd->monitors[i] ) {
-				abortf( "Signal on condition %p made with different monitor, expected %p got %i", &this, this.monitors[i], this_thrd->monitors[i] );
+				abort( "Signal on condition %p made with different monitor, expected %p got %i", &this, this.monitors[i], this_thrd->monitors[i] );
 			}
 		}
@@ -534,5 +534,5 @@
 	if(actual_count == 0) return;
 
-	__cfaabi_dbg_print_buffer_local( "Kernel : waitfor internal proceeding\n");
+	__cfaabi_dbg_print_buffer_local( "Kernel : waitfor internal proceeding\n" );
 
 	// Create storage for monitor context
@@ -551,5 +551,5 @@
 			__acceptable_t& accepted = mask[index];
 			if( accepted.is_dtor ) {
-				__cfaabi_dbg_print_buffer_local( "Kernel : dtor already there\n");
+				__cfaabi_dbg_print_buffer_local( "Kernel : dtor already there\n" );
 				verifyf( accepted.size == 1,  "ERROR: Accepted dtor has more than 1 mutex parameter." );
 
@@ -563,5 +563,5 @@
 			}
 			else {
-				__cfaabi_dbg_print_buffer_local( "Kernel : thread present, baton-passing\n");
+				__cfaabi_dbg_print_buffer_local( "Kernel : thread present, baton-passing\n" );
 
 				// Create the node specific to this wait operation
@@ -577,5 +577,5 @@
 					}
 				#endif
-				__cfaabi_dbg_print_buffer_local( "\n");
+				__cfaabi_dbg_print_buffer_local( "\n" );
 
 				// Set the owners to be the next thread
@@ -588,5 +588,5 @@
 				monitor_restore;
 
-				__cfaabi_dbg_print_buffer_local( "Kernel : thread present, returned\n");
+				__cfaabi_dbg_print_buffer_local( "Kernel : thread present, returned\n" );
 			}
 
@@ -598,5 +598,5 @@
 
 	if( duration == 0 ) {
-		__cfaabi_dbg_print_buffer_local( "Kernel : non-blocking, exiting\n");
+		__cfaabi_dbg_print_buffer_local( "Kernel : non-blocking, exiting\n" );
 
 		unlock_all( locks, count );
@@ -607,7 +607,7 @@
 
 
-	verifyf( duration < 0, "Timeout on waitfor statments not supported yet.");
-
-	__cfaabi_dbg_print_buffer_local( "Kernel : blocking waitfor\n");
+	verifyf( duration < 0, "Timeout on waitfor statments not supported yet." );
+
+	__cfaabi_dbg_print_buffer_local( "Kernel : blocking waitfor\n" );
 
 	// Create the node specific to this wait operation
@@ -631,5 +631,5 @@
 	monitor_restore;
 
-	__cfaabi_dbg_print_buffer_local( "Kernel : exiting\n");
+	__cfaabi_dbg_print_buffer_local( "Kernel : exiting\n" );
 
 	__cfaabi_dbg_print_buffer_local( "Kernel : accepted %d\n", *mask.accepted);
@@ -640,5 +640,5 @@
 
 static inline void set_owner( monitor_desc * this, thread_desc * owner ) {
-	// __cfaabi_dbg_print_safe("Kernal :   Setting owner of %p to %p ( was %p)\n", this, owner, this->owner );
+	// __cfaabi_dbg_print_safe( "Kernal :   Setting owner of %p to %p ( was %p)\n", this, owner, this->owner );
 
 	//Pass the monitor appropriately
@@ -672,5 +672,5 @@
 static inline thread_desc * next_thread( monitor_desc * this ) {
 	//Check the signaller stack
-	__cfaabi_dbg_print_safe("Kernel :  mon %p AS-stack top %p\n", this, this->signal_stack.top);
+	__cfaabi_dbg_print_safe( "Kernel :  mon %p AS-stack top %p\n", this, this->signal_stack.top);
 	__condition_criterion_t * urgent = pop( this->signal_stack );
 	if( urgent ) {
@@ -814,5 +814,5 @@
 	thread_desc * thrd = this_thread;
 	if( !this.monitors ) {
-		// __cfaabi_dbg_print_safe("Branding\n");
+		// __cfaabi_dbg_print_safe( "Branding\n" );
 		assertf( thrd->monitors.data != NULL, "No current monitor to brand condition %p", thrd->monitors.data );
 		this.monitor_count = thrd->monitors.size;
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision c40e7c50c63d8609881909b05381968059fbeef7)
+++ src/libcfa/concurrency/preemption.c	(revision fd062a669c511d754aa9aa07d1b77ba798e858b2)
@@ -10,11 +10,10 @@
 // Created On       : Mon Jun 5 14:20:42 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb  6 15:00:36 2018
-// Update Count     : 10
+// Last Modified On : Fri Feb  9 16:38:13 2018
+// Update Count     : 14
 //
 
 #include "preemption.h"
 
-#define ftype `ftype`
 extern "C" {
 #include <errno.h>
@@ -23,5 +22,4 @@
 #include <unistd.h>
 }
-#undef ftype
 
 #include "bits/signal.h"
@@ -50,10 +48,12 @@
 
 // Machine specific register name
-#if   defined(__x86_64__)
+#if   defined( __i386 )
+#define CFA_REG_IP gregs[REG_EIP]
+#elif defined( __x86_64 )
 #define CFA_REG_IP gregs[REG_RIP]
-#elif defined(__i386__)
-#define CFA_REG_IP gregs[REG_EIP]
-#elif defined(__ARM_ARCH__)
+#elif defined( __ARM_ARCH )
 #define CFA_REG_IP arm_pc
+#else
+#error unknown hardware architecture
 #endif
 
@@ -197,5 +197,5 @@
 
 	if ( pthread_sigmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) {
-	    abortf( "internal error, pthread_sigmask" );
+	    abort( "internal error, pthread_sigmask" );
 	}
 }
@@ -208,5 +208,5 @@
 
 	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
-	    abortf( "internal error, pthread_sigmask" );
+	    abort( "internal error, pthread_sigmask" );
 	}
 }
@@ -247,5 +247,5 @@
 // Called from kernel_startup
 void kernel_start_preemption() {
-	__cfaabi_dbg_print_safe("Kernel : Starting preemption\n");
+	__cfaabi_dbg_print_safe( "Kernel : Starting preemption\n" );
 
 	// Start with preemption disabled until ready
@@ -268,5 +268,5 @@
 // Called from kernel_shutdown
 void kernel_stop_preemption() {
-	__cfaabi_dbg_print_safe("Kernel : Preemption stopping\n");
+	__cfaabi_dbg_print_safe( "Kernel : Preemption stopping\n" );
 
 	// Block all signals since we are already shutting down
@@ -284,5 +284,5 @@
 	// Preemption is now fully stopped
 
-	__cfaabi_dbg_print_safe("Kernel : Preemption stopped\n");
+	__cfaabi_dbg_print_safe( "Kernel : Preemption stopped\n" );
 }
 
@@ -322,5 +322,5 @@
 		case PREEMPT_TERMINATE: verify(this_processor->do_terminate);
 		default:
-			abortf( "internal error, signal value is %d", sfp->si_value.sival_int );
+			abort( "internal error, signal value is %d", sfp->si_value.sival_int );
 	}
 
@@ -328,5 +328,5 @@
 	if( !preemption_ready() ) { return; }
 
-	__cfaabi_dbg_print_buffer_decl(" KERNEL: preempting core %p (%p).\n", this_processor, this_thread);
+	__cfaabi_dbg_print_buffer_decl( " KERNEL: preempting core %p (%p).\n", this_processor, this_thread);
 
 	preemption_in_progress = true;                      // Sync flag : prevent recursive calls to the signal handler
@@ -348,5 +348,5 @@
 
 	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
-	    abortf( "internal error, pthread_sigmask" );
+	    abort( "internal error, pthread_sigmask" );
 	}
 
@@ -365,7 +365,7 @@
 					continue;
        			case EINVAL :
-				 	abortf("Timeout was invalid.");
+				 	abort( "Timeout was invalid." );
 				default:
-				 	abortf("Unhandled error %d", err);
+				 	abort( "Unhandled error %d", err);
 			}
 		}
@@ -374,5 +374,5 @@
 		assertf(sig == SIGALRM, "Kernel Internal Error, sigwait: Unexpected signal %d (%d : %d)\n", sig, info.si_code, info.si_value.sival_int);
 
-		// __cfaabi_dbg_print_safe("Kernel : Caught alarm from %d with %d\n", info.si_code, info.si_value.sival_int );
+		// __cfaabi_dbg_print_safe( "Kernel : Caught alarm from %d with %d\n", info.si_code, info.si_value.sival_int );
 		// Switch on the code (a.k.a. the sender) to
 		switch( info.si_code )
@@ -382,5 +382,5 @@
 		case SI_TIMER:
 		case SI_KERNEL:
-			// __cfaabi_dbg_print_safe("Kernel : Preemption thread tick\n");
+			// __cfaabi_dbg_print_safe( "Kernel : Preemption thread tick\n" );
 			lock( event_kernel->lock __cfaabi_dbg_ctx2 );
 			tick_preemption();
@@ -396,5 +396,5 @@
 
 EXIT:
-	__cfaabi_dbg_print_safe("Kernel : Preemption thread stopping\n");
+	__cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" );
 	return NULL;
 }
