Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision 00eace30da787ce4c1daedfb63575ce441cf65d9)
+++ kernel/generic/src/console/console.c	(revision 691eb5227bb3faa6ab7918931f4c859c75819ec1)
@@ -66,6 +66,6 @@
 static size_t klog_uspace = 0;
 
-/**< Silent output */
-static bool silent = false;
+/**< Silence output */
+bool silent = false;
 
 /**< Kernel log spinlock */
Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision 00eace30da787ce4c1daedfb63575ce441cf65d9)
+++ kernel/generic/src/ddi/irq.c	(revision 691eb5227bb3faa6ab7918931f4c859c75819ec1)
@@ -73,4 +73,5 @@
 #include <arch/types.h>
 #include <synch/spinlock.h>
+#include <console/console.h>
 #include <memstr.h>
 #include <arch.h>
@@ -194,29 +195,15 @@
 }
 
-/** Dispatch the IRQ.
- *
- * We assume this function is only called from interrupt
- * context (i.e. that interrupts are disabled prior to
- * this call).
- *
- * This function attempts to lookup a fitting IRQ
- * structure. In case of success, return with interrupts
- * disabled and holding the respective structure.
- *
- * @param inr Interrupt number (aka inr or irq).
- *
- * @return IRQ structure of the respective device or NULL.
- */
-irq_t *irq_dispatch_and_lock(inr_t inr)
+/** Search and lock the uspace IRQ hash table.
+ *
+ */
+static irq_t *irq_dispatch_and_lock_uspace(inr_t inr)
 {
 	link_t *lnk;
 	unative_t key[] = {
 		(unative_t) inr,
-		(unative_t) -1		/* search will use claim() instead of devno */
+		(unative_t) -1    /* search will use claim() instead of devno */
 	};
 	
-	/*
-	 * Try uspace handlers first.
-	 */
 	spinlock_lock(&irq_uspace_hash_table_lock);
 	lnk = hash_table_find(&irq_uspace_hash_table, key);
@@ -229,8 +216,19 @@
 	}
 	spinlock_unlock(&irq_uspace_hash_table_lock);
-
-	/*
-	 * Fallback to kernel handlers.
-	 */
+	
+	return NULL;
+}
+
+/** Search and lock the kernel IRQ hash table.
+ *
+ */
+static irq_t *irq_dispatch_and_lock_kernel(inr_t inr)
+{
+	link_t *lnk;
+	unative_t key[] = {
+		(unative_t) inr,
+		(unative_t) -1    /* search will use claim() instead of devno */
+	};
+	
 	spinlock_lock(&irq_kernel_hash_table_lock);
 	lnk = hash_table_find(&irq_kernel_hash_table, key);
@@ -243,6 +241,45 @@
 	}
 	spinlock_unlock(&irq_kernel_hash_table_lock);
-
-	return NULL;	
+	
+	return NULL;
+}
+
+/** Dispatch the IRQ.
+ *
+ * We assume this function is only called from interrupt
+ * context (i.e. that interrupts are disabled prior to
+ * this call).
+ *
+ * This function attempts to lookup a fitting IRQ
+ * structure. In case of success, return with interrupts
+ * disabled and holding the respective structure.
+ *
+ * @param inr Interrupt number (aka inr or irq).
+ *
+ * @return IRQ structure of the respective device or NULL.
+ */
+irq_t *irq_dispatch_and_lock(inr_t inr)
+{
+	irq_t *irq;
+	
+	/*
+	 * If the kernel console is silenced,
+	 * then try first the uspace handlers,
+	 * eventually fall back to kernel handlers.
+	 *
+	 * If the kernel console is active,
+	 * then do it the other way around.
+	 */
+	if (silent) {
+		irq = irq_dispatch_and_lock_uspace(inr);
+		if (irq)
+			return irq;
+		return irq_dispatch_and_lock_kernel(inr);
+	}
+	
+	irq = irq_dispatch_and_lock_kernel(inr);
+	if (irq)
+		return irq;
+	return irq_dispatch_and_lock_uspace(inr);
 }
 
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 00eace30da787ce4c1daedfb63575ce441cf65d9)
+++ kernel/generic/src/ipc/irq.c	(revision 691eb5227bb3faa6ab7918931f4c859c75819ec1)
@@ -164,5 +164,5 @@
 	irq->inr = inr;
 	irq->claim = ipc_irq_top_half_claim;
-	irq->handler = ipc_irq_top_half_handler;	
+	irq->handler = ipc_irq_top_half_handler;
 	irq->notif_cfg.notify = true;
 	irq->notif_cfg.answerbox = box;
