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){};
 
