Index: uspace/app/trace/trace.c
===================================================================
--- uspace/app/trace/trace.c	(revision ba6232bd2f369399badb59f84271dac603f8e975)
+++ uspace/app/trace/trace.c	(revision 9d8a1ed039f7790dbad40cecbffe6cd7efe0c963)
@@ -45,4 +45,6 @@
 #include <string.h>
 #include <loader/loader.h>
+#include <io/console.h>
+#include <io/keycode.h>
 
 #include <libc.h>
@@ -453,9 +455,7 @@
 
 		if (paused) {
-			printf("Press R to resume (and be patient).\n");
+			printf("Press R to resume.\n");
 			while (paused) {
-				usleep(1000000);
-				fibril_yield();
-				printf(".");
+				async_usleep(1000000);
 			}
 			printf("Resumed\n");
@@ -558,7 +558,8 @@
 static void trace_task(task_id_t task_id)
 {
+	console_event_t ev;
+	bool done;
 	int i;
 	int rc;
-	int c;
 
 	ipcp_init();
@@ -582,16 +583,29 @@
 	}
 
-	while(1) {
-		c = getchar();
-		if (c == 'q') break;
-		if (c == 'p') {
+	done = false;
+
+	while (!done) {
+		if (!console_get_event(fphone(stdin), &ev))
+			return;
+
+		if (ev.type != KEY_PRESS)
+			continue;
+
+		switch (ev.key) {
+		case KC_Q:
+			done = true;
+			break;
+		case KC_P:
 			printf("Pause...\n");
-			paused = 1;
 			rc = udebug_stop(phoneid, thash);
-			printf("stop -> %d\n", rc);
-		}
-		if (c == 'r') {
+			if (rc == EOK)
+				paused = 1;
+			else
+				printf("stop -> %d\n", rc);
+			break;
+		case KC_R:
 			paused = 0;
 			printf("Resume...\n");
+			break;
 		}
 	}
