Index: kernel/arch/amd64/src/debugger.c
===================================================================
--- kernel/arch/amd64/src/debugger.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/amd64/src/debugger.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -333,7 +333,10 @@
 #endif /* CONFIG_KCONSOLE */
 	
-	exc_register(VECTOR_DEBUG, "debugger", debug_exception);
+	exc_register(VECTOR_DEBUG, "debugger", true,
+	    debug_exception);
+	
 #ifdef CONFIG_SMP
-	exc_register(VECTOR_DEBUG_IPI, "debugger_smp", debug_ipi);
+	exc_register(VECTOR_DEBUG_IPI, "debugger_smp", true,
+	    debug_ipi);
 #endif /* CONFIG_SMP */
 }
Index: kernel/arch/amd64/src/interrupt.c
===================================================================
--- kernel/arch/amd64/src/interrupt.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/amd64/src/interrupt.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -199,24 +199,24 @@
 void interrupt_init(void)
 {
-	int i;
+	unsigned int i;
 	
 	for (i = 0; i < IVT_ITEMS; i++)
-		exc_register(i, "null", (iroutine) null_interrupt);
+		exc_register(i, "null", false, (iroutine_t) null_interrupt);
 	
 	for (i = 0; i < IRQ_COUNT; i++) {
 		if ((i != IRQ_PIC_SPUR) && (i != IRQ_PIC1))
-			exc_register(IVT_IRQBASE + i, "irq",
-			    (iroutine) irq_interrupt);
+			exc_register(IVT_IRQBASE + i, "irq", true,
+			    (iroutine_t) irq_interrupt);
 	}
 	
-	exc_register(0, "de_fault", (iroutine) de_fault);
-	exc_register(7, "nm_fault", (iroutine) nm_fault);
-	exc_register(12, "ss_fault", (iroutine) ss_fault);
-	exc_register(13, "gp_fault", (iroutine) gp_fault);
-	exc_register(14, "ident_mapper", (iroutine) ident_page_fault);
+	exc_register(0, "de_fault", true, (iroutine_t) de_fault);
+	exc_register(7, "nm_fault", true, (iroutine_t) nm_fault);
+	exc_register(12, "ss_fault", true, (iroutine_t) ss_fault);
+	exc_register(13, "gp_fault", true, (iroutine_t) gp_fault);
+	exc_register(14, "ident_mapper", true, (iroutine_t) ident_page_fault);
 	
 #ifdef CONFIG_SMP
-	exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown",
-	    (iroutine) tlb_shootdown_ipi);
+	exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown", true,
+	    (iroutine_t) tlb_shootdown_ipi);
 #endif
 }
Index: kernel/arch/amd64/src/mm/page.c
===================================================================
--- kernel/arch/amd64/src/mm/page.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/amd64/src/mm/page.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -116,7 +116,7 @@
 		page_table_unlock(AS_KERNEL, true);
 
-		exc_register(14, "page_fault", (iroutine) page_fault);
+		exc_register(14, "page_fault", true, (iroutine_t) page_fault);
 		write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
-	} else 
+	} else
 		write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
 }
Index: kernel/arch/arm32/include/ras.h
===================================================================
--- kernel/arch/arm32/include/ras.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/arm32/include/ras.h	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2009 Jakub Jermar 
+ * Copyright (c) 2009 Jakub Jermar
  * All rights reserved.
  *
@@ -40,11 +40,11 @@
 #include <typedefs.h>
 
-#define RAS_START	0
-#define RAS_END		1
+#define RAS_START  0
+#define RAS_END    1
 
 extern uintptr_t *ras_page;
 
 extern void ras_init(void);
-extern void ras_check(int, istate_t *);
+extern void ras_check(unsigned int, istate_t *);
 
 #endif
Index: kernel/arch/arm32/src/exc_handler.S
===================================================================
--- kernel/arch/arm32/src/exc_handler.S	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/arm32/src/exc_handler.S	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -150,5 +150,5 @@
 	mov r0, #0
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
@@ -158,5 +158,5 @@
 	mov r0, #5
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
@@ -166,5 +166,5 @@
 	mov r0, #6
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
@@ -173,5 +173,5 @@
 	mov r0, #1
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
@@ -181,5 +181,5 @@
 	mov r0, #3
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
@@ -189,5 +189,5 @@
 	mov r0, #4
 	mov r1, r13
-	bl ras_check 
+	bl ras_check
 	LOAD_REGS_FROM_STACK
 
Index: kernel/arch/arm32/src/exception.c
===================================================================
--- kernel/arch/arm32/src/exception.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/arm32/src/exception.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -165,9 +165,12 @@
 	install_exception_handlers();
 	
-	exc_register(EXC_IRQ, "interrupt", (iroutine) irq_exception);
-	exc_register(EXC_PREFETCH_ABORT, "prefetch abort",
-	    (iroutine) prefetch_abort);
-	exc_register(EXC_DATA_ABORT, "data abort", (iroutine) data_abort);
-	exc_register(EXC_SWI, "software interrupt", (iroutine) swi_exception);
+	exc_register(EXC_IRQ, "interrupt", true,
+	    (iroutine_t) irq_exception);
+	exc_register(EXC_PREFETCH_ABORT, "prefetch abort", true,
+	    (iroutine_t) prefetch_abort);
+	exc_register(EXC_DATA_ABORT, "data abort", true,
+	    (iroutine_t) data_abort);
+	exc_register(EXC_SWI, "software interrupt", true,
+	    (iroutine_t) swi_exception);
 }
 
Index: kernel/arch/arm32/src/ras.c
===================================================================
--- kernel/arch/arm32/src/ras.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/arm32/src/ras.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2009 Jakub Jermar 
+ * Copyright (c) 2009 Jakub Jermar
  * All rights reserved.
  *
@@ -66,5 +66,5 @@
 }
 
-void ras_check(int n, istate_t *istate)
+void ras_check(unsigned int n, istate_t *istate)
 {
 	uintptr_t rewrite_pc = istate->pc;
Index: kernel/arch/ia32/src/drivers/i8259.c
===================================================================
--- kernel/arch/ia32/src/drivers/i8259.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/ia32/src/drivers/i8259.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia32	
+/** @addtogroup ia32
  * @{
  */
@@ -76,5 +76,6 @@
 	 * Register interrupt handler for the PIC spurious interrupt.
 	 */
-	exc_register(VECTOR_PIC_SPUR, "pic_spurious", (iroutine) pic_spurious);	
+	exc_register(VECTOR_PIC_SPUR, "pic_spurious", false,
+	    (iroutine_t) pic_spurious);
 
 	/*
Index: kernel/arch/ia32/src/interrupt.c
===================================================================
--- kernel/arch/ia32/src/interrupt.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/ia32/src/interrupt.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -215,22 +215,24 @@
 void interrupt_init(void)
 {
-	int i;
+	unsigned int i;
 	
 	for (i = 0; i < IVT_ITEMS; i++)
-		exc_register(i, "null", (iroutine) null_interrupt);
+		exc_register(i, "null", false, (iroutine_t) null_interrupt);
 	
 	for (i = 0; i < IRQ_COUNT; i++) {
 		if ((i != IRQ_PIC_SPUR) && (i != IRQ_PIC1))
-			exc_register(IVT_IRQBASE + i, "irq", (iroutine) irq_interrupt);
+			exc_register(IVT_IRQBASE + i, "irq", true,
+			    (iroutine_t) irq_interrupt);
 	}
 	
-	exc_register(0, "de_fault", (iroutine) de_fault);
-	exc_register(7, "nm_fault", (iroutine) nm_fault);
-	exc_register(12, "ss_fault", (iroutine) ss_fault);
-	exc_register(13, "gp_fault", (iroutine) gp_fault);
-	exc_register(19, "simd_fp", (iroutine) simd_fp_exception);
+	exc_register(0, "de_fault", true, (iroutine_t) de_fault);
+	exc_register(7, "nm_fault", true, (iroutine_t) nm_fault);
+	exc_register(12, "ss_fault", true, (iroutine_t) ss_fault);
+	exc_register(13, "gp_fault", true, (iroutine_t) gp_fault);
+	exc_register(19, "simd_fp", true, (iroutine_t) simd_fp_exception);
 	
 #ifdef CONFIG_SMP
-	exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown", (iroutine) tlb_shootdown_ipi);
+	exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown", true,
+	    (iroutine_t) tlb_shootdown_ipi);
 #endif
 }
Index: kernel/arch/ia32/src/mm/page.c
===================================================================
--- kernel/arch/ia32/src/mm/page.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/ia32/src/mm/page.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -70,5 +70,5 @@
 		page_table_unlock(AS_KERNEL, true);
 		
-		exc_register(14, "page_fault", (iroutine) page_fault);
+		exc_register(14, "page_fault", true, (iroutine_t) page_fault);
 		write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
 	} else
Index: kernel/arch/ia32/src/smp/apic.c
===================================================================
--- kernel/arch/ia32/src/smp/apic.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/ia32/src/smp/apic.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -157,5 +157,6 @@
 void apic_init(void)
 {
-	exc_register(VECTOR_APIC_SPUR, "apic_spurious", (iroutine) apic_spurious);
+	exc_register(VECTOR_APIC_SPUR, "apic_spurious", false,
+	    (iroutine_t) apic_spurious);
 	
 	enable_irqs_function = io_apic_enable_irqs;
Index: kernel/arch/mips32/src/exception.c
===================================================================
--- kernel/arch/mips32/src/exception.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/mips32/src/exception.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -167,20 +167,31 @@
 void exception_init(void)
 {
-	int i;
+	unsigned int i;
 	
 	/* Clear exception table */
 	for (i = 0; i < IVT_ITEMS; i++)
-		exc_register(i, "undef", (iroutine) unhandled_exception);
+		exc_register(i, "undef", false,
+		    (iroutine_t) unhandled_exception);
 	
-	exc_register(EXC_Bp, "bkpoint", (iroutine) breakpoint_exception);
-	exc_register(EXC_RI, "resinstr", (iroutine) reserved_instr_exception);
-	exc_register(EXC_Mod, "tlb_mod", (iroutine) tlbmod_exception);
-	exc_register(EXC_TLBL, "tlbinvl", (iroutine) tlbinv_exception);
-	exc_register(EXC_TLBS, "tlbinvl", (iroutine) tlbinv_exception);
-	exc_register(EXC_Int, "interrupt", (iroutine) interrupt_exception);
+	exc_register(EXC_Bp, "bkpoint", true,
+	    (iroutine_t) breakpoint_exception);
+	exc_register(EXC_RI, "resinstr", true,
+	    (iroutine_t) reserved_instr_exception);
+	exc_register(EXC_Mod, "tlb_mod", true,
+	    (iroutine_t) tlbmod_exception);
+	exc_register(EXC_TLBL, "tlbinvl", true,
+	    (iroutine_t) tlbinv_exception);
+	exc_register(EXC_TLBS, "tlbinvl", true,
+	    (iroutine_t) tlbinv_exception);
+	exc_register(EXC_Int, "interrupt", true,
+	    (iroutine_t) interrupt_exception);
+	
 #ifdef CONFIG_FPU_LAZY
-	exc_register(EXC_CpU, "cpunus", (iroutine) cpuns_exception);
+	exc_register(EXC_CpU, "cpunus", true,
+	    (iroutine_t) cpuns_exception);
 #endif
-	exc_register(EXC_Sys, "syscall", (iroutine) syscall_exception);
+	
+	exc_register(EXC_Sys, "syscall", true,
+	    (iroutine_t) syscall_exception);
 }
 
Index: kernel/arch/ppc32/src/interrupt.c
===================================================================
--- kernel/arch/ppc32/src/interrupt.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/ppc32/src/interrupt.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -101,8 +101,12 @@
 void interrupt_init(void)
 {
-	exc_register(VECTOR_DATA_STORAGE, "data_storage", pht_refill);
-	exc_register(VECTOR_INSTRUCTION_STORAGE, "instruction_storage", pht_refill);
-	exc_register(VECTOR_EXTERNAL, "external", exception_external);
-	exc_register(VECTOR_DECREMENTER, "timer", exception_decrementer);
+	exc_register(VECTOR_DATA_STORAGE, "data_storage", true,
+	    pht_refill);
+	exc_register(VECTOR_INSTRUCTION_STORAGE, "instruction_storage", true,
+	    pht_refill);
+	exc_register(VECTOR_EXTERNAL, "external", true,
+	    exception_external);
+	exc_register(VECTOR_DECREMENTER, "timer", true,
+	    exception_decrementer);
 }
 
Index: kernel/arch/sparc64/include/sparc64.h
===================================================================
--- kernel/arch/sparc64/include/sparc64.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/sparc64/include/sparc64.h	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -38,5 +38,5 @@
 #include <interrupt.h>
 
-extern void interrupt_register(int n, const char *name, iroutine f);
+extern void interrupt_register(unsigned int, const char *, iroutine_t);
 
 #endif
Index: kernel/arch/sparc64/src/trap/interrupt.c
===================================================================
--- kernel/arch/sparc64/src/trap/interrupt.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/arch/sparc64/src/trap/interrupt.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -51,14 +51,16 @@
 /** Register Interrupt Level Handler.
  *
- * @param n Interrupt Level (1 - 15).
- * @param name Short descriptive string.
- * @param f Handler.
+ * @param n       Interrupt Level (1 - 15).
+ * @param name    Short descriptive string.
+ * @param handler Handler.
+ *
  */
-void interrupt_register(int n, const char *name, iroutine f)
+void interrupt_register(unsigned int n, const char *name, iroutine_t handler)
 {
 	ASSERT(n >= IVT_FIRST && n <= IVT_ITEMS);
 	
-	exc_register(n - 1, name, f);
+	exc_register(n - IVT_FIRST, name, true, handler);
 }
+
 /** @}
  */
Index: kernel/generic/include/console/console.h
===================================================================
--- kernel/generic/include/console/console.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/generic/include/console/console.h	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -37,5 +37,19 @@
 
 #include <typedefs.h>
+#include <print.h>
 #include <console/chardev.h>
+
+#define PAGING(counter, increment, before, after) \
+	do { \
+		(counter) += (increment); \
+		if ((counter) > 23) { \
+			before; \
+			printf(" -- Press any key to continue -- "); \
+			indev_pop_character(stdin); \
+			after; \
+			printf("\n"); \
+			(counter) = 0; \
+		} \
+	} while (0)
 
 extern indev_t *stdin;
Index: kernel/generic/include/interrupt.h
===================================================================
--- kernel/generic/include/interrupt.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/generic/include/interrupt.h	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -44,9 +44,10 @@
 #include <stacktrace.h>
 
-typedef void (* iroutine)(int, istate_t *);
+typedef void (* iroutine_t)(int, istate_t *);
 
 typedef struct {
 	const char *name;
-	iroutine f;
+	bool hot;
+	iroutine_t handler;
 	uint64_t cycles;
 	uint64_t count;
@@ -57,6 +58,6 @@
 
 extern void fault_if_from_uspace(istate_t *, const char *, ...);
-extern iroutine exc_register(int, const char *, iroutine);
-extern void exc_dispatch(int, istate_t *);
+extern iroutine_t exc_register(unsigned int, const char *, bool, iroutine_t);
+extern void exc_dispatch(unsigned int, istate_t *);
 extern void exc_init(void);
 
Index: kernel/generic/include/sysinfo/abi.h
===================================================================
--- kernel/generic/include/sysinfo/abi.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/generic/include/sysinfo/abi.h	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -130,4 +130,5 @@
 	unsigned int id;             /**< Exception ID */
 	char desc[EXC_NAME_BUFLEN];  /**< Description */
+	bool hot;                    /**< Active or inactive exception */
 	uint64_t cycles;             /**< Number of CPU cycles in the handler */
 	uint64_t count;              /**< Number of handled exceptions */
Index: kernel/generic/src/interrupt/interrupt.c
===================================================================
--- kernel/generic/src/interrupt/interrupt.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/generic/src/interrupt/interrupt.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -61,18 +61,26 @@
 /** Register exception handler
  *
- * @param n       Exception number
- * @param name    Description
- * @param handler Exception handler
- *
- */
-iroutine exc_register(int n, const char *name, iroutine handler)
-{
+ * @param n       Exception number.
+ * @param name    Description.
+ * @param hot     Whether the exception is actually handled
+ *                in any meaningful way.
+ * @param handler New exception handler.
+ *
+ * @return Previously registered exception handler.
+ *
+ */
+iroutine_t exc_register(unsigned int n, const char *name, bool hot,
+    iroutine_t handler)
+{
+#if (IVT_ITEMS > 0)
 	ASSERT(n < IVT_ITEMS);
+#endif
 	
 	irq_spinlock_lock(&exctbl_lock, true);
 	
-	iroutine old = exc_table[n].f;
-	exc_table[n].f = handler;
+	iroutine_t old = exc_table[n].handler;
+	exc_table[n].handler = handler;
 	exc_table[n].name = name;
+	exc_table[n].hot = hot;
 	exc_table[n].cycles = 0;
 	exc_table[n].count = 0;
@@ -89,7 +97,9 @@
  *
  */
-void exc_dispatch(int n, istate_t *istate)
-{
+void exc_dispatch(unsigned int n, istate_t *istate)
+{
+#if (IVT_ITEMS > 0)
 	ASSERT(n < IVT_ITEMS);
+#endif
 	
 	uint64_t begin_cycle = get_cycle();
@@ -107,5 +117,5 @@
 #endif
 	
-	exc_table[n].f(n + IVT_FIRST, istate);
+	exc_table[n].handler(n + IVT_FIRST, istate);
 	
 #ifdef CONFIG_UDEBUG
@@ -185,4 +195,6 @@
 #ifdef CONFIG_KCONSOLE
 
+static char flag_buf[MAX_CMDLINE + 1];
+
 /** Print all exceptions
  *
@@ -190,20 +202,38 @@
 static int cmd_exc_print(cmd_arg_t *argv)
 {
+	bool excs_all;
+	
+	if (str_cmp(flag_buf, "-a") == 0)
+		excs_all = true;
+	else if (str_cmp(flag_buf, "") == 0)
+		excs_all = false;
+	else {
+		printf("Unknown argument \"%s\".\n", flag_buf);
+		return 1;
+	}
+	
 #if (IVT_ITEMS > 0)
 	unsigned int i;
+	unsigned int rows;
 	
 	irq_spinlock_lock(&exctbl_lock, true);
 	
 #ifdef __32_BITS__
-	printf("Exc Description          Count      Cycles     Handler    Symbol\n");
-	printf("--- -------------------- ---------- ---------- ---------- --------\n");
+	printf("[exc   ] [description       ] [count   ] [cycles  ]"
+	    " [handler ] [symbol\n");
+	rows = 1;
 #endif
 	
 #ifdef __64_BITS__
-	printf("Exc Description          Count      Cycles     Handler            Symbol\n");
-	printf("--- -------------------- ---------- ---------- ------------------ --------\n");
+	printf("[exc   ] [description       ] [count   ] [cycles  ]"
+	    " [handler         ]\n");
+	printf("         [symbol\n");
+	rows = 2;
 #endif
 	
 	for (i = 0; i < IVT_ITEMS; i++) {
+		if ((!excs_all) && (!exc_table[i].hot))
+			continue;
+		
 		uint64_t count;
 		char count_suffix;
@@ -217,40 +247,49 @@
 		
 		const char *symbol =
-		    symtab_fmt_name_lookup((unative_t) exc_table[i].f);
+		    symtab_fmt_name_lookup((unative_t) exc_table[i].handler);
 		
 #ifdef __32_BITS__
-		printf("%-3u %-20s %9" PRIu64 "%c %9" PRIu64 "%c %10p %s\n",
+		printf("%-8u %-20s %9" PRIu64 "%c %9" PRIu64 "%c %10p %s\n",
 		    i + IVT_FIRST, exc_table[i].name, count, count_suffix,
-		    cycles, cycles_suffix, exc_table[i].f, symbol);
+		    cycles, cycles_suffix, exc_table[i].handler, symbol);
+		
+		PAGING(rows, 1, irq_spinlock_unlock(&exctbl_lock, true),
+		    irq_spinlock_lock(&exctbl_lock, true));
 #endif
 		
 #ifdef __64_BITS__
-		printf("%-3u %-20s %9" PRIu64 "%c %9" PRIu64 "%c %18p %s\n",
+		printf("%-8u %-20s %9" PRIu64 "%c %9" PRIu64 "%c %18p\n",
 		    i + IVT_FIRST, exc_table[i].name, count, count_suffix,
-		    cycles, cycles_suffix, exc_table[i].f, symbol);
-#endif
-		
-		if (((i + 1) % 20) == 0) {
-			printf(" -- Press any key to continue -- ");
-			irq_spinlock_unlock(&exctbl_lock, true);
-			indev_pop_character(stdin);
-			irq_spinlock_lock(&exctbl_lock, true);
-			printf("\n");
-		}
+		    cycles, cycles_suffix, exc_table[i].handler);
+		printf("         %s\n", symbol);
+		
+		PAGING(rows, 2, irq_spinlock_unlock(&exctbl_lock, true),
+		    irq_spinlock_lock(&exctbl_lock, true));
+#endif
 	}
 	
 	irq_spinlock_unlock(&exctbl_lock, true);
-#endif
+#else /* (IVT_ITEMS > 0) */
+	
+	printf("No exception table%s.\n", excs_all ? " (showing all exceptions)" : "");
+	
+#endif /* (IVT_ITEMS > 0) */
 	
 	return 1;
 }
+
+static cmd_arg_t exc_argv = {
+	.type = ARG_TYPE_STRING_OPTIONAL,
+	.buffer = flag_buf,
+	.len = sizeof(flag_buf)
+};
 
 static cmd_info_t exc_info = {
 	.name = "exc",
-	.description = "Print exception table.",
+	.description = "Print exception table (use -a for all exceptions).",
 	.func = cmd_exc_print,
 	.help = NULL,
-	.argc = 0,
-	.argv = NULL
+	.argc = 1,
+	.argv = &exc_argv
 };
 
@@ -268,5 +307,5 @@
 	
 	for (i = 0; i < IVT_ITEMS; i++)
-		exc_register(i, "undef", (iroutine) exc_undef);
+		exc_register(i, "undef", false, (iroutine_t) exc_undef);
 #endif
 	
Index: kernel/generic/src/sysinfo/stats.c
===================================================================
--- kernel/generic/src/sysinfo/stats.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ kernel/generic/src/sysinfo/stats.c	(revision b3b7e14a1e27b36c3c59ce41e9bc3060bdc881fd)
@@ -562,4 +562,5 @@
 	}
 	
+#if (IVT_ITEMS > 0)
 	/* Messing with exception table, avoid deadlock */
 	irq_spinlock_lock(&exctbl_lock, true);
@@ -569,4 +570,5 @@
 		stats_exceptions[i].id = i + IVT_FIRST;
 		str_cpy(stats_exceptions[i].desc, EXC_NAME_BUFLEN, exc_table[i].name);
+		stats_exceptions[i].hot = exc_table[i].hot;
 		stats_exceptions[i].cycles = exc_table[i].cycles;
 		stats_exceptions[i].count = exc_table[i].count;
@@ -574,4 +576,5 @@
 	
 	irq_spinlock_unlock(&exctbl_lock, true);
+#endif
 	
 	return ((void *) stats_exceptions);
@@ -606,11 +609,15 @@
 		return ret;
 	
-#if IVT_FIRST > 0
+#if (IVT_FIRST > 0)
 	if (excn < IVT_FIRST)
 		return ret;
 #endif
 	
+#if (IVT_ITEMS + IVT_FIRST == 0)
+	return ret;
+#else
 	if (excn >= IVT_ITEMS + IVT_FIRST)
 		return ret;
+#endif
 	
 	if (dry_run) {
@@ -638,4 +645,5 @@
 		stats_exception->id = excn;
 		str_cpy(stats_exception->desc, EXC_NAME_BUFLEN, exc_table[excn].name);
+		stats_exception->hot = exc_table[excn].hot;
 		stats_exception->cycles = exc_table[excn].cycles;
 		stats_exception->count = exc_table[excn].count;
