Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision 304de00717ef6362ebb9fec97808ec4a0cdc837c)
+++ libcfa/src/concurrency/preemption.cfa	(revision 1c6e1ec01fd6f70e644cb80963acc1c7ffb2c06b)
@@ -15,4 +15,5 @@
 
 #define __cforall_thread__
+// #define __CFA_DEBUG_PRINT_PREEMPTION__
 
 #include "preemption.hfa"
@@ -28,10 +29,28 @@
 #include "kernel_private.hfa"
 
+
 #if !defined(__CFA_DEFAULT_PREEMPTION__)
 #define __CFA_DEFAULT_PREEMPTION__ 10`ms
 #endif
 
-Duration default_preemption() __attribute__((weak)) {
-	return __CFA_DEFAULT_PREEMPTION__;
+__attribute__((weak)) Duration default_preemption() {
+	const char * preempt_rate_s = getenv("CFA_DEFAULT_PROCESSORS");
+	if(!preempt_rate_s) {
+		__cfadbg_print_safe(preemption, "No CFA_DEFAULT_PROCESSORS in ENV\n");
+		return __CFA_DEFAULT_PREEMPTION__;
+	}
+
+	char * endptr = 0p;
+	long int preempt_rate_l = strtol(preempt_rate_s, &endptr, 10);
+	if(preempt_rate_l < 0 || preempt_rate_l > 65535) {
+		__cfadbg_print_safe(preemption, "CFA_DEFAULT_PROCESSORS out of range : %ld\n", preempt_rate_l);
+		return __CFA_DEFAULT_PREEMPTION__;
+	}
+	if('\0' != *endptr) {
+		__cfadbg_print_safe(preemption, "CFA_DEFAULT_PROCESSORS not a decimal number : %s\n", preempt_rate_s);
+		return __CFA_DEFAULT_PREEMPTION__;
+	}
+
+	return preempt_rate_l`ms;
 }
 
@@ -125,10 +144,6 @@
 	// If there are still alarms pending, reset the timer
 	if( & (*alarms)`first ) {
-		__cfadbg_print_buffer_decl(preemption, " KERNEL: @%ju(%ju) resetting alarm to %ju.\n", currtime.tv, __kernel_get_time().tv, (alarms->head->alarm - currtime).tv);
 		Duration delta = (*alarms)`first.alarm - currtime;
 		Duration capped = max(delta, 50`us);
-		// itimerval tim  = { caped };
-		// __cfaabi_dbg_print_buffer_local( "    Values are %lu, %lu, %lu %lu.\n", delta.tv, caped.tv, tim.it_value.tv_sec, tim.it_value.tv_usec);
-
 		__kernel_set_timer( capped );
 	}
