Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision 116a2ead213b741d89ecb016dba4e1dd7d9b6e6a)
+++ libcfa/src/concurrency/io.cfa	(revision 4f102fa751f8351d031297e435f5ed8b75e3e042)
@@ -551,5 +551,5 @@
 		enqueue(this.pending, (__outstanding_io&)pa);
 
-		wait( pa.sem );
+		wait( pa.waitctx );
 
 		return pa.ctx;
@@ -578,5 +578,5 @@
 				pa.ctx = ctx;
 
-				post( pa.sem );
+				post( pa.waitctx );
 			}
 
@@ -613,5 +613,5 @@
 		}
 
-		wait( ei.sem );
+		wait( ei.waitctx );
 
 		__cfadbg_print_safe(io, "Kernel I/O : %u submitted from arbiter\n", have);
@@ -631,5 +631,5 @@
 					__submit_only(&ctx, ei.idxs, ei.have);
 
-					post( ei.sem );
+					post( ei.waitctx );
 				}
 
Index: libcfa/src/concurrency/io/types.hfa
===================================================================
--- libcfa/src/concurrency/io/types.hfa	(revision 116a2ead213b741d89ecb016dba4e1dd7d9b6e6a)
+++ libcfa/src/concurrency/io/types.hfa	(revision 4f102fa751f8351d031297e435f5ed8b75e3e042)
@@ -107,5 +107,5 @@
 	struct __outstanding_io {
 		inline Colable;
-		single_sem sem;
+		oneshot waitctx;
 	};
 	static inline __outstanding_io *& Next( __outstanding_io * n ) { return (__outstanding_io *)Next( (Colable *)n ); }
Index: libcfa/src/concurrency/kernel/cluster.hfa
===================================================================
--- libcfa/src/concurrency/kernel/cluster.hfa	(revision 116a2ead213b741d89ecb016dba4e1dd7d9b6e6a)
+++ libcfa/src/concurrency/kernel/cluster.hfa	(revision 4f102fa751f8351d031297e435f5ed8b75e3e042)
@@ -21,4 +21,5 @@
 
 #include <limits.h>
+#include <inttypes.h>
 
 #include "clock.hfa"
@@ -30,6 +31,6 @@
 
 // warn normally all ints
-#define warn_large_before warnf( !strict || old_avg < 33_000_000_000, "Suspiciously large previous average: %'llu (%llx), %'ldms \n", old_avg, old_avg, program()`ms )
-#define warn_large_after warnf( !strict || ret < 33_000_000_000, "Suspiciously large new average after %'ldms cputime: %'llu (%llx) from %'llu-%'llu (%'llu, %'llu) and %'llu\n", program()`ms, ret, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg )
+#define warn_large_before warnf( !strict || old_avg < 33_000_000_000, "Suspiciously large previous average: %'llu (%llx), %'" PRId64 "ms \n", old_avg, old_avg, program()`ms )
+#define warn_large_after warnf( !strict || ret < 33_000_000_000, "Suspiciously large new average after %'" PRId64 "ms cputime: %'llu (%llx) from %'llu-%'llu (%'llu, %'llu) and %'llu\n", program()`ms, ret, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg )
 
 // 8X linear factor is just 8 * x
@@ -41,6 +42,6 @@
 static inline __readyQ_avg_t __to_readyQ_avg(unsigned long long intsc) { if(unlikely(0 == intsc)) return 0.0; else return log2(intsc); }
 
-#define warn_large_before warnf( !strict || old_avg < 35.0, "Suspiciously large previous average: %'lf, %'ldms \n", old_avg, program()`ms )
-#define warn_large_after warnf( !strict || ret < 35.3, "Suspiciously large new average after %'ldms cputime: %'lf from %'llu-%'llu (%'llu, %'llu) and %'lf\n", program()`ms, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg ); \
+#define warn_large_before warnf( !strict || old_avg < 35.0, "Suspiciously large previous average: %'lf, %'" PRId64 "ms \n", old_avg, program()`ms )
+#define warn_large_after warnf( !strict || ret < 35.3, "Suspiciously large new average after %'" PRId64 "ms cputime: %'lf from %'llu-%'llu (%'llu, %'llu) and %'lf\n", program()`ms, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg ); \
 verify(ret >= 0)
 
Index: libcfa/src/parseargs.cfa
===================================================================
--- libcfa/src/parseargs.cfa	(revision 116a2ead213b741d89ecb016dba4e1dd7d9b6e6a)
+++ libcfa/src/parseargs.cfa	(revision 4f102fa751f8351d031297e435f5ed8b75e3e042)
@@ -1,9 +1,9 @@
 #include "parseargs.hfa"
 
+#include <ctype.h>
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
 #include <unistd.h>
-#include <assert.h>
 
 extern "C" {
@@ -74,6 +74,5 @@
 
 	int maxv = 'h';
-	assert( opt_count > 0 );
-	char optstring[opt_count * 3] = { '\0' };
+	char optstring[(opt_count * 3) + 2] = { '\0' };
 	{
 		int idx = 0;
@@ -272,15 +271,44 @@
 bool parse(const char * arg, int & value) {
 	char * end;
-	int r = strtoll(arg, &end, 10);
+
+	errno = 0;
+	long long int r = strtoll(arg, &end, 0);
+	if(errno) return false;
 	if(*end != '\0') return false;
-
-	value = r;
-	return true;
+	if(r > (int)MAX) return false;
+	if(r < (int)MIN) return false;
+
+	value = r;
+	return true;
+}
+
+static unsigned long long int strict_strtoull( const char * arg, int base) {
+	errno = 0;
+	{
+		const char * in = arg;
+		for() {
+			if('\0' == *in) {
+				errno = EINVAL;
+				return 0;
+			}
+			if(!isspace(*in)) break;
+			in++;
+		}
+		if(!isdigit(*in)) {
+			errno = EINVAL;
+			return 0;
+		}
+	}
+
+	*char end;
+	unsigned long long int r = strtoull(arg, &end, base);
+	if(*end != '\0') errno = EINVAL;
+	if(errno) return 0;
+	return r;
 }
 
 bool parse(const char * arg, unsigned & value) {
-	char * end;
-	unsigned long long int r = strtoull(arg, &end, 10);
-	if(*end != '\0') return false;
+	unsigned long long int r = strict_strtoull(arg, 0);
+	if(errno) return false;
 	if(r > (unsigned)MAX) return false;
 
@@ -290,7 +318,6 @@
 
 bool parse(const char * arg, unsigned long & value) {
-	char * end;
-	unsigned long long int r = strtoull(arg, &end, 10);
-	if(*end != '\0') return false;
+	unsigned long long int r = strict_strtoull(arg, 0);
+	if(errno) return false;
 	if(r > (unsigned long)MAX) return false;
 
@@ -300,11 +327,10 @@
 
 bool parse(const char * arg, unsigned long long & value) {
-        char * end;
-        unsigned long long int r = strtoull(arg, &end, 10);
-        if(*end != '\0') return false;
-        if(r > (unsigned long long)MAX) return false;
-
-        value = r;
-        return true;
+	unsigned long long int r = strict_strtoull(arg, 0);
+	if(errno) return false;
+	if(r > (unsigned long long)MAX) return false;
+
+	value = r;
+	return true;
 }
 
