diff --git a/checker/checker.sh b/checker/checker.sh
index 766abb90d084314cfefee187e89890389e097cf6..dfab0ce3109adb276198adc2428b66e9a4311aa5 100755
--- a/checker/checker.sh
+++ b/checker/checker.sh
@@ -2,7 +2,7 @@
 
 SO2_WORKSPACE=/linux/tools/labs
 SO2_VM_LOG=/tmp/so2_vm_log.txt
-
+DMESG_LOG=""
 
 ASSIGNMENT0_TIMEOUT=300 # 5 min
 ASSIGNMENT0_MOD=list.ko
@@ -60,6 +60,13 @@ usage()
 }
 
 
+configure_logger()
+{
+	DMESG_LOG="/linux/tools/labs/skels/log.txt"
+	cp ./checker/checker_daemons/so2_vm_checker_logger.sh /linux/tools/labs/rootfs/etc/init.d
+	chmod +x /linux/tools/labs/rootfs/etc/init.d/so2_vm_checker_logger.sh
+	chroot /linux/tools/labs/rootfs update-rc.d so2_vm_checker_logger.sh defaults 0 0
+}
 
 recover_grade_from_timeout()
 {
@@ -83,10 +90,12 @@ timeout_exceeded()
 	pkill -SIGKILL qemu
 	echo ""
 	echo "TIMEOUT EXCEEDED !!! killing the process"
-	echo "dumping SO2_VM_LOG=${SO2_VM_LOG} output"
-	echo "------------------------------------------------------"
-	cat $SO2_VM_LOG
-	echo "------------------------------------------------------"
+	if [[ $DMESG_LOG != "" ]]; then
+		echo "dumping DMESG_LOG=${DMESG_LOG} output"
+		echo ">>>>---------------DMESG_LOG_STARTS_HERE------------------<<<<<"
+		cat $DMESG_LOG
+		echo ">>>>----------------DMESG_LOG_ENDS_HERE-------------------<<<<<"
+	fi
 
 	if [[ $RECOVER_GRADE_TIMEOUT == 0 ]]; then
 		if [ -f $output ]; then
@@ -94,8 +103,6 @@ timeout_exceeded()
 		else
 			cat $output
 		fi
-		echo "dumping SO2_VM_LOG=${SO2_VM_LOG} output"
-		cat $SO2_VM_LOG
 
 		echo "The Recover Grade Timeout option is not set! Please contact a teaching assistant!"
 	else
@@ -223,7 +230,7 @@ run_checker()
 			if ((timeout >= TIMEOUT)); then
 				if [ -f $output ]; then
 					echo ""
-					dump_output $output
+					dump_output $output $timeout
 					compute_total $output
 				fi
 				timeout_exceeded $output
@@ -238,6 +245,8 @@ run_checker()
 	popd &> /dev/null
 }
 
+
+
 case $1 in
 	0-list)
 		TIMEOUT=$ASSIGNMENT0_TIMEOUT
@@ -252,6 +261,7 @@ case $1 in
 	2-uart)
 		TIMEOUT=$ASSIGNMENT2_TIMEOUT
 		RECOVER_GRADE_TIMEOUT=1 # If set to 1, in case of a timeout, will calculate the total grade based on the output directory
+		configure_logger
 		run_checker $ASSIGNMENT2_MOD $ASSIGNMENT2_DIR $ASSIGNMENT2_CHECKER_LOCAL_DIR $ASSIGNMENT2_CHECKER_DIR $ASSIGNMENT2_OUTPUT $ASSIGNMENT2_FINISHED $1 $ASSIGNMENT2_HEADER_OVERWRITE $ASSIGNMENT2_CHECKER_AUX_LIST
  		;;
 	3-raid)
diff --git a/checker/checker_daemons/so2_vm_checker_logger.sh b/checker/checker_daemons/so2_vm_checker_logger.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5d701258c9cd90e25b30a2b24b676154d308723b
--- /dev/null
+++ b/checker/checker_daemons/so2_vm_checker_logger.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# THIS SCRIPT RUNS INSIDE THE SO2 VM
+
+LOG_FILE=/home/root/skels/log.txt
+
+start()
+{
+	set -x
+	echo "" > ${LOG_FILE}
+	while true
+	do
+		sleep 1
+		echo ------------------START_HERE------------------ >> $LOG_FILE
+		dmesg >> $LOG_FILE
+		echo -------------------END_HERE------------------- >> $LOG_FILE
+	done
+}
+
+# Carry out specific functions when asked to by the system
+case "$1" in
+        start)
+                echo "Starting so2_vm_checker_logger.sh..."
+                start & # start in background
+                ;;
+        *)
+                echo "Usage: /etc/init.d/foo {start|stop}"
+                exit 1
+                ;;
+        esac
+
+exit 0
+