Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision d517c5b09f2aaa367548023397373507f68be923)
+++ uspace/app/top/screen.c	(revision 2d37006ac345fed37d72ab244a3e5b2dfb9f3727)
@@ -37,4 +37,5 @@
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <io/console.h>
 #include <io/style.h>
@@ -48,10 +49,13 @@
 #define USEC_COUNT  1000000
 
-static sysarg_t warn_col = 0;
-static sysarg_t warn_row = 0;
 static suseconds_t timeleft = 0;
 
 console_ctrl_t *console;
 
+static sysarg_t warning_col = 0;
+static sysarg_t warning_row = 0;
+static suseconds_t warning_timeleft = 0;
+static char *warning_text = NULL;
+
 static void screen_style_normal(void)
 {
@@ -64,4 +68,10 @@
 	console_flush(console);
 	console_set_style(console, STYLE_INVERTED);
+}
+
+static void screen_style_emphasis(void)
+{
+	console_flush(console);
+	console_set_style(console, STYLE_EMPHASIS);
 }
 
@@ -126,4 +136,7 @@
 void screen_done(void)
 {
+	free(warning_text);
+	warning_text = NULL;
+
 	screen_restart(true);
 	
@@ -484,4 +497,18 @@
 }
 
+static void print_warning(void)
+{
+	screen_get_pos(&warning_col, &warning_row);
+	if (warning_timeleft > 0) {
+		screen_style_emphasis();
+		print_string(warning_text);
+		screen_style_normal();
+	} else {
+		free(warning_text);
+		warning_text = NULL;
+	}
+	screen_newline();
+}
+
 void print_data(data_t *data)
 {
@@ -492,8 +519,5 @@
 	print_cpu_info(data);
 	print_physmem_info(data);
-	
-	/* Empty row for warnings */
-	screen_get_pos(&warn_col, &warn_row);
-	screen_newline();
+	print_warning();
 	
 	switch (op_mode) {
@@ -518,14 +542,25 @@
 }
 
-void print_warning(const char *fmt, ...)
-{
-	screen_moveto(warn_col, warn_row);
-	
+void show_warning(const char *fmt, ...)
+{
+	sysarg_t cols;
+	sysarg_t rows;
+	screen_get_size(&cols, &rows);
+
+	size_t warning_text_size = 1 + cols * sizeof(*warning_text);
+	free(warning_text);
+	warning_text = malloc(warning_text_size);
+	if (!warning_text)
+		return;
+
 	va_list args;
 	va_start(args, fmt);
-	vprintf(fmt, args);
+	vsnprintf(warning_text, warning_text_size, fmt, args);
 	va_end(args);
 	
-	screen_newline();
+	warning_timeleft = 2 * USEC_COUNT;
+
+	screen_moveto(warning_col, warning_row);
+	print_warning();
 	console_flush(console);
 }
@@ -555,8 +590,10 @@
 		kbd_event_t event;
 		
+		warning_timeleft -= timeleft;
 		if (!console_get_kbd_event_timeout(console, &event, &timeleft)) {
 			timeleft = 0;
 			return -1;
 		}
+		warning_timeleft += timeleft;
 		
 		if (event.type == KEY_PRESS)
Index: uspace/app/top/screen.h
===================================================================
--- uspace/app/top/screen.h	(revision d517c5b09f2aaa367548023397373507f68be923)
+++ uspace/app/top/screen.h	(revision 2d37006ac345fed37d72ab244a3e5b2dfb9f3727)
@@ -43,5 +43,5 @@
 extern void screen_done(void);
 extern void print_data(data_t *);
-extern void print_warning(const char *, ...);
+extern void show_warning(const char *, ...);
 
 extern int tgetchar(unsigned int);
Index: uspace/app/top/top.c
===================================================================
--- uspace/app/top/top.c	(revision d517c5b09f2aaa367548023397373507f68be923)
+++ uspace/app/top/top.c	(revision 2d37006ac345fed37d72ab244a3e5b2dfb9f3727)
@@ -406,12 +406,12 @@
 					excs_all = !excs_all;
 					if (excs_all)
-						print_warning("Showing all exceptions");
+						show_warning("Showing all exceptions");
 					else
-						print_warning("Showing only hot exceptions");
+						show_warning("Showing only hot exceptions");
 					break;
 				}
 				/* fallthrough */
 			default:
-				print_warning("Unknown command \"%c\", use \"h\" for help", c);
+				show_warning("Unknown command \"%c\", use \"h\" for help", c);
 				continue; /* don't redraw */
 		}
