Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 6cff9f347a3ec63c988f50d069c0d23f371b346a)
+++ src/libcfa/concurrency/kernel	(revision 7e003011cac72e307c02d183bca9cbd4a982d69b)
@@ -94,5 +94,5 @@
 
 // Local Variables: //
-// mode: c //
-// tab-width: 4 //
+// mode: CFA //
+// tab-width: 6 //
 // End: //
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 6cff9f347a3ec63c988f50d069c0d23f371b346a)
+++ src/libcfa/concurrency/kernel.c	(revision 7e003011cac72e307c02d183bca9cbd4a982d69b)
@@ -47,10 +47,10 @@
 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx);
 KERNEL_STORAGE(cluster, systemCluster);
-KERNEL_STORAGE(processor, systemProcessor);
+KERNEL_STORAGE(system_proc_t, systemProcessor);
 KERNEL_STORAGE(thread_desc, mainThread);
 KERNEL_STORAGE(machine_context_t, mainThread_context);
 
 cluster * systemCluster;
-processor * systemProcessor;
+system_proc_t * systemProcessor;
 thread_desc * mainThread;
 
@@ -81,4 +81,5 @@
 
 void ?{}( current_stack_info_t * this ) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 1\n");
 	CtxGet( &this->ctx );
 	this->base = this->ctx.FP;
@@ -95,4 +96,5 @@
 
 void ?{}( coStack_t * this, current_stack_info_t * info) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 2\n");
 	this->size = info->size;
 	this->storage = info->storage;
@@ -105,4 +107,5 @@
 
 void ?{}( coroutine_desc * this, current_stack_info_t * info) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 3\n");
 	(&this->stack){ info };	
 	this->name = "Main Thread";
@@ -112,4 +115,5 @@
 
 void ?{}( thread_desc * this, current_stack_info_t * info) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 4\n");
 	(&this->cor){ info };
 }
@@ -118,5 +122,6 @@
 // Processor coroutine
 void ?{}(processorCtx_t * this, processor * proc) {
-	(&this->__cor){};
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 5\n");
+	(&this->__cor){ "Processor" };
 	this->proc = proc;
 	proc->runner = this;
@@ -124,4 +129,5 @@
 
 void ?{}(processorCtx_t * this, processor * proc, current_stack_info_t * info) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 6\n");
 	(&this->__cor){ info };
 	this->proc = proc;
@@ -130,8 +136,10 @@
 
 void ?{}(processor * this) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 7\n");
 	this{ systemCluster };
 }
 
 void ?{}(processor * this, cluster * cltr) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 8\n");
 	this->cltr = cltr;
 	this->current_coroutine = NULL;
@@ -153,4 +161,12 @@
 	LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner);
 	runner{ this };
+}
+
+void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Ctor 9\n");
+	(&this->alarms){};
+	(&this->alarm_lock){};
+
+	(&this->proc){ cltr, runner };
 }
 
@@ -316,7 +332,7 @@
 	assertf( thrd->next == NULL, "Expected null got %p", thrd->next );
 	
-	lock( &systemProcessor->cltr->lock );
-	append( &systemProcessor->cltr->ready_queue, thrd );
-	unlock( &systemProcessor->cltr->lock );
+	lock( &systemProcessor->proc.cltr->lock );
+	append( &systemProcessor->proc.cltr->ready_queue, thrd );
+	unlock( &systemProcessor->proc.cltr->lock );
 }
 
@@ -367,4 +383,21 @@
 }
 
+//=============================================================================================
+// Kernel Preemption logic
+//=============================================================================================
+
+#define __CFA_DEFAULT_PREEMPTION__ 10
+
+unsigned int default_preemption() {
+	return __CFA_DEFAULT_PREEMPTION__;
+}
+
+void kernel_start_preemption() {
+
+}
+
+//=============================================================================================
+// Kernel Setup logic
+//=============================================================================================
 //-----------------------------------------------------------------------------
 // Kernel boot procedures
@@ -379,19 +412,26 @@
 	mainThread{ &info };
 
+	LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n");
+
+	// Enable preemption
+	kernel_start_preemption();
+
 	// Initialize the system cluster
 	systemCluster = (cluster *)&systemCluster_storage;
 	systemCluster{};
 
+	LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n");
+
 	// Initialize the system processor and the system processor ctx
 	// (the coroutine that contains the processing control flow)
-	systemProcessor = (processor *)&systemProcessor_storage;
+	systemProcessor = (system_proc_t *)&systemProcessor_storage;
 	systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage };
 
 	// Add the main thread to the ready queue 
-	// once resume is called on systemProcessor->ctx the mainThread needs to be scheduled like any normal thread
+	// once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread
 	ScheduleThread(mainThread);
 
 	//initialize the global state variables
-	this_processor = systemProcessor;
+	this_processor = &systemProcessor->proc;
 	this_processor->current_thread = mainThread;
 	this_processor->current_coroutine = &mainThread->cor;
@@ -400,5 +440,5 @@
 	// context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that
 	// mainThread is on the ready queue when this call is made. 
-	resume(systemProcessor->runner);
+	resume( systemProcessor->proc.runner );
 
 
@@ -414,5 +454,5 @@
 	// When its coroutine terminates, it return control to the mainThread
 	// which is currently here
-	systemProcessor->is_terminated = true;
+	systemProcessor->proc.is_terminated = true;
 	suspend();
 
@@ -421,5 +461,5 @@
 	// Destroy the system processor and its context in reverse order of construction
 	// These were manually constructed so we need manually destroy them
-	^(systemProcessor->runner){};
+	^(systemProcessor->proc.runner){};
 	^(systemProcessor){};
 
@@ -484,4 +524,7 @@
 }
 
+//=============================================================================================
+// Kernel Utilities
+//=============================================================================================
 //-----------------------------------------------------------------------------
 // Locks
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 6cff9f347a3ec63c988f50d069c0d23f371b346a)
+++ src/libcfa/concurrency/kernel_private.h	(revision 7e003011cac72e307c02d183bca9cbd4a982d69b)
@@ -21,4 +21,6 @@
 #include "thread"
 
+#include "alarm.h"
+
 //-----------------------------------------------------------------------------
 // Scheduler
@@ -35,10 +37,7 @@
 //-----------------------------------------------------------------------------
 // Processor
-struct processorCtx_t {
+coroutine processorCtx_t {
 	processor * proc;
-	coroutine_desc __cor;
 };
-
-DECL_COROUTINE(processorCtx_t);
 
 void main(processorCtx_t *);
@@ -47,4 +46,14 @@
 void finishRunning(processor * this);
 void spin(processor * this, unsigned int * spin_count);
+
+struct system_proc_t {
+	processor proc;
+
+	alarm_list_t alarms;
+	spinlock alarm_lock;
+};
+
+extern cluster * systemCluster;
+extern system_proc_t * systemProcessor;
 
 //-----------------------------------------------------------------------------
