Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision 1113c9e130ee0cf71775a520394a8c7b73e1cf1e)
+++ uspace/app/top/screen.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -325,4 +325,41 @@
 }
 
+static inline void print_exc_head(void)
+{
+	screen_style_inverted();
+	printf("  ID                     Desc    Count   Cycles");
+	screen_newline();
+	screen_style_normal();
+}
+
+static inline void print_exc(data_t *data)
+{
+	ipcarg_t cols;
+	ipcarg_t rows;
+	screen_get_size(&cols, &rows);
+	
+	ipcarg_t col;
+	ipcarg_t row;
+	screen_get_pos(&col, &row);
+	
+	size_t i;
+	for (i = 0; (i < data->exceptions_count) && (row < rows); i++, row++) {
+		uint64_t cycles;
+		char suffix;
+		
+		order_suffix(data->exceptions[i].cycles, &cycles, &suffix);
+		printf("%8u %20s %8" PRIu64 " %8" PRIu64 "%c",
+		     data->exceptions[i].id, data->exceptions[i].desc,
+		     data->exceptions[i].count, cycles, suffix);
+		
+		screen_newline();
+	}
+	
+	while (row < rows) {
+		screen_newline();
+		row++;
+	}
+}
+
 void print_data(data_t *data)
 {
@@ -338,10 +375,17 @@
 	screen_newline();
 	
-	if (operation_type == OP_IPC) {
+	switch (operation_type) {
+	case OP_TASKS:
+		print_task_head();
+		print_tasks(data);
+		break;
+	case OP_IPC:
 		print_ipc_head();
 		print_ipc(data);
-	} else {
-		print_task_head();
-		print_tasks(data);
+		break;
+	case OP_EXC:
+		print_exc_head();
+		print_exc(data);
+		break;
 	}
 	
Index: uspace/app/top/top.c
===================================================================
--- uspace/app/top/top.c	(revision 1113c9e130ee0cf71775a520394a8c7b73e1cf1e)
+++ uspace/app/top/top.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -115,4 +115,8 @@
 		return "Cannot get threads";
 	
+	target->exceptions = stats_get_exceptions(&(target->exceptions_count));
+	if (target->exceptions == NULL)
+		return "Cannot get exceptions";
+	
 	/* Get physical memory */
 	target->physmem = stats_get_physmem();
@@ -231,4 +235,7 @@
 	if (target->threads != NULL)
 		free(target->threads);
+	
+	if (target->exceptions != NULL)
+		free(target->exceptions);
 	
 	if (target->physmem != NULL)
@@ -285,4 +292,8 @@
 				operation_type = OP_TASKS;
 				break;
+			case 'e':
+				print_warning("Showing exception statistics");
+				operation_type = OP_EXC;
+				break;
 			default:
 				print_warning("Unknown command: %c", c);
Index: uspace/app/top/top.h
===================================================================
--- uspace/app/top/top.h	(revision 1113c9e130ee0cf71775a520394a8c7b73e1cf1e)
+++ uspace/app/top/top.h	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -46,4 +46,5 @@
 #define OP_TASKS  1
 #define OP_IPC    2
+#define OP_EXC    3
 
 extern int operation_type;
@@ -89,4 +90,7 @@
 	stats_thread_t *threads;
 	
+	size_t exceptions_count;
+	stats_exc_t *exceptions;
+	
 	stats_physmem_t *physmem;
 } data_t;
Index: uspace/lib/c/generic/stats.c
===================================================================
--- uspace/lib/c/generic/stats.c	(revision 1113c9e130ee0cf71775a520394a8c7b73e1cf1e)
+++ uspace/lib/c/generic/stats.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -184,4 +184,48 @@
 }
 
+/** Get exception statistics.
+ *
+ * @param count Number of records returned.
+ *
+ * @return Array of stats_exc_t structures.
+ *         If non-NULL then it should be eventually freed
+ *         by free().
+ *
+ */
+stats_exc_t *stats_get_exceptions(size_t *count)
+{
+	size_t size = 0;
+	stats_exc_t *stats_exceptions =
+	    (stats_exc_t *) sysinfo_get_data("system.exceptions", &size);
+	
+	assert((size % sizeof(stats_exc_t)) == 0);
+	
+	*count = size / sizeof(stats_exc_t);
+	return stats_exceptions;
+}
+
+/** Get single exception statistics
+ *
+ * @param excn Exception number we are interested in.
+ *
+ * @return Pointer to the stats_exc_t structure.
+ *         If non-NULL then it should be eventually freed
+ *         by free().
+ *
+ */
+stats_exc_t *stats_get_exception(unsigned int excn)
+{
+	char name[SYSINFO_STATS_MAX_PATH];
+	snprintf(name, SYSINFO_STATS_MAX_PATH, "system.exceptionss.%u", excn);
+	
+	size_t size = 0;
+	stats_exc_t *stats_exception =
+	    (stats_exc_t *) sysinfo_get_data(name, &size);
+	
+	assert((size == sizeof(stats_exc_t)) || (size == 0));
+	
+	return stats_exception;
+}
+
 /** Get system load
  *
Index: uspace/lib/c/include/stats.h
===================================================================
--- uspace/lib/c/include/stats.h	(revision 1113c9e130ee0cf71775a520394a8c7b73e1cf1e)
+++ uspace/lib/c/include/stats.h	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -53,4 +53,7 @@
 extern stats_thread_t *stats_get_thread(thread_id_t);
 
+extern stats_exc_t *stats_get_exceptions(size_t *);
+extern stats_exc_t *stats_get_exception(unsigned int);
+
 extern void stats_print_load_fragment(load_t, unsigned int);
 extern const char *thread_get_state(state_t);
