Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision 0322865c9a61aaca02c8751474d1058cb1fe7fd7)
+++ src/libcfa/concurrency/invoke.c	(revision f2b124061d7ce33f53a26142cfc9e83dd99f068a)
@@ -80,9 +80,8 @@
       // 2 - Leave its monitor
       // 3 - Disable the interupts
-      // The order of these 3 operations is very important
+      // 4 - Final suspend
+      // The order of these 4 operations is very important
+      //Final suspend, should never return
       __leave_thread_monitor( thrd );
-
-      //Final suspend, should never return
-      __suspend_internal();
       abortf("Resumed dead thread");
 }
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 0322865c9a61aaca02c8751474d1058cb1fe7fd7)
+++ src/libcfa/concurrency/kernel.c	(revision f2b124061d7ce33f53a26142cfc9e83dd99f068a)
@@ -42,5 +42,5 @@
 //-----------------------------------------------------------------------------
 // Kernel storage
-#define KERNEL_STORAGE(T,X) static char X##_storage[sizeof(T)]
+#define KERNEL_STORAGE(T,X) static char X##Storage[sizeof(T)]
 
 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx);
@@ -48,5 +48,5 @@
 KERNEL_STORAGE(system_proc_t, systemProcessor);
 KERNEL_STORAGE(thread_desc, mainThread);
-KERNEL_STORAGE(machine_context_t, mainThread_context);
+KERNEL_STORAGE(machine_context_t, mainThreadCtx);
 
 cluster * systemCluster;
@@ -84,5 +84,5 @@
 
 	this->limit = (void *)(((intptr_t)this->base) - this->size);
-	this->context = &mainThread_context_storage;
+	this->context = &mainThreadCtxStorage;
 	this->top = this->base;
 }
@@ -432,4 +432,13 @@
 }
 
+void LeaveThread(spinlock * lock, thread_desc * thrd) {
+	verify( disable_preempt_count > 0 );
+	this_processor->finish.action_code = thrd ? Release_Schedule : Release;
+	this_processor->finish.lock = lock;
+	this_processor->finish.thrd = thrd;
+
+	suspend();
+}
+
 //=============================================================================================
 // Kernel Setup logic
@@ -443,5 +452,5 @@
 	// SKULLDUGGERY: the mainThread steals the process main thread
 	// which will then be scheduled by the systemProcessor normally
-	mainThread = (thread_desc *)&mainThread_storage;
+	mainThread = (thread_desc *)&mainThreadStorage;
 	current_stack_info_t info;
 	mainThread{ &info };
@@ -450,5 +459,5 @@
 
 	// Initialize the system cluster
-	systemCluster = (cluster *)&systemCluster_storage;
+	systemCluster = (cluster *)&systemClusterStorage;
 	systemCluster{};
 
@@ -457,6 +466,6 @@
 	// Initialize the system processor and the system processor ctx
 	// (the coroutine that contains the processing control flow)
-	systemProcessor = (system_proc_t *)&systemProcessor_storage;
-	systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage };
+	systemProcessor = (system_proc_t *)&systemProcessorStorage;
+	systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtxStorage };
 
 	// Add the main thread to the ready queue
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 0322865c9a61aaca02c8751474d1058cb1fe7fd7)
+++ src/libcfa/concurrency/kernel_private.h	(revision f2b124061d7ce33f53a26142cfc9e83dd99f068a)
@@ -51,4 +51,5 @@
 void BlockInternal(spinlock ** locks, unsigned short count);
 void BlockInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count);
+void LeaveThread(spinlock * lock, thread_desc * thrd);
 
 //-----------------------------------------------------------------------------
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 0322865c9a61aaca02c8751474d1058cb1fe7fd7)
+++ src/libcfa/concurrency/monitor.c	(revision f2b124061d7ce33f53a26142cfc9e83dd99f068a)
@@ -124,9 +124,5 @@
 		thread_desc * new_owner = next_thread( this );
 
-		//We can now let other threads in safely
-		unlock( &this->lock );
-
-		//We need to wake-up the thread
-		if( new_owner) ScheduleThread( new_owner );
+		LeaveThread( &this->lock, new_owner );
 	}
 }
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 0322865c9a61aaca02c8751474d1058cb1fe7fd7)
+++ src/libcfa/concurrency/preemption.c	(revision f2b124061d7ce33f53a26142cfc9e83dd99f068a)
@@ -209,6 +209,6 @@
 	LIB_DEBUG_PRINT_SAFE("Kernel : Starting preemption\n");
 	__kernel_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO );
-	__kernel_sigaction( SIGSEGV, sigHandler_segv     , SA_SIGINFO );
-	__kernel_sigaction( SIGBUS , sigHandler_segv     , SA_SIGINFO );
+	// __kernel_sigaction( SIGSEGV, sigHandler_segv     , SA_SIGINFO );
+	// __kernel_sigaction( SIGBUS , sigHandler_segv     , SA_SIGINFO );
 
 	signal_block( SIGALRM );
@@ -417,19 +417,19 @@
 )
 
-void sigHandler_segv( __CFA_SIGPARMS__ ) {
-	LIB_DEBUG_DO(
-		#ifdef __USE_STREAM__
-		serr 	| "*CFA runtime error* program cfa-cpp terminated with"
-			| (sig == SIGSEGV ? "segment fault." : "bus error.")
-			| endl;
-		#else
-		fprintf( stderr, "*CFA runtime error* program cfa-cpp terminated with %s\n", sig == SIGSEGV ? "segment fault." : "bus error." );
-		#endif
-
-		// skip first 2 stack frames
-		__kernel_backtrace( 1 );
-	)
-	exit( EXIT_FAILURE );
-}
+// void sigHandler_segv( __CFA_SIGPARMS__ ) {
+// 	LIB_DEBUG_DO(
+// 		#ifdef __USE_STREAM__
+// 		serr 	| "*CFA runtime error* program cfa-cpp terminated with"
+// 			| (sig == SIGSEGV ? "segment fault." : "bus error.")
+// 			| endl;
+// 		#else
+// 		fprintf( stderr, "*CFA runtime error* program cfa-cpp terminated with %s\n", sig == SIGSEGV ? "segment fault." : "bus error." );
+// 		#endif
+
+// 		// skip first 2 stack frames
+// 		__kernel_backtrace( 1 );
+// 	)
+// 	exit( EXIT_FAILURE );
+// }
 
 // void sigHandler_abort( __CFA_SIGPARMS__ ) {
