Index: uspace/app/bdsh/cmds/modules/cat/cat.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cat/cat.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/bdsh/cmds/modules/cat/cat.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -117,21 +117,24 @@
 static void waitkey()
 {
-	kbd_event_t ev;
+	cons_event_t ev;
+	kbd_event_t *kev;
 	
 	while (true) {
-		if (!console_get_kbd_event(console, &ev)) {
+		if (!console_get_event(console, &ev)) {
 			return;
 		}
-		if (ev.type == KEY_PRESS) {
-			if (ev.key == KC_ESCAPE || ev.key == KC_Q) {
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) {
+			kev = &ev.ev.key;
+			
+			if (kev->key == KC_ESCAPE || kev->key == KC_Q) {
 				should_quit = true;
 				return;
 			}
-			if (ev.key == KC_C) {
+			if (kev->key == KC_C) {
 				paging_enabled = false;
 				return;
 			}
-			if (ev.key == KC_ENTER || ev.key == KC_SPACE ||
-			    ev.key == KC_PAGE_DOWN) {
+			if (kev->key == KC_ENTER || kev->key == KC_SPACE ||
+			    kev->key == KC_PAGE_DOWN) {
 				return;
 			}
Index: uspace/app/bdsh/cmds/modules/cp/cp.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cp/cp.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/bdsh/cmds/modules/cp/cp.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -152,13 +152,13 @@
 
 	while (true) {
-		kbd_event_t ev;
+		cons_event_t ev;
 		console_flush(con);
-		console_get_kbd_event(con, &ev);
-		if ((ev.type != KEY_PRESS)
-		    || (ev.mods & (KM_CTRL | KM_ALT)) != 0) {
+		console_get_event(con, &ev);
+		if (ev.type != CEV_KEY || ev.ev.key.type != KEY_PRESS ||
+		    (ev.ev.key.mods & (KM_CTRL | KM_ALT)) != 0) {
 			continue;
 		}
 
-		switch(ev.key) {
+		switch(ev.ev.key.key) {
 		case KC_Y:
 			printf("y\n");
Index: uspace/app/edit/edit.c
===================================================================
--- uspace/app/edit/edit.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/edit/edit.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -182,5 +182,6 @@
 int main(int argc, char *argv[])
 {
-	kbd_event_t ev;
+	cons_event_t ev;
+	kbd_event_t *kev;
 	bool new_file;
 	int rc;
@@ -245,23 +246,25 @@
 
 	while (!done) {
-		console_get_kbd_event(con, &ev);
+		console_get_event(con, &ev);
 		pane.rflags = 0;
 
-		if (ev.type == KEY_PRESS) {
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) {
+			kev = &ev.ev.key;
+
 			/* Handle key press. */
-			if (((ev.mods & KM_ALT) == 0) &&
-			    ((ev.mods & KM_SHIFT) == 0) &&
-			     (ev.mods & KM_CTRL) != 0) {
-				key_handle_ctrl(&ev);
-			} else if (((ev.mods & KM_ALT) == 0) &&
-			    ((ev.mods & KM_CTRL) == 0) &&
-			     (ev.mods & KM_SHIFT) != 0) {
-				key_handle_shift(&ev);
-			} else if (((ev.mods & KM_ALT) == 0) &&
-			    ((ev.mods & KM_CTRL) != 0) &&
-			     (ev.mods & KM_SHIFT) != 0) {
-				key_handle_shift_ctrl(&ev);
-			} else if ((ev.mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) {
-				key_handle_unmod(&ev);
+			if (((kev->mods & KM_ALT) == 0) &&
+			    ((kev->mods & KM_SHIFT) == 0) &&
+			     (kev->mods & KM_CTRL) != 0) {
+				key_handle_ctrl(kev);
+			} else if (((kev->mods & KM_ALT) == 0) &&
+			    ((kev->mods & KM_CTRL) == 0) &&
+			     (kev->mods & KM_SHIFT) != 0) {
+				key_handle_shift(kev);
+			} else if (((kev->mods & KM_ALT) == 0) &&
+			    ((kev->mods & KM_CTRL) != 0) &&
+			     (kev->mods & KM_SHIFT) != 0) {
+				key_handle_shift_ctrl(kev);
+			} else if ((kev->mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) {
+				key_handle_unmod(kev);
 			}
 		}
@@ -592,5 +595,6 @@
 static char *prompt(char const *prompt, char const *init_value)
 {
-	kbd_event_t ev;
+	cons_event_t ev;
+	kbd_event_t *kev;
 	char *str;
 	wchar_t buffer[INFNAME_MAX_LEN + 1];
@@ -612,13 +616,15 @@
 
 	while (!done) {
-		console_get_kbd_event(con, &ev);
-
-		if (ev.type == KEY_PRESS) {
+		console_get_event(con, &ev);
+
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) {
+			kev = &ev.ev.key;
+
 			/* Handle key press. */
-			if (((ev.mods & KM_ALT) == 0) &&
-			     (ev.mods & KM_CTRL) != 0) {
+			if (((kev->mods & KM_ALT) == 0) &&
+			     (kev->mods & KM_CTRL) != 0) {
 				;
-			} else if ((ev.mods & (KM_CTRL | KM_ALT)) == 0) {
-				switch (ev.key) {
+			} else if ((kev->mods & (KM_CTRL | KM_ALT)) == 0) {
+				switch (kev->key) {
 				case KC_ESCAPE:
 					return NULL;
@@ -634,8 +640,8 @@
 					break;
 				default:
-					if (ev.c >= 32 && nc < max_len) {
-						putchar(ev.c);
+					if (kev->c >= 32 && nc < max_len) {
+						putchar(kev->c);
 						console_flush(con);
-						buffer[nc++] = ev.c;
+						buffer[nc++] = kev->c;
 					}
 					break;
Index: uspace/app/mkbd/main.c
===================================================================
--- uspace/app/mkbd/main.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/mkbd/main.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -178,6 +178,6 @@
 
 	while (1) {
-		kbd_event_t ev;
-		bool ok = console_get_kbd_event(con, &ev);
+		cons_event_t ev;
+		bool ok = console_get_event(con, &ev);
 		if (!ok) {
 			printf("Connection with console broken: %s.\n",
@@ -186,5 +186,6 @@
 		}
 
-		if (ev.key == KC_ESCAPE) {
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS &&
+		    ev.ev.key.key == KC_ESCAPE) {
 			break;
 		}
Index: uspace/app/msim/arch_helenos/input.c
===================================================================
--- uspace/app/msim/arch_helenos/input.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/msim/arch_helenos/input.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -91,17 +91,17 @@
 bool stdin_poll(char *key)
 {
-	kbd_event_t ev;
+	cons_event_t ev;
 	suseconds_t timeout = 0;
 	errno = EOK;
 	console_flush(input_prompt->console);
-	bool has_input = console_get_kbd_event_timeout(input_prompt->console, &ev, &timeout);
+	bool has_input = console_get_event_timeout(input_prompt->console, &ev, &timeout);
 	if (!has_input) {
 		return false;
 	}
 
-	if (ev.type != KEY_PRESS)
+	if (ev.type != CEV_KEY || ev.ev.key.type != KEY_PRESS)
 		return false;
 
-	*key = ev.c;
+	*key = ev.ev.key.c;
 
 	return true;
Index: uspace/app/nterm/nterm.c
===================================================================
--- uspace/app/nterm/nterm.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/nterm/nterm.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -109,5 +109,5 @@
 int main(int argc, char *argv[])
 {
-	kbd_event_t ev;
+	cons_event_t ev;
 	int rc;
 
@@ -129,7 +129,7 @@
 	done = false;
 	while (!done) {
-		console_get_kbd_event(con, &ev);
-		if (ev.type == KEY_PRESS)
-			key_handle(&ev);
+		console_get_event(con, &ev);
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS)
+			key_handle(&ev.ev.key);
 	}
 
Index: uspace/app/ping/ping.c
===================================================================
--- uspace/app/ping/ping.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/ping/ping.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -188,5 +188,5 @@
 {
 	console_ctrl_t *con;
-	kbd_event_t ev;
+	cons_event_t ev;
 
 	con = console_init(stdin, stdout);
@@ -194,11 +194,12 @@
 
 	while (true) {
-		if (!console_get_kbd_event(con, &ev))
+		if (!console_get_event(con, &ev))
 			break;
 
-		if (ev.type == KEY_PRESS && (ev.mods & (KM_ALT | KM_SHIFT)) ==
-		    0 && (ev.mods & KM_CTRL) != 0) {
+		if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS &&
+		    (ev.ev.key.mods & (KM_ALT | KM_SHIFT)) ==
+		    0 && (ev.ev.key.mods & KM_CTRL) != 0) {
 			/* Ctrl+key */
-			if (ev.key == KC_Q) {
+			if (ev.ev.key.key == KC_Q) {
 				ping_signal_done();
 				return 0;
Index: uspace/app/tester/ipc/starve.c
===================================================================
--- uspace/app/tester/ipc/starve.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/tester/ipc/starve.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -62,9 +62,9 @@
 			break;
 		
-		kbd_event_t ev;
+		cons_event_t ev;
 		suseconds_t timeout = 0;
-		bool has_event = console_get_kbd_event_timeout(console, &ev, &timeout);
-		if (has_event && (ev.type == KEY_PRESS)) {
-			TPRINTF("Key %d pressed, terminating.\n", ev.key);
+		bool has_event = console_get_event_timeout(console, &ev, &timeout);
+		if (has_event && ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) {
+			TPRINTF("Key %d pressed, terminating.\n", ev.ev.key.key);
 			break;
 		}
Index: uspace/app/tetris/scores.c
===================================================================
--- uspace/app/tetris/scores.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/tetris/scores.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -125,5 +125,6 @@
 	int j;
 	size_t off;
-	kbd_event_t ev;
+	cons_event_t ev;
+	kbd_event_t *kev;
 	
 	clear_screen();
@@ -141,14 +142,16 @@
 	while (1) {
 		console_flush(console);
-		if (!console_get_kbd_event(console, &ev))
+		if (!console_get_event(console, &ev))
 			exit(1);
 		
-		if (ev.type == KEY_RELEASE)
+		if (ev.type != CEV_KEY || ev.ev.key.type == KEY_RELEASE)
 			continue;
 		
-		if (ev.key == KC_ENTER || ev.key == KC_NENTER)
+		kev = &ev.ev.key;
+		
+		if (kev->key == KC_ENTER || kev->key == KC_NENTER)
 			break;
 		
-		if (ev.key == KC_BACKSPACE) {
+		if (kev->key == KC_BACKSPACE) {
 			if (i > 0) {
 				wchar_t uc;
@@ -166,7 +169,7 @@
 				scores[NUMSPOTS - 1].hs_name[off] = '\0';
 			}
-		} else if (ev.c != '\0') {
+		} else if (kev->c != '\0') {
 			if (i < (MAXLOGNAME - 1)) {
-				if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name,
+				if (chr_encode(kev->c, scores[NUMSPOTS - 1].hs_name,
 				    &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) {
 					++i;
Index: uspace/app/tetris/screen.c
===================================================================
--- uspace/app/tetris/screen.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/tetris/screen.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -344,7 +344,7 @@
 	
 	while (timeout > 0) {
-		kbd_event_t event;
-		
-		if (!console_get_kbd_event_timeout(console, &event, &timeout))
+		cons_event_t event;
+		
+		if (!console_get_event_timeout(console, &event, &timeout))
 			break;
 	}
@@ -376,13 +376,13 @@
 	
 	while (c == 0) {
-		kbd_event_t event;
-		
-		if (!console_get_kbd_event_timeout(console, &event, &timeleft)) {
+		cons_event_t event;
+		
+		if (!console_get_event_timeout(console, &event, &timeleft)) {
 			timeleft = 0;
 			return -1;
 		}
 		
-		if (event.type == KEY_PRESS)
-			c = event.c;
+		if (event.type == CEV_KEY && event.ev.key.type == KEY_PRESS)
+			c = event.ev.key.c;
 	}
 	
@@ -398,11 +398,11 @@
 	
 	while (c == 0) {
-		kbd_event_t event;
-		
-		if (!console_get_kbd_event(console, &event))
+		cons_event_t event;
+		
+		if (!console_get_event(console, &event))
 			return -1;
 		
-		if (event.type == KEY_PRESS)
-			c = event.c;
+		if (event.type == CEV_KEY && event.ev.key.type == KEY_PRESS)
+			c = event.ev.key.c;
 	}
 	
Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/top/screen.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -556,8 +556,8 @@
 	
 	while (c == 0) {
-		kbd_event_t event;
+		cons_event_t event;
 		
 		warning_timeleft -= timeleft;
-		if (!console_get_kbd_event_timeout(console, &event, &timeleft)) {
+		if (!console_get_event_timeout(console, &event, &timeleft)) {
 			timeleft = 0;
 			return -1;
@@ -565,6 +565,6 @@
 		warning_timeleft += timeleft;
 		
-		if (event.type == KEY_PRESS)
-			c = event.c;
+		if (event.type == CEV_KEY && event.ev.key.type == KEY_PRESS)
+			c = event.ev.key.c;
 	}
 	
Index: uspace/app/trace/trace.c
===================================================================
--- uspace/app/trace/trace.c	(revision b4f43a19b53eaca4706796426c845d409da9b49b)
+++ uspace/app/trace/trace.c	(revision 3f06dae84ce91fe16bc8e73eb9b8545daf76d452)
@@ -565,4 +565,6 @@
 static int cev_fibril(void *arg)
 {
+	cons_event_t event;
+
 	(void) arg;
 	
@@ -575,11 +577,14 @@
 		fibril_mutex_unlock(&state_lock);
 		
-		if (!console_get_kbd_event(console, &cev))
+		if (!console_get_event(console, &event))
 			return -1;
 		
-		fibril_mutex_lock(&state_lock);
-		cev_valid = true;
-		fibril_condvar_broadcast(&state_cv);
-		fibril_mutex_unlock(&state_lock);
+		if (event.type == CEV_KEY) {
+			fibril_mutex_lock(&state_lock);
+			cev = event.ev.key;
+			cev_valid = true;
+			fibril_condvar_broadcast(&state_cv);
+			fibril_mutex_unlock(&state_lock);
+		}
 	}
 }
