Index: base-okl4/src/core/platform_thread.cc
===================================================================
--- base-okl4/src/core/platform_thread.cc	(revision 127)
+++ base-okl4/src/core/platform_thread.cc	(working copy)
@@ -56,7 +56,7 @@
 	L4_SpaceId_t  space_id           = L4_SpaceId(space_no);
 	L4_ThreadId_t scheduler          = L4_rootserver;
 	L4_ThreadId_t pager              = _pager ? _pager->cap().tid() : L4_nilthread;
-	L4_ThreadId_t exception_handler  = L4_rootserver;
+	L4_ThreadId_t exception_handler  = pager;
 	L4_Word_t     resources          = 0;
 	L4_Word_t     utcb_size_per_task = L4_GetUtcbSize()*(1 << Platform_pd::THREAD_BITS);
 	L4_Word_t     utcb_location      = platform_specific()->utcb_base()
Index: base-okl4/src/base/ipc/pager.cc
===================================================================
--- base-okl4/src/base/ipc/pager.cc	(revision 127)
+++ base-okl4/src/base/ipc/pager.cc	(working copy)
@@ -82,8 +82,30 @@
 
 void Ipc_pager::wait_for_page_fault()
 {
-	/* wait for page fault */
-	L4_MsgTag_t faulter_tag = L4_Wait(&_last);
+	L4_MsgTag_t faulter_tag;
+
+	for (;;) {
+
+		/* wait for page fault */
+		faulter_tag = L4_Wait(&_last);
+
+		/*
+		 * A page-fault message has one of the op bits (lower 3 bits of the
+		 * label) set. If those bits are zero, we got an exception message.
+		 */
+		bool is_exception = (L4_Label(faulter_tag) & 0xf) == 0;
+
+		if (!is_exception) break;
+
+		/*
+		 * Print diagnostic message and wait again.
+		 */
+		addr_t ip = 0;
+		L4_StoreMR(1, &ip);
+		PERR("Exception (label 0x%x) occured in space %d at IP 0x%p",
+		      (int)L4_Label(faulter_tag), (int)L4_SenderSpace().raw, (void *)ip);
+	}
+
 	_last_space = L4_SenderSpace();
 
 	/* read fault information */
