Index: src/examples/thread.c
===================================================================
--- src/examples/thread.c	(revision 8f49a54ffd2ebee0164eb91c530d7625a9d1f910)
+++ src/examples/thread.c	(revision dcb42b8657f59146a4e13e740761ef8af2db06e3)
@@ -29,5 +29,5 @@
 int main(int argc, char* argv[]) {
 
-	unsigned itterations = 10;
+	unsigned itterations = 10u;
 	if(argc == 2) { 
 		int val = ato(argv[1]);
@@ -39,6 +39,6 @@
 
 	{
-		thread(MyThread) thread1 = { (unsigned)1, itterations };
-		thread(MyThread) thread2 = { (unsigned)2, itterations };
+		thread(MyThread) thread1 = { 1u, itterations };
+		thread(MyThread) thread2 = { 2u, itterations };
 	}
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 8f49a54ffd2ebee0164eb91c530d7625a9d1f910)
+++ src/libcfa/concurrency/kernel.c	(revision dcb42b8657f59146a4e13e740761ef8af2db06e3)
@@ -230,5 +230,4 @@
 	// Start by initializing the main thread
 	mainThread = (thread_h *)&mainThread_storage;
-	LIB_DEBUG_PRINTF("Kernel : Main thread : %p\n", mainThread );
 	mainThread{ &ctx };
 
@@ -242,29 +241,43 @@
 	systemProcessor->ctx{ systemProcessor };
 
+	// 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
 	scheduler_add(mainThread);
 
+	//initialize the global state variables
 	current_coroutine = &mainThread->c;
 
-	LIB_DEBUG_PRINTF("Kernel : Starting system processor\n");	
+	// SKULLDUGGERY: Force a context switch to the system processor to set the main thread's context to the current UNIX
+	// 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->ctx);
 
+
+
+	// THE SYSTEM IS NOW COMPLETELY RUNNING
+
+
+
 	LIB_DEBUG_PRINTF("Kernel : Started\n--------------------------------------------------\n\n");
 }
+
 void kernel_shutdown(void) {
-	LIB_DEBUG_PRINTF("\n--------------------------------------------------\nKernel : Shutting down");
-
-	LIB_DEBUG_PRINTF("Unscheduling main thread\n");
-	scheduler_remove(mainThread);
-
-	LIB_DEBUG_PRINTF("Kernel : Terminating system processor\n");		
+	LIB_DEBUG_PRINTF("\n--------------------------------------------------\nKernel : Shutting down\n");
+
+	// SKULLDUGGERY: Notify the systemProcessor it needs to terminates.
+	// When its coroutine terminates, it return control to the mainThread
+	// which is currently here
 	systemProcessor->terminated = true;
-
 	suspend();
 
-	LIB_DEBUG_PRINTF("Kernel : Control returned to initial process thread\n");
-
+	// THE SYSTEM IS NOW COMPLETELY STOPPED
+
+	// Destroy the system processor and its context in reverse order of construction
+	// These were manually constructed so we need manually destroy them
 	^(systemProcessor->ctx){};
 	^(systemProcessor){};
 
+	// Final step, destroy the main thread since it is no longer needed
+	// Since we provided a stack to this taxk it will not destroy anything
 	^(mainThread){};
 
