Index: kernel/generic/include/ipc/event.h
===================================================================
--- kernel/generic/include/ipc/event.h	(revision bec0219b6600e2fa8ddc98171819018e3c297eef)
+++ kernel/generic/include/ipc/event.h	(revision 0496c1788f5c44ab96b952f38fcc57fc253e00b7)
@@ -53,8 +53,11 @@
 	/** Masked flag. */
 	bool masked;
+	/** Unmask callback. */
+	void (*unmask_cb)(void);
 } event_t;
 
 extern void event_init(void);
 extern void event_cleanup_answerbox(answerbox_t *);
+extern void event_set_unmask_callback(event_type_t, void (*)(void));
 
 #define event_notify_0(e, m) \
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision bec0219b6600e2fa8ddc98171819018e3c297eef)
+++ kernel/generic/src/console/console.c	(revision 0496c1788f5c44ab96b952f38fcc57fc253e00b7)
@@ -165,4 +165,6 @@
 	sysinfo_set_item_val("klog.faddr", NULL, (sysarg_t) faddr);
 	sysinfo_set_item_val("klog.pages", NULL, KLOG_PAGES);
+
+	event_set_unmask_callback(EVENT_KLOG, klog_update);
 	
 	spinlock_lock(&klog_lock);
Index: kernel/generic/src/ipc/event.c
===================================================================
--- kernel/generic/src/ipc/event.c	(revision bec0219b6600e2fa8ddc98171819018e3c297eef)
+++ kernel/generic/src/ipc/event.c	(revision 0496c1788f5c44ab96b952f38fcc57fc253e00b7)
@@ -59,4 +59,5 @@
 		events[i].imethod = 0;
 		events[i].masked = false;
+		events[i].unmask_cb = NULL;
 	}
 }
@@ -83,4 +84,19 @@
 }
 
+/** Define a callback function for the event unmask event.
+ *
+ * @param evno Event type.
+ * @param cb   Callback function to be called when the event is unmasked.
+ *
+ */
+void event_set_unmask_callback(event_type_t evno, void (*cb)(void))
+{
+	ASSERT(evno < EVENT_END);
+	
+	spinlock_lock(&events[evno].lock);
+	events[evno].unmask_cb = cb;
+	spinlock_unlock(&events[evno].lock);
+}
+
 /** Send kernel notification event
  *
@@ -190,9 +206,17 @@
 static void event_unmask(event_type_t evno)
 {
+	void (*cb)(void);
 	ASSERT(evno < EVENT_END);
 	
 	spinlock_lock(&events[evno].lock);
 	events[evno].masked = false;
-	spinlock_unlock(&events[evno].lock);
+	cb = events[evno].unmask_cb;
+	spinlock_unlock(&events[evno].lock);
+	
+	/*
+	 * Check if there is an unmask callback function defined for this event.
+	 */
+	if (cb)
+	    cb();
 }
 
