Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ uspace/app/top/screen.c	(revision 5f1fffb1e4b4cbc4ab3a8a6ff434751aaf4ede0c)
@@ -259,5 +259,5 @@
 }
 
-static inline void print_task_head(void)
+static inline void print_tasks_head(void)
 {
 	screen_style_inverted();
@@ -371,5 +371,5 @@
 }
 
-static inline void print_exc_head(void)
+static inline void print_excs_head(void)
 {
 	screen_style_inverted();
@@ -379,5 +379,5 @@
 }
 
-static inline void print_exc(data_t *data)
+static inline void print_excs(data_t *data)
 {
 	ipcarg_t cols;
@@ -390,5 +390,9 @@
 	
 	size_t i;
-	for (i = 0; (i < data->exceptions_count) && (row < rows); i++, row++) {
+	for (i = 0; (i < data->exceptions_count) && (row < rows); i++) {
+		/* Filter-out cold exceptions if not instructed otherwise */
+		if ((!excs_all) && (!data->exceptions[i].hot))
+			continue;
+		
 		uint64_t count;
 		uint64_t cycles;
@@ -409,5 +413,41 @@
 		
 		screen_newline();
-	}
+		row++;
+	}
+	
+	while (row < rows) {
+		screen_newline();
+		row++;
+	}
+}
+
+static void print_help(void)
+{
+	ipcarg_t cols;
+	ipcarg_t rows;
+	screen_get_size(&cols, &rows);
+	
+	ipcarg_t col;
+	ipcarg_t row;
+	screen_get_pos(&col, &row);
+	
+	screen_newline();
+	
+	printf("Operation modes:");
+	screen_newline();
+	
+	printf(" t .. tasks statistics");
+	screen_newline();
+	
+	printf(" i .. IPC statistics");
+	screen_newline();
+	
+	printf(" e .. exceptions statistics");
+	screen_newline();
+	
+	printf("      a .. toggle display of all/hot exceptions");
+	screen_newline();
+	
+	row += 6;
 	
 	while (row < rows) {
@@ -430,7 +470,7 @@
 	screen_newline();
 	
-	switch (operation_type) {
+	switch (op_mode) {
 	case OP_TASKS:
-		print_task_head();
+		print_tasks_head();
 		print_tasks(data);
 		break;
@@ -439,8 +479,11 @@
 		print_ipc(data);
 		break;
-	case OP_EXC:
-		print_exc_head();
-		print_exc(data);
+	case OP_EXCS:
+		print_excs_head();
+		print_excs(data);
 		break;
+	case OP_HELP:
+		print_tasks_head();
+		print_help();
 	}
 	
Index: uspace/app/top/top.c
===================================================================
--- uspace/app/top/top.c	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ uspace/app/top/top.c	(revision 5f1fffb1e4b4cbc4ab3a8a6ff434751aaf4ede0c)
@@ -56,5 +56,6 @@
 #define MINUTE  60
 
-int operation_type;
+op_mode_t op_mode = OP_TASKS;
+bool excs_all = false;
 
 static const char *read_data(data_t *target)
@@ -338,5 +339,4 @@
 	
 	/* And paint screen until death */
-	operation_type = OP_TASKS;
 	while (true) {
 		int c = tgetchar(UPDATE_INTERVAL);
@@ -360,20 +360,33 @@
 		
 		switch (c) {
+			case 't':
+				print_warning("Showing task statistics");
+				op_mode = OP_TASKS;
+				break;
+			case 'i':
+				print_warning("Showing IPC statistics");
+				op_mode = OP_IPC;
+				break;
+			case 'e':
+				print_warning("Showing exception statistics");
+				op_mode = OP_EXCS;
+				break;
+			case 'h':
+				print_warning("Showing help");
+				op_mode = OP_HELP;
+				break;
 			case 'q':
 				goto out;
-			case 'i':
-				print_warning("Showing IPC statistics");
-				operation_type = OP_IPC;
-				break;
-			case 't':
-				print_warning("Showing task statistics");
-				operation_type = OP_TASKS;
-				break;
-			case 'e':
-				print_warning("Showing exception statistics");
-				operation_type = OP_EXC;
-				break;
+			case 'a':
+				if (op_mode == OP_EXCS) {
+					excs_all = !excs_all;
+					if (excs_all)
+						print_warning("Showing all exceptions");
+					else
+						print_warning("Showing only hot exceptions");
+					break;
+				}
 			default:
-				print_warning("Unknown command: %c", c);
+				print_warning("Unknown command \"%c\", use \"h\" for help", c);
 				break;
 		}
Index: uspace/app/top/top.h
===================================================================
--- uspace/app/top/top.h	(revision be069144135afaab9e7c8cee79ffd3504762612c)
+++ uspace/app/top/top.h	(revision 5f1fffb1e4b4cbc4ab3a8a6ff434751aaf4ede0c)
@@ -40,5 +40,5 @@
 
 #define FRACTION_TO_FLOAT(float, a, b) \
-	{ \
+	do { \
 		if ((b) != 0) { \
 			(float).upper = (a); \
@@ -48,11 +48,15 @@
 			(float).lower = 1; \
 		} \
-	}
+	} while (0)
 
-#define OP_TASKS  1
-#define OP_IPC    2
-#define OP_EXC    3
+typedef enum {
+	OP_TASKS,
+	OP_IPC,
+	OP_EXCS,
+	OP_HELP
+} op_mode_t;
 
-extern int operation_type;
+extern op_mode_t op_mode;
+extern bool excs_all;
 
 typedef struct {
