Index: uspace/lib/libc/include/kbd/kbd.h
===================================================================
--- uspace/lib/libc/include/kbd/kbd.h	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/lib/libc/include/kbd/kbd.h	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -36,4 +36,6 @@
 #define LIBC_KBD_H_
 
+#include <sys/types.h>
+
 typedef enum kbd_ev_type {
 	KE_PRESS,
@@ -53,5 +55,5 @@
 
 	/** The character that was generated or '\0' for none. */
-	char c;
+	wchar_t c;
 } kbd_event_t;
 
Index: uspace/srv/kbd/generic/key_buffer.c
===================================================================
--- uspace/srv/kbd/generic/key_buffer.c	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/srv/kbd/generic/key_buffer.c	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -94,12 +94,4 @@
 }
 
-void keybuffer_push0(keybuffer_t *keybuffer, int c)
-{
-	kbd_event_t ev;
-
-	ev.key = c; ev.mods = 0; ev.c = c;
-	keybuffer_push(keybuffer, &ev);
-}
-
 /** Pop event from buffer.
  *
Index: uspace/srv/kbd/include/key_buffer.h
===================================================================
--- uspace/srv/kbd/include/key_buffer.h	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/srv/kbd/include/key_buffer.h	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -56,5 +56,4 @@
 extern int keybuffer_empty(keybuffer_t *);
 extern void keybuffer_push(keybuffer_t *, const kbd_event_t *);
-extern void keybuffer_push0(keybuffer_t *, int c);
 extern int keybuffer_pop(keybuffer_t *, kbd_event_t *);
 
Index: uspace/srv/kbd/include/layout.h
===================================================================
--- uspace/srv/kbd/include/layout.h	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/srv/kbd/include/layout.h	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -39,6 +39,7 @@
 
 #include <kbd/kbd.h>
+#include <sys/types.h>
 
-extern char layout_parse_ev(kbd_event_t *);
+extern wchar_t layout_parse_ev(kbd_event_t *);
 
 #endif
Index: uspace/srv/kbd/layout/us_dvorak.c
===================================================================
--- uspace/srv/kbd/layout/us_dvorak.c	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/srv/kbd/layout/us_dvorak.c	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -37,5 +37,5 @@
 #include <layout.h>
 
-static char map_lcase[] = {
+static wchar_t map_lcase[] = {
 	[KC_R] = 'p',
 	[KC_T] = 'y',
@@ -70,5 +70,5 @@
 };
 
-static char map_ucase[] = {
+static wchar_t map_ucase[] = {
 	[KC_R] = 'P',
 	[KC_T] = 'Y',
@@ -103,5 +103,5 @@
 };
 
-static char map_not_shifted[] = {
+static wchar_t map_not_shifted[] = {
 	[KC_BACKTICK] = '`',
 
@@ -133,5 +133,5 @@
 };
 
-static char map_shifted[] = {
+static wchar_t map_shifted[] = {
 	[KC_BACKTICK] = '~',
 
@@ -163,5 +163,5 @@
 };
 
-static char map_neutral[] = {
+static wchar_t map_neutral[] = {
 	[KC_BACKSPACE] = '\b',
 	[KC_TAB] = '\t',
@@ -176,5 +176,5 @@
 };
 
-static char map_numeric[] = {
+static wchar_t map_numeric[] = {
 	[KC_N7] = '7',
 	[KC_N8] = '8',
@@ -191,5 +191,5 @@
 };
 
-static int translate(unsigned int key, char *map, size_t map_length)
+static wchar_t translate(unsigned int key, wchar_t *map, size_t map_length)
 {
 	if (key >= map_length)
@@ -198,7 +198,7 @@
 }
 
-char layout_parse_ev(kbd_event_t *ev)
+wchar_t layout_parse_ev(kbd_event_t *ev)
 {
-	char c;
+	wchar_t c;
 
 	/* Produce no characters when Ctrl or Alt is pressed. */
@@ -206,12 +206,12 @@
 		return 0;
 
-	c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(char));
+	c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(wchar_t));
 	if (c != 0)
 		return c;
 
 	if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0))
-		c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(char));
+		c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(wchar_t));
 	else
-		c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(char));
+		c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(wchar_t));
 
 	if (c != 0)
@@ -219,7 +219,7 @@
 
 	if ((ev->mods & KM_SHIFT) != 0)
-		c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(char));
+		c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(wchar_t));
 	else
-		c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(char));
+		c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(wchar_t));
 
 	if (c != 0)
@@ -227,5 +227,5 @@
 
 	if ((ev->mods & KM_NUM_LOCK) != 0)
-		c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(char));
+		c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(wchar_t));
 	else
 		c = 0;
Index: uspace/srv/kbd/layout/us_qwerty.c
===================================================================
--- uspace/srv/kbd/layout/us_qwerty.c	(revision b27eb713f5ef13504eb62785a068d0794d63e353)
+++ uspace/srv/kbd/layout/us_qwerty.c	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
@@ -37,5 +37,5 @@
 #include <layout.h>
 
-static char map_lcase[] = {
+static wchar_t map_lcase[] = {
 	[KC_Q] = 'q',
 	[KC_W] = 'w',
@@ -68,5 +68,5 @@
 };
 
-static char map_ucase[] = {
+static wchar_t map_ucase[] = {
 	[KC_Q] = 'Q',
 	[KC_W] = 'W',
@@ -99,5 +99,5 @@
 };
 
-static char map_not_shifted[] = {
+static wchar_t map_not_shifted[] = {
 	[KC_BACKTICK] = '`',
 
@@ -128,5 +128,5 @@
 };
 
-static char map_shifted[] = {
+static wchar_t map_shifted[] = {
 	[KC_BACKTICK] = '~',
 
@@ -157,5 +157,5 @@
 };
 
-static char map_neutral[] = {
+static wchar_t map_neutral[] = {
 	[KC_BACKSPACE] = '\b',
 	[KC_TAB] = '\t',
@@ -170,5 +170,5 @@
 };
 
-static char map_numeric[] = {
+static wchar_t map_numeric[] = {
 	[KC_N7] = '7',
 	[KC_N8] = '8',
@@ -185,13 +185,14 @@
 };
 
-static int translate(unsigned int key, char *map, size_t map_length)
+static wchar_t translate(unsigned int key, wchar_t *map, size_t map_length)
 {
-	if (key >= map_length) return 0;
-	return map[key];	
+	if (key >= map_length)
+		return 0;
+	return map[key];
 }
 
-char layout_parse_ev(kbd_event_t *ev)
+wchar_t layout_parse_ev(kbd_event_t *ev)
 {
-	char c;
+	wchar_t c;
 
 	/* Produce no characters when Ctrl or Alt is pressed. */
@@ -199,23 +200,26 @@
 		return 0;
 
-	c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(char));
-	if (c != 0) return c;
+	c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(wchar_t));
+	if (c != 0)
+		return c;
 
 	if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0))
-		c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(char));
+		c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(wchar_t));
 	else
-		c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(char));
-
-	if (c != 0) return c;
+		c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(wchar_t));
+
+	if (c != 0)
+		return c;
 
 	if ((ev->mods & KM_SHIFT) != 0)
-		c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(char));
+		c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(wchar_t));
 	else
-		c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(char));
-
-	if (c != 0) return c;
+		c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(wchar_t));
+
+	if (c != 0)
+		return c;
 
 	if ((ev->mods & KM_NUM_LOCK) != 0)
-		c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(char));
+		c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(wchar_t));
 	else
 		c = 0;
