Index: generic/include/console/kconsole.h
===================================================================
--- generic/include/console/kconsole.h	(revision ebbdb8fd8b3f471868d0d452f8ad473aa432226e)
+++ generic/include/console/kconsole.h	(revision e07fe0c1834e24beaa907000673e1e37acbc7c7d)
@@ -69,5 +69,5 @@
 
 extern void kconsole_init(void);
-extern void kconsole(void *arg);
+extern void kconsole(void *prompt);
 
 extern int cmd_register(cmd_info_t *cmd);
Index: generic/src/console/cmd.c
===================================================================
--- generic/src/console/cmd.c	(revision ebbdb8fd8b3f471868d0d452f8ad473aa432226e)
+++ generic/src/console/cmd.c	(revision e07fe0c1834e24beaa907000673e1e37acbc7c7d)
@@ -59,4 +59,10 @@
 };
 
+static cmd_info_t exit_info = {
+	.name = "exit",
+	.description ="Exit kconsole",
+	.argc = 0
+};
+
 /** Data and methods for 'description' command. */
 static int cmd_desc(cmd_arg_t *argv);
@@ -257,4 +263,8 @@
 	if (!cmd_register(&desc_info))
 		panic("could not register command %s\n", desc_info.name);
+
+	cmd_initialize(&exit_info);
+	if (!cmd_register(&exit_info))
+		panic("could not register command %s\n", exit_info.name);
 	
 	cmd_initialize(&symaddr_info);
Index: generic/src/console/kconsole.c
===================================================================
--- generic/src/console/kconsole.c	(revision ebbdb8fd8b3f471868d0d452f8ad473aa432226e)
+++ generic/src/console/kconsole.c	(revision e07fe0c1834e24beaa907000673e1e37acbc7c7d)
@@ -41,4 +41,5 @@
 #include <func.h>
 #include <symtab.h>
+#include <macros.h>
 
 /** Simple kernel console.
@@ -396,5 +397,5 @@
  * @param arg Not used.
  */
-void kconsole(void *arg)
+void kconsole(void *prompt)
 {
 	cmd_info_t *cmd_info;
@@ -408,5 +409,5 @@
 	
 	while (true) {
-		cmdline = clever_readline(__FUNCTION__, stdin);
+		cmdline = clever_readline(prompt, stdin);
 		len = strlen(cmdline);
 		if (!len)
@@ -415,4 +416,7 @@
 		if (!cmd_info)
 			continue;
+		if (strncmp(cmd_info->name,"exit", \
+			    min(strlen(cmd_info->name),5)) == 0)
+			break;
 		(void) cmd_info->func(cmd_info->argv);
 	}
Index: generic/src/lib/func.c
===================================================================
--- generic/src/lib/func.c	(revision ebbdb8fd8b3f471868d0d452f8ad473aa432226e)
+++ generic/src/lib/func.c	(revision e07fe0c1834e24beaa907000673e1e37acbc7c7d)
@@ -49,5 +49,5 @@
 #ifdef CONFIG_DEBUG
 	printf("\n");
-	kconsole(NULL); /* Run kconsole as a last resort to user */
+	kconsole("panic"); /* Run kconsole as a last resort to user */
 #endif      
 
Index: generic/src/main/kinit.c
===================================================================
--- generic/src/main/kinit.c	(revision ebbdb8fd8b3f471868d0d452f8ad473aa432226e)
+++ generic/src/main/kinit.c	(revision e07fe0c1834e24beaa907000673e1e37acbc7c7d)
@@ -134,5 +134,5 @@
 	 * Create kernel console.
 	 */
-	if (t = thread_create(kconsole, NULL, TASK, 0))
+	if (t = thread_create(kconsole, "kconsole", TASK, 0))
 		thread_ready(t);
 	else panic("thread_create/kconsole\n");
