Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/invoke.h	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -195,5 +195,5 @@
 
 		#if defined( __CFA_WITH_VERIFY__ )
-			unsigned long long canary;
+			void * canary;
 		#endif
 	};
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/kernel.cfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -255,5 +255,5 @@
 		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst ); // add escape condition if we are setting up the processor
 		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor
-		/* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
+		/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
 
 
@@ -263,5 +263,5 @@
 		// when __cfactx_switch returns we are back in the processor coroutine
 
-		/* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
+		/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
 		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );
 		/* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
@@ -335,7 +335,7 @@
 		#endif
 		/* paranoid */ verify( proc_cor->context.SP );
-		/* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_src->canary );
+		/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_src->canary );
 		__cfactx_switch( &thrd_src->context, &proc_cor->context );
-		/* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_src->canary );
+		/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_src->canary );
 		#if defined( __i386 ) || defined( __x86_64 )
 			__x87_load;
@@ -370,5 +370,5 @@
 	/* paranoid */ #endif
 	/* paranoid */ verifyf( thrd->link.next == 0p, "Expected null got %p", thrd->link.next );
-	/* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd->canary );
+	/* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd->canary );
 
 
@@ -742,5 +742,10 @@
 
 	void print_stats_now( cluster & this, int flags ) {
-		__print_stats( this.stats, this.print_stats, true, this.name, (void*)&this );
+		__print_stats( this.stats, this.print_stats, "Cluster", this.name, (void*)&this );
+	}
+
+	extern int __print_alarm_stats;
+	void print_alarm_stats() {
+		__print_alarm_stats = -1;
 	}
 #endif
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -360,5 +360,5 @@
 		__tally_stats(proc->cltr->stats, &local_stats);
 		if( 0 != proc->print_stats ) {
-			__print_stats( &local_stats, proc->print_stats, true, proc->name, (void*)proc );
+			__print_stats( &local_stats, proc->print_stats, "Processor ", proc->name, (void*)proc );
 		}
 	#endif
@@ -456,5 +456,5 @@
 	link.prev = 0p;
 	#if defined( __CFA_WITH_VERIFY__ )
-		canary = 0x0D15EA5E0D15EA5E;
+		canary = 0x0D15EA5E0D15EA5Ep;
 	#endif
 
@@ -622,5 +622,5 @@
 	#if !defined(__CFA_NO_STATISTICS__)
 		if( 0 != this.print_stats ) {
-			__print_stats( this.stats, this.print_stats, true, this.name, (void*)&this );
+			__print_stats( this.stats, this.print_stats, "Cluster", this.name, (void*)&this );
 		}
 		free( this.stats );
Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/preemption.cfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -386,7 +386,4 @@
 // reserved for future use
 static void timeout( $thread * this ) {
-	#if !defined( __CFA_NO_STATISTICS__ )
-		kernelTLS().this_stats = this->curr_cluster->stats;
-	#endif
 	unpark( this );
 }
@@ -615,4 +612,8 @@
 }
 
+#if !defined(__CFA_NO_STATISTICS__)
+	int __print_alarm_stats = 0;
+#endif
+
 // Main of the alarm thread
 // Waits on SIGALRM and send SIGUSR1 to whom ever needs it
@@ -622,4 +623,10 @@
 	id.id = doregister(&id);
 	__cfaabi_tls.this_proc_id = &id;
+
+	#if !defined(__CFA_NO_STATISTICS__)
+		struct __stats_t local_stats;
+		__cfaabi_tls.this_stats = &local_stats;
+		__init_stats( &local_stats );
+	#endif
 
 	// Block sigalrms to control when they arrive
@@ -681,4 +688,10 @@
 	__cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" );
 	unregister(&id);
+
+	#if !defined(__CFA_NO_STATISTICS__)
+		if( 0 != __print_alarm_stats ) {
+			__print_stats( &local_stats, __print_alarm_stats, "Alarm", "Thread", 0p );
+		}
+	#endif
 	return 0p;
 }
Index: libcfa/src/concurrency/stats.cfa
===================================================================
--- libcfa/src/concurrency/stats.cfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/stats.cfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -44,40 +44,40 @@
 
 	void __tally_stats( struct __stats_t * cltr, struct __stats_t * proc ) {
-		__atomic_fetch_add( &cltr->ready.pick.push.attempt , proc->ready.pick.push.attempt , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.push.success , proc->ready.pick.push.success , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.push.local   , proc->ready.pick.push.local   , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.push.lsuccess, proc->ready.pick.push.lsuccess, __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.pop .probe   , proc->ready.pick.pop .probe   , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.pop .attempt , proc->ready.pick.pop .attempt , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.pop .success , proc->ready.pick.pop .success , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.pop .local   , proc->ready.pick.pop .local   , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.pick.pop .lsuccess, proc->ready.pick.pop .lsuccess, __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.threads.migration, proc->ready.threads.migration, __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.sleep.halts  , proc->ready.sleep.halts  , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.sleep.cancels, proc->ready.sleep.cancels, __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.sleep.wakes  , proc->ready.sleep.wakes  , __ATOMIC_SEQ_CST );
-		__atomic_fetch_add( &cltr->ready.sleep.exits  , proc->ready.sleep.exits  , __ATOMIC_SEQ_CST );
+		__atomic_fetch_add( &cltr->ready.pick.push.attempt , proc->ready.pick.push.attempt , __ATOMIC_SEQ_CST ); proc->ready.pick.push.attempt  = 0;
+		__atomic_fetch_add( &cltr->ready.pick.push.success , proc->ready.pick.push.success , __ATOMIC_SEQ_CST ); proc->ready.pick.push.success  = 0;
+		__atomic_fetch_add( &cltr->ready.pick.push.local   , proc->ready.pick.push.local   , __ATOMIC_SEQ_CST ); proc->ready.pick.push.local    = 0;
+		__atomic_fetch_add( &cltr->ready.pick.push.lsuccess, proc->ready.pick.push.lsuccess, __ATOMIC_SEQ_CST ); proc->ready.pick.push.lsuccess = 0;
+		__atomic_fetch_add( &cltr->ready.pick.pop .probe   , proc->ready.pick.pop .probe   , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .probe    = 0;
+		__atomic_fetch_add( &cltr->ready.pick.pop .attempt , proc->ready.pick.pop .attempt , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .attempt  = 0;
+		__atomic_fetch_add( &cltr->ready.pick.pop .success , proc->ready.pick.pop .success , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .success  = 0;
+		__atomic_fetch_add( &cltr->ready.pick.pop .local   , proc->ready.pick.pop .local   , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .local    = 0;
+		__atomic_fetch_add( &cltr->ready.pick.pop .lsuccess, proc->ready.pick.pop .lsuccess, __ATOMIC_SEQ_CST ); proc->ready.pick.pop .lsuccess = 0;
+		__atomic_fetch_add( &cltr->ready.threads.migration , proc->ready.threads.migration , __ATOMIC_SEQ_CST ); proc->ready.threads.migration  = 0;
+		__atomic_fetch_add( &cltr->ready.sleep.halts       , proc->ready.sleep.halts       , __ATOMIC_SEQ_CST ); proc->ready.sleep.halts        = 0;
+		__atomic_fetch_add( &cltr->ready.sleep.cancels     , proc->ready.sleep.cancels     , __ATOMIC_SEQ_CST ); proc->ready.sleep.cancels      = 0;
+		__atomic_fetch_add( &cltr->ready.sleep.wakes       , proc->ready.sleep.wakes       , __ATOMIC_SEQ_CST ); proc->ready.sleep.wakes        = 0;
+		__atomic_fetch_add( &cltr->ready.sleep.exits       , proc->ready.sleep.exits       , __ATOMIC_SEQ_CST ); proc->ready.sleep.exits        = 0;
 
 		#if defined(CFA_HAVE_LINUX_IO_URING_H)
-			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.rdy     , proc->io.submit_q.submit_avg.rdy     , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.csm     , proc->io.submit_q.submit_avg.csm     , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.avl     , proc->io.submit_q.submit_avg.avl     , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.cnt     , proc->io.submit_q.submit_avg.cnt     , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.look_avg.val       , proc->io.submit_q.look_avg.val       , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.look_avg.cnt       , proc->io.submit_q.look_avg.cnt       , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.look_avg.block     , proc->io.submit_q.look_avg.block     , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.val      , proc->io.submit_q.alloc_avg.val      , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.cnt      , proc->io.submit_q.alloc_avg.cnt      , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.block    , proc->io.submit_q.alloc_avg.block    , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.helped             , proc->io.submit_q.helped             , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.leader             , proc->io.submit_q.leader             , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.submit_q.busy               , proc->io.submit_q.busy               , __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.complete_q.completed_avg.val, proc->io.complete_q.completed_avg.val, __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.complete_q.completed_avg.cnt, proc->io.complete_q.completed_avg.cnt, __ATOMIC_SEQ_CST );
-			__atomic_fetch_add( &cltr->io.complete_q.blocks           , proc->io.complete_q.blocks           , __ATOMIC_SEQ_CST );
+			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.rdy     , proc->io.submit_q.submit_avg.rdy     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.rdy      = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.csm     , proc->io.submit_q.submit_avg.csm     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.csm      = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.avl     , proc->io.submit_q.submit_avg.avl     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.avl      = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.cnt     , proc->io.submit_q.submit_avg.cnt     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.cnt      = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.look_avg.val       , proc->io.submit_q.look_avg.val       , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.val        = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.look_avg.cnt       , proc->io.submit_q.look_avg.cnt       , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.cnt        = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.look_avg.block     , proc->io.submit_q.look_avg.block     , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.block      = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.val      , proc->io.submit_q.alloc_avg.val      , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.val       = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.cnt      , proc->io.submit_q.alloc_avg.cnt      , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.cnt       = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.alloc_avg.block    , proc->io.submit_q.alloc_avg.block    , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.block     = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.helped             , proc->io.submit_q.helped             , __ATOMIC_SEQ_CST ); proc->io.submit_q.helped              = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.leader             , proc->io.submit_q.leader             , __ATOMIC_SEQ_CST ); proc->io.submit_q.leader              = 0;
+			__atomic_fetch_add( &cltr->io.submit_q.busy               , proc->io.submit_q.busy               , __ATOMIC_SEQ_CST ); proc->io.submit_q.busy                = 0;
+			__atomic_fetch_add( &cltr->io.complete_q.completed_avg.val, proc->io.complete_q.completed_avg.val, __ATOMIC_SEQ_CST ); proc->io.complete_q.completed_avg.val = 0;
+			__atomic_fetch_add( &cltr->io.complete_q.completed_avg.cnt, proc->io.complete_q.completed_avg.cnt, __ATOMIC_SEQ_CST ); proc->io.complete_q.completed_avg.cnt = 0;
+			__atomic_fetch_add( &cltr->io.complete_q.blocks           , proc->io.complete_q.blocks           , __ATOMIC_SEQ_CST ); proc->io.complete_q.blocks            = 0;
 		#endif
 	}
 
-	void __print_stats( struct __stats_t * stats, int flags, bool cluster, const char * name, void * id ) with( *stats ) {
+	void __print_stats( struct __stats_t * stats, int flags, const char * type, const char * name, void * id ) with( *stats ) {
 
 		if( flags & CFA_STATS_READY_Q ) {
@@ -109,5 +109,5 @@
 				"-- wake on exit          : %'15" PRIu64 "\n"
 				"\n"
-				, cluster ? "Cluster" : "Processor",  name, id
+				, type, name, id
 				, ready.pick.pop.success
 				, ready.pick.push.success
@@ -158,5 +158,5 @@
 					"- total completion blocks: %'15" PRIu64 "\n"
 					"\n"
-					, cluster ? "Cluster" : "Processor",  name, id
+					, type,  name, id
 					, io.submit_q.submit_avg.cnt
 					, avgrdy, avgcsm
Index: libcfa/src/concurrency/stats.hfa
===================================================================
--- libcfa/src/concurrency/stats.hfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/stats.hfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -7,5 +7,5 @@
 	static inline void __init_stats( struct __stats_t * ) {}
 	static inline void __tally_stats( struct __stats_t *, struct __stats_t * ) {}
-	static inline void __print_stats( struct __stats_t *, int, bool, const char *, void * ) {}
+	static inline void __print_stats( struct __stats_t *, int, const char *, const char *, void * ) {}
 #else
 	enum {
@@ -106,5 +106,5 @@
 	void __init_stats ( struct __stats_t * );
 	void __tally_stats( struct __stats_t *, struct __stats_t * );
-	void __print_stats( struct __stats_t *, int, bool, const char *, void * );
+	void __print_stats( struct __stats_t *, int, const char *, const char *, void * );
 #endif
 
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ libcfa/src/concurrency/thread.cfa	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -41,5 +41,5 @@
 	link.preferred = -1;
 	#if defined( __CFA_WITH_VERIFY__ )
-		canary = 0x0D15EA5E0D15EA5E;
+		canary = 0x0D15EA5E0D15EA5Ep;
 	#endif
 
@@ -53,5 +53,5 @@
 void ^?{}($thread& this) with( this ) {
 	#if defined( __CFA_WITH_VERIFY__ )
-		canary = 0xDEADDEADDEADDEAD;
+		canary = 0xDEADDEADDEADDEADp;
 	#endif
 	unregister(curr_cluster, this);
Index: src/AST/Convert.hpp
===================================================================
--- src/AST/Convert.hpp	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ src/AST/Convert.hpp	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -20,5 +20,5 @@
 class Declaration;
 namespace ast {
-	class TranslationUnit;
+	struct TranslationUnit;
 };
 
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ src/AST/Fwd.hpp	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -137,5 +137,5 @@
 typedef unsigned int UniqueId;
 
-class TranslationUnit;
+struct TranslationUnit;
 // TODO: Get from the TranslationUnit:
 extern Type * sizeType;
Index: src/AST/Pass.proto.hpp
===================================================================
--- src/AST/Pass.proto.hpp	(revision 26ceca1cf632b853546614fba501c55307c98418)
+++ src/AST/Pass.proto.hpp	(revision 6e09a41ee74f000375b5e5f9d0461ac2ab6eef5a)
@@ -23,5 +23,5 @@
 class Pass;
 
-class TranslationUnit;
+struct TranslationUnit;
 
 struct PureVisitor;
@@ -274,5 +274,5 @@
 	template< typename core_t >
 	static auto on_error (core_t & core, ptr<Decl> & decl, int) -> decltype(core.on_error(decl)) {
-		return core.on_error(decl); 
+		return core.on_error(decl);
 	}
 
