Index: src/libcfa/bits/locks.h
===================================================================
--- src/libcfa/bits/locks.h	(revision 6e0f4bd410ae9434db47d2108332267a1d9ec2aa)
+++ src/libcfa/bits/locks.h	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
@@ -58,4 +58,9 @@
 
 #ifdef __cforall
+	extern "C" {
+		extern void disable_interrupts();
+		extern void enable_interrupts_noPoll();
+	}
+
 	extern void yield( unsigned int );
 	extern thread_local struct thread_desc *    volatile this_thread;
@@ -68,10 +73,11 @@
 	static inline _Bool try_lock  ( __spinlock_t & this __cfaabi_dbg_ctx_param2 ) {
 		_Bool result = __lock_test_and_test_and_set( this.lock );
-		__cfaabi_dbg_debug_do(
-			if( result ) {
+		if( result ) {
+			disable_interrupts();
+			__cfaabi_dbg_debug_do(
 				this.prev_name = caller;
 				this.prev_thrd = this_thread;
-			}
-		)
+			)
+		}
 		return result;
 	}
@@ -99,4 +105,5 @@
 			#endif
 		}
+		disable_interrupts();
 		__cfaabi_dbg_debug_do(
 			this.prev_name = caller;
@@ -111,4 +118,5 @@
 			yield( i );
 		}
+		disable_interrupts();
 		__cfaabi_dbg_debug_do(
 			this.prev_name = caller;
@@ -119,4 +127,5 @@
 	static inline void unlock( __spinlock_t & this ) {
 		__lock_release( this.lock );
+		enable_interrupts_noPoll();
 	}
 #endif
Index: src/libcfa/bits/signal.h
===================================================================
--- src/libcfa/bits/signal.h	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
+++ src/libcfa/bits/signal.h	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
@@ -0,0 +1,65 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// bits/signal.h -- Helper functions and defines to use signals
+//
+// Author           : Thierry Delisle
+// Created On       : Thu Jan 25 16:06:29 2018
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#pragma once
+
+#include "bits/debug.h"
+#include "bits/defs.h"
+
+extern "C" {
+#include <errno.h>
+#define __USE_GNU
+#include <signal.h>
+#undef __USE_GNU
+#include <stdlib.h>
+#include <string.h>
+}
+
+// Short hands for signal context information
+#define __CFA_SIGCXT__ ucontext_t *
+#define __CFA_SIGPARMS__ __attribute__((unused)) int sig, __attribute__((unused)) siginfo_t *sfp, __attribute__((unused)) __CFA_SIGCXT__ cxt
+
+// Sigaction wrapper : register an signal handler
+static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags ) {
+	struct sigaction act;
+
+	act.sa_sigaction = (void (*)(int, siginfo_t *, void *))handler;
+	act.sa_flags = flags;
+
+	if ( sigaction( sig, &act, NULL ) == -1 ) {
+		__cfaabi_dbg_print_buffer_decl(
+			" __kernel_sigaction( sig:%d, handler:%p, flags:%d ), problem installing signal handler, error(%d) %s.\n",
+			sig, handler, flags, errno, strerror( errno )
+		);
+		_exit( EXIT_FAILURE );
+	}
+}
+
+// Sigaction wrapper : restore default handler
+static void __kernel_sigdefault( int sig ) {
+	struct sigaction act;
+
+	act.sa_handler = SIG_DFL;
+	act.sa_flags = 0;
+	sigemptyset( &act.sa_mask );
+
+	if ( sigaction( sig, &act, NULL ) == -1 ) {
+		__cfaabi_dbg_print_buffer_decl(
+			" __kernel_sigdefault( sig:%d ), problem reseting signal handler, error(%d) %s.\n",
+			sig, errno, strerror( errno )
+		);
+		_exit( EXIT_FAILURE );
+	}
+}
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 6e0f4bd410ae9434db47d2108332267a1d9ec2aa)
+++ src/libcfa/concurrency/kernel.c	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
@@ -516,4 +516,9 @@
 }
 
+//=============================================================================================
+// Unexpected Terminating logic
+//=============================================================================================
+
+
 static __spinlock_t kernel_abort_lock;
 static __spinlock_t kernel_debug_lock;
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 6e0f4bd410ae9434db47d2108332267a1d9ec2aa)
+++ src/libcfa/concurrency/preemption.c	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
@@ -19,8 +19,4 @@
 extern "C" {
 #include <errno.h>
-#include <execinfo.h>
-#define __USE_GNU
-#include <signal.h>
-#undef __USE_GNU
 #include <stdio.h>
 #include <string.h>
@@ -29,7 +25,5 @@
 #undef ftype
 
-#ifdef __USE_STREAM__
-#include "fstream"
-#endif
+#include "bits/signal.h"
 
 //TODO move to defaults
@@ -40,8 +34,4 @@
 	return __CFA_DEFAULT_PREEMPTION__;
 }
-
-// Short hands for signal context information
-#define __CFA_SIGCXT__ ucontext_t *
-#define __CFA_SIGPARMS__ __attribute__((unused)) int sig, __attribute__((unused)) siginfo_t *sfp, __attribute__((unused)) __CFA_SIGCXT__ cxt
 
 // FwdDeclarations : timeout handlers
@@ -53,7 +43,4 @@
 void sigHandler_segv     ( __CFA_SIGPARMS__ );
 void sigHandler_abort    ( __CFA_SIGPARMS__ );
-
-// FwdDeclarations : sigaction wrapper
-static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags );
 
 // FwdDeclarations : alarm thread main
@@ -246,6 +233,4 @@
 	// Setup proper signal handlers
 	__kernel_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO | SA_RESTART );         // CtxSwitch handler
-	// __kernel_sigaction( SIGSEGV, sigHandler_segv     , SA_SIGINFO );      // Failure handler
-	// __kernel_sigaction( SIGBUS , sigHandler_segv     , SA_SIGINFO );      // Failure handler
 
 	signal_block( SIGALRM );
@@ -380,133 +365,4 @@
 }
 
-// Sigaction wrapper : register an signal handler
-static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags ) {
-	struct sigaction act;
-
-	act.sa_sigaction = (void (*)(int, siginfo_t *, void *))handler;
-	act.sa_flags = flags;
-
-	if ( sigaction( sig, &act, NULL ) == -1 ) {
-		__cfaabi_dbg_print_buffer_decl(
-			" __kernel_sigaction( sig:%d, handler:%p, flags:%d ), problem installing signal handler, error(%d) %s.\n",
-			sig, handler, flags, errno, strerror( errno )
-		);
-		_exit( EXIT_FAILURE );
-	}
-}
-
-// Sigaction wrapper : restore default handler
-static void __kernel_sigdefault( int sig ) {
-	struct sigaction act;
-
-	act.sa_handler = SIG_DFL;
-	act.sa_flags = 0;
-	sigemptyset( &act.sa_mask );
-
-	if ( sigaction( sig, &act, NULL ) == -1 ) {
-		__cfaabi_dbg_print_buffer_decl(
-			" __kernel_sigdefault( sig:%d ), problem reseting signal handler, error(%d) %s.\n",
-			sig, errno, strerror( errno )
-		);
-		_exit( EXIT_FAILURE );
-	}
-}
-
-//=============================================================================================
-// Terminating Signals logic
-//=============================================================================================
-
-__cfaabi_dbg_debug_do(
-	static void __kernel_backtrace( int start ) {
-		// skip first N stack frames
-
-		enum { Frames = 50 };
-		void * array[Frames];
-		int size = backtrace( array, Frames );
-		char ** messages = backtrace_symbols( array, size );
-
-		// find executable name
-		*index( messages[0], '(' ) = '\0';
-		#ifdef __USE_STREAM__
-		serr | "Stack back trace for:" | messages[0] | endl;
-		#else
-		fprintf( stderr, "Stack back trace for: %s\n", messages[0]);
-		#endif
-
-		// skip last 2 stack frames after main
-		for ( int i = start; i < size && messages != NULL; i += 1 ) {
-			char * name = NULL;
-			char * offset_begin = NULL;
-			char * offset_end = NULL;
-
-			for ( char *p = messages[i]; *p; ++p ) {
-				// find parantheses and +offset
-				if ( *p == '(' ) {
-					name = p;
-				}
-				else if ( *p == '+' ) {
-					offset_begin = p;
-				}
-				else if ( *p == ')' ) {
-					offset_end = p;
-					break;
-				}
-			}
-
-			// if line contains symbol print it
-			int frameNo = i - start;
-			if ( name && offset_begin && offset_end && name < offset_begin ) {
-				// delimit strings
-				*name++ = '\0';
-				*offset_begin++ = '\0';
-				*offset_end++ = '\0';
-
-				#ifdef __USE_STREAM__
-				serr 	| "("  | frameNo | ")" | messages[i] | ":"
-					| name | "+" | offset_begin | offset_end | endl;
-				#else
-				fprintf( stderr, "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end);
-				#endif
-			}
-			// otherwise, print the whole line
-			else {
-				#ifdef __USE_STREAM__
-				serr | "(" | frameNo | ")" | messages[i] | endl;
-				#else
-				fprintf( stderr, "(%i) %s\n", frameNo, messages[i] );
-				#endif
-			}
-		}
-
-		free( messages );
-	}
-)
-
-// void sigHandler_segv( __CFA_SIGPARMS__ ) {
-// 	__cfaabi_dbg_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__ ) {
-// 	// skip first 6 stack frames
-// 	__cfaabi_dbg_debug_do( __kernel_backtrace( 6 ); )
-
-// 	// reset default signal handler
-// 	__kernel_sigdefault( SIGABRT );
-
-// 	raise( SIGABRT );
-// }
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/interpose.c
===================================================================
--- src/libcfa/interpose.c	(revision 6e0f4bd410ae9434db47d2108332267a1d9ec2aa)
+++ src/libcfa/interpose.c	(revision dbe9b08cb6411af77959a6bea07d14db2c8e18ed)
@@ -22,8 +22,13 @@
 #include <dlfcn.h>
 #include <unistd.h>
+#define __USE_GNU
+#include <signal.h>
+#undef __USE_GNU
+#include <execinfo.h>
 }
 
 #include "bits/debug.h"
 #include "bits/defs.h"
+#include "bits/signal.h"
 #include "startup.h"
 
@@ -84,4 +89,7 @@
 #define INIT_REALRTN( x, ver ) assign_ptr( (void**)&libc_##x, #x, ver)
 
+void sigHandler_segv ( __CFA_SIGPARMS__ );
+void sigHandler_abort( __CFA_SIGPARMS__ );
+
 void interpose_startup() {
 	const char *version = NULL;
@@ -89,5 +97,12 @@
 	INIT_REALRTN( abort, version );
 	INIT_REALRTN( exit, version );
-}
+
+	__kernel_sigaction( SIGSEGV, sigHandler_segv     , SA_SIGINFO );      // Failure handler
+	__kernel_sigaction( SIGBUS , sigHandler_segv     , SA_SIGINFO );      // Failure handler
+}
+
+//=============================================================================================
+// Terminating Signals logic
+//=============================================================================================
 
 extern "C" {
@@ -137,4 +152,71 @@
 		libc_abort();
 	}
+}
+
+// skip first 6 stack frames by default
+static void __kernel_backtrace() {
+	// skip first N stack frames
+	int start = 6;
+
+	enum { Frames = 50 };
+	void * array[Frames];
+	int size = backtrace( array, Frames );
+	char ** messages = backtrace_symbols( array, size );
+
+	// find executable name
+	*index( messages[0], '(' ) = '\0';
+	__cfaabi_dbg_bits_print_nolock( "Stack back trace for: %s\n", messages[0]);
+
+	// skip last 2 stack frames after main
+	for ( int i = start; i < size && messages != NULL; i += 1 ) {
+		char * name = NULL;
+		char * offset_begin = NULL;
+		char * offset_end = NULL;
+
+		for ( char *p = messages[i]; *p; ++p ) {
+			// find parantheses and +offset
+			if ( *p == '(' ) {
+				name = p;
+			}
+			else if ( *p == '+' ) {
+				offset_begin = p;
+			}
+			else if ( *p == ')' ) {
+				offset_end = p;
+				break;
+			}
+		}
+
+		// if line contains symbol print it
+		int frameNo = i - start;
+		if ( name && offset_begin && offset_end && name < offset_begin ) {
+			// delimit strings
+			*name++ = '\0';
+			*offset_begin++ = '\0';
+			*offset_end++ = '\0';
+
+			__cfaabi_dbg_bits_print_nolock( "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end);
+		}
+		// otherwise, print the whole line
+		else {
+			__cfaabi_dbg_bits_print_nolock( "(%i) %s\n", frameNo, messages[i] );
+		}
+	}
+
+	free( messages );
+}
+
+void sigHandler_segv( __CFA_SIGPARMS__ ) {
+	// skip first only 1 stack frames in case of segfault.
+	abortf( "*CFA runtime error* program cfa-cpp terminated with %s\n", sig == SIGSEGV ? "segment fault." : "bus error." );
+}
+
+void sigHandler_abort( __CFA_SIGPARMS__ ) {
+	__kernel_backtrace();
+
+	// reset default signal handler
+	__kernel_sigdefault( SIGABRT );
+
+	raise( SIGABRT );
 }
 
