Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/concurrency/io.cfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -390,6 +390,4 @@
 			block++;
 
-			abort( "Kernel I/O : all submit queue entries used, yielding\n" );
-
 			yield();
 		}
Index: libcfa/src/concurrency/io/setup.cfa
===================================================================
--- libcfa/src/concurrency/io/setup.cfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/concurrency/io/setup.cfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -42,4 +42,7 @@
 	void ^?{}(io_context & this, bool cluster_context) {}
 
+	void register_fixed_files( io_context &, int *, unsigned ) {}
+	void register_fixed_files( cluster    &, int *, unsigned ) {}
+
 #else
 	#include <errno.h>
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/concurrency/kernel.cfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -140,4 +140,9 @@
 		preemption_scope scope = { this };
 
+		#if !defined(__CFA_NO_STATISTICS__)
+			unsigned long long last_tally = rdtscl();
+		#endif
+
+
 		__cfadbg_print_safe(runtime_core, "Kernel : core %p started\n", this);
 
@@ -206,4 +211,12 @@
 			// Are we done?
 			if( __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST) ) break MAIN_LOOP;
+
+			#if !defined(__CFA_NO_STATISTICS__)
+				unsigned long long curr = rdtscl();
+				if(curr > (last_tally + 500000000)) {
+					__tally_stats(this->cltr->stats, __cfaabi_tls.this_stats);
+					last_tally = curr;
+				}
+			#endif
 		}
 
@@ -611,30 +624,24 @@
 // Unexpected Terminating logic
 //=============================================================================================
-static __spinlock_t kernel_abort_lock;
-static bool kernel_abort_called = false;
+
+extern "C" {
+	extern void __cfaabi_real_abort(void);
+}
+static volatile bool kernel_abort_called = false;
 
 void * kernel_abort(void) __attribute__ ((__nothrow__)) {
 	// abort cannot be recursively entered by the same or different processors because all signal handlers return when
 	// the globalAbort flag is true.
-	lock( kernel_abort_lock __cfaabi_dbg_ctx2 );
+	bool first = __atomic_test_and_set( &kernel_abort_called, __ATOMIC_SEQ_CST);
+
+	// first task to abort ?
+	if ( !first ) {
+		// We aren't the first to abort.
+		// I give up, just let C handle it
+		__cfaabi_real_abort();
+	}
 
 	// disable interrupts, it no longer makes sense to try to interrupt this processor
 	disable_interrupts();
-
-	// first task to abort ?
-	if ( kernel_abort_called ) {			// not first task to abort ?
-		unlock( kernel_abort_lock );
-
-		sigset_t mask;
-		sigemptyset( &mask );
-		sigaddset( &mask, SIGALRM );		// block SIGALRM signals
-		sigaddset( &mask, SIGUSR1 );		// block SIGALRM signals
-		sigsuspend( &mask );				// block the processor to prevent further damage during abort
-		_exit( EXIT_FAILURE );				// if processor unblocks before it is killed, terminate it
-	}
-	else {
-		kernel_abort_called = true;
-		unlock( kernel_abort_lock );
-	}
 
 	return __cfaabi_tls.this_thread;
Index: libcfa/src/concurrency/stats.hfa
===================================================================
--- libcfa/src/concurrency/stats.hfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/concurrency/stats.hfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -2,4 +2,9 @@
 
 #include <stdint.h>
+
+enum {
+	CFA_STATS_READY_Q  = 0x01,
+	CFA_STATS_IO = 0x02,
+};
 
 #if defined(__CFA_NO_STATISTICS__)
@@ -9,10 +14,4 @@
 	static inline void __print_stats( struct __stats_t *, int, const char *, const char *, void * ) {}
 #else
-	enum {
-		CFA_STATS_READY_Q  = 0x01,
-		#if defined(CFA_HAVE_LINUX_IO_URING_H)
-			CFA_STATS_IO = 0x02,
-		#endif
-	};
 
 	struct __attribute__((aligned(64))) __stats_readQ_t {
Index: libcfa/src/interpose.cfa
===================================================================
--- libcfa/src/interpose.cfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/interpose.cfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -284,4 +284,10 @@
 }
 
+extern "C" {
+	void __cfaabi_real_abort(void) {
+		__cabi_libc.abort();
+	}
+}
+
 void sigHandler_segv( __CFA_SIGPARMS__ ) {
 		if ( sfp->si_addr == 0p ) {
Index: libcfa/src/parseargs.cfa
===================================================================
--- libcfa/src/parseargs.cfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/parseargs.cfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -30,5 +30,23 @@
 
 static void usage(char * cmd, cfa_option options[], size_t opt_count, const char * usage, FILE * out)  __attribute__ ((noreturn));
-
+//-----------------------------------------------------------------------------
+// checking
+static void check_args(cfa_option options[], size_t opt_count) {
+	for(i; opt_count) {
+		for(j; opt_count) {
+			if(i == j) continue;
+
+			if( options[i].short_name != '\0'
+			&& options[i].short_name == options[j].short_name)
+				abort("Parse Args error: two options have short name '%c' (%zu & %zu)", options[i].short_name, i, j);
+
+			if(0 == strcmp(options[i].long_name, options[j].long_name)) abort("Parse Args error: two options have long name '%s' (%zu & %zu)", options[i].long_name, i, j);
+		}
+	}
+}
+
+
+//-----------------------------------------------------------------------------
+// Parsing args
 void parse_args( cfa_option options[], size_t opt_count, const char * usage, char ** & left ) {
 	if( 0p != &cfa_args_argc ) {
@@ -41,6 +59,4 @@
 }
 
-//-----------------------------------------------------------------------------
-// getopt_long wrapping
 void parse_args(
 	int argc,
@@ -51,4 +67,26 @@
 	char ** & left
 ) {
+	check_args(options, opt_count);
+
+	int maxv = 'h';
+	char optstring[opt_count * 3] = { '\0' };
+	{
+		int idx = 0;
+		for(i; opt_count) {
+			if (options[i].short_name) {
+				maxv = max(options[i].short_name, maxv);
+				optstring[idx] = options[i].short_name;
+				idx++;
+				if(    ((intptr_t)options[i].parse) != ((intptr_t)parse_settrue)
+				&& ((intptr_t)options[i].parse) != ((intptr_t)parse_setfalse) ) {
+					optstring[idx] = ':';
+					idx++;
+				}
+			}
+		}
+		optstring[idx+0] = 'h';
+		optstring[idx+1] = '\0';
+	}
+
 	struct option optarr[opt_count + 2];
 	{
@@ -56,7 +94,8 @@
 		for(i; opt_count) {
 			if(options[i].long_name) {
+				options[i].val = (options[i].short_name != '\0') ? ((int)options[i].short_name) : ++maxv;
 				optarr[idx].name = options[i].long_name;
 				optarr[idx].flag = 0p;
-				optarr[idx].val  = options[i].short_name;
+				optarr[idx].val  = options[i].val;
 				if(    ((intptr_t)options[i].parse) == ((intptr_t)parse_settrue)
 				    || ((intptr_t)options[i].parse) == ((intptr_t)parse_setfalse) ) {
@@ -70,20 +109,4 @@
 		optarr[idx+0].[name, has_arg, flag, val] = ["help", no_argument, 0, 'h'];
 		optarr[idx+1].[name, has_arg, flag, val] = [0, no_argument, 0, 0];
-	}
-
-	char optstring[opt_count * 3] = { '\0' };
-	{
-		int idx = 0;
-		for(i; opt_count) {
-			optstring[idx] = options[i].short_name;
-			idx++;
-			if(    ((intptr_t)options[i].parse) != ((intptr_t)parse_settrue)
-			    && ((intptr_t)options[i].parse) != ((intptr_t)parse_setfalse) ) {
-				optstring[idx] = ':';
-				idx++;
-			}
-		}
-		optstring[idx+0] = 'h';
-		optstring[idx+1] = '\0';
 	}
 
@@ -103,5 +126,5 @@
 			default:
 				for(i; opt_count) {
-					if(opt == options[i].short_name) {
+					if(opt == options[i].val) {
 						const char * arg = optarg ? optarg : "";
 						if( arg[0] == '=' ) { arg++; }
Index: libcfa/src/parseargs.hfa
===================================================================
--- libcfa/src/parseargs.hfa	(revision 03ecdcf16d53730a25586c191b15bc11f9ee350b)
+++ libcfa/src/parseargs.hfa	(revision 77ff383eca61df055b8f1a57b7cdd4a01415f8b6)
@@ -2,4 +2,5 @@
 
 struct cfa_option {
+      int val; // reserved
       char short_name;
       const char * long_name;
@@ -15,4 +16,5 @@
 forall(dtype T | { bool parse(const char *, T & ); })
 static inline void ?{}( cfa_option & this, char short_name, const char * long_name, const char * help, T & variable ) {
+      this.val        = 0;
       this.short_name = short_name;
       this.long_name  = long_name;
@@ -24,4 +26,5 @@
 forall(dtype T)
 static inline void ?{}( cfa_option & this, char short_name, const char * long_name, const char * help, T & variable, bool (*parse)(const char *, T & )) {
+      this.val        = 0;
       this.short_name = short_name;
       this.long_name  = long_name;
