Index: kernel/generic/include/console/kconsole.h
===================================================================
--- kernel/generic/include/console/kconsole.h	(revision ac48fef8fb17c81758c0b341179b0d47b9ecc95a)
+++ kernel/generic/include/console/kconsole.h	(revision 3ad953cc9f7b18ae008470e72a5abd43e4142cbd)
@@ -38,4 +38,5 @@
 #include <adt/list.h>
 #include <synch/spinlock.h>
+#include <ipc/irq.h>
 
 #define MAX_CMDLINE     256
@@ -84,8 +85,12 @@
 } cmd_info_t;
 
+extern bool kconsole_notify;
+extern irq_t kconsole_irq;
+
 SPINLOCK_EXTERN(cmd_lock);
 extern link_t cmd_head;
 
 extern void kconsole_init(void);
+extern void kconsole_notify_init(void);
 extern void kconsole(char *prompt, char *msg, bool kcon);
 extern void kconsole_thread(void *data);
Index: kernel/generic/include/ipc/irq.h
===================================================================
--- kernel/generic/include/ipc/irq.h	(revision ac48fef8fb17c81758c0b341179b0d47b9ecc95a)
+++ kernel/generic/include/ipc/irq.h	(revision 3ad953cc9f7b18ae008470e72a5abd43e4142cbd)
@@ -54,4 +54,6 @@
  * ipc_irq_send_msg_m(), where m is the number of payload arguments.
  */
+#define ipc_irq_send_msg_0(irq) \
+    ipc_irq_send_msg((irq), 0, 0, 0, 0, 0)
 #define ipc_irq_send_msg_1(irq, a1) \
     ipc_irq_send_msg((irq), (a1), 0, 0, 0, 0)
Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision ac48fef8fb17c81758c0b341179b0d47b9ecc95a)
+++ kernel/generic/src/console/cmd.c	(revision 3ad953cc9f7b18ae008470e72a5abd43e4142cbd)
@@ -977,6 +977,9 @@
 {
 	printf("The kernel will now relinquish the console.\n");
-	printf("Use userspace controls to redraw the screen.\n");
 	arch_release_console();
+	
+	if ((kconsole_notify) && (kconsole_irq.notif_cfg.notify))
+		ipc_irq_send_msg_0(&kconsole_irq);
+	
 	return 1;
 }
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision ac48fef8fb17c81758c0b341179b0d47b9ecc95a)
+++ kernel/generic/src/console/kconsole.c	(revision 3ad953cc9f7b18ae008470e72a5abd43e4142cbd)
@@ -52,4 +52,6 @@
 #include <symtab.h>
 #include <macros.h>
+#include <sysinfo/sysinfo.h>
+#include <ddi/device.h>
 
 /** Simple kernel console.
@@ -84,12 +86,64 @@
 static char history[KCONSOLE_HISTORY][MAX_CMDLINE] = {};
 
-/** Initialize kconsole data structures. */
+/*
+ * For now, we use 0 as INR.
+ * However, it is therefore desirable to have architecture specific
+ * definition of KCONSOLE_VIRT_INR in the future.
+ */
+#define KCONSOLE_VIRT_INR  0
+
+bool kconsole_notify = false;
+irq_t kconsole_irq;
+
+
+/** Allways refuse IRQ ownership.
+ *
+ * This is not a real IRQ, so we always decline.
+ *
+ * @return Always returns IRQ_DECLINE.
+ *
+ */
+static irq_ownership_t kconsole_claim(void)
+{
+	return IRQ_DECLINE;
+}
+
+
+/** Initialize kconsole data structures
+ *
+ * This is the most basic initialization, almost no
+ * other kernel subsystem is ready yet.
+ *
+ */
 void kconsole_init(void)
 {
-	int i;
+	unsigned int i;
 
 	cmd_init();
 	for (i = 0; i < KCONSOLE_HISTORY; i++)
 		history[i][0] = '\0';
+}
+
+
+/** Initialize kconsole notification mechanism
+ *
+ * Initialize the virtual IRQ notification mechanism.
+ *
+ */
+void kconsole_notify_init(void)
+{
+	devno_t devno = device_assign_devno();
+	
+	sysinfo_set_item_val("kconsole.present", NULL, true);
+	sysinfo_set_item_val("kconsole.devno", NULL, devno);
+	sysinfo_set_item_val("kconsole.inr", NULL, KCONSOLE_VIRT_INR);
+	
+	irq_initialize(&kconsole_irq);
+	kconsole_irq.devno = devno;
+	kconsole_irq.inr = KCONSOLE_VIRT_INR;
+	kconsole_irq.claim = kconsole_claim;
+	irq_register(&kconsole_irq);
+	
+	kconsole_notify = true;
 }
 
Index: kernel/generic/src/main/main.c
===================================================================
--- kernel/generic/src/main/main.c	(revision ac48fef8fb17c81758c0b341179b0d47b9ecc95a)
+++ kernel/generic/src/main/main.c	(revision 3ad953cc9f7b18ae008470e72a5abd43e4142cbd)
@@ -199,5 +199,5 @@
 	    config.base, config.kernel_size, config.stack_base,
 	    config.stack_size);
-
+	
 #ifdef CONFIG_KCONSOLE
 	/*
@@ -214,5 +214,5 @@
 	 */
 	LOG_EXEC(exc_init());
-
+	
 	/*
 	 * Memory management subsystems initialization.
@@ -260,5 +260,9 @@
 	LOG_EXEC(ipc_init());
 	LOG_EXEC(klog_init());
-
+	
+#ifdef CONFIG_KCONSOLE
+	LOG_EXEC(kconsole_notify_init());
+#endif
+	
 	/*
 	 * Create kernel task.
