Index: uspace/app/bdsh/input.c
===================================================================
--- uspace/app/bdsh/input.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/app/bdsh/input.c	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -35,4 +35,6 @@
 #include <io/stream.h>
 #include <console.h>
+#include <kbd/kbd.h>
+#include <kbd/keycode.h>
 
 #include "config.h"
@@ -97,15 +99,18 @@
 static void read_line(char *buffer, int n)
 {
-	char c;
+	kbd_event_t ev;
 	int chars;
 
 	chars = 0;
 	while (chars < n - 1) {
-		c = getchar();
-		if (c < 0)
+		fflush(stdout);
+		if (kbd_get_event(&ev) < 0)
 			return;
-		if (c == '\n')
+		if (ev.type == KE_RELEASE)
+			continue;
+
+		if (ev.key == KC_ENTER || ev.key == KC_NENTER)
 			break;
-		if (c == '\b') {
+		if (ev.key == KC_BACKSPACE) {
 			if (chars > 0) {
 				putchar('\b');
@@ -114,7 +119,8 @@
 			continue;
 		}
-		if (c >= ' ') {
-			putchar(c);
-			buffer[chars++] = c;
+		if (ev.c >= ' ') {
+			//putchar(ev.c);
+			console_putchar(ev.c);
+			buffer[chars++] = ev.c;
 		}
 	}
Index: uspace/app/tester/print/print4.c
===================================================================
--- uspace/app/tester/print/print4.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/app/tester/print/print4.c	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -82,4 +82,6 @@
 		printf("Russian:  %ls\n", L"Леннон познакомился с художницей-авангардисткой");
 		printf("Armenian: %ls\n", L"Սկսեց հրատարակվել Երուսաղեմի հայկական");
+
+		printf("Test: [%d] '%lc'\n", L'\x0161', L'\x0161');
 	}
 
Index: uspace/lib/libc/Makefile.toolchain
===================================================================
--- uspace/lib/libc/Makefile.toolchain	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/lib/libc/Makefile.toolchain	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -27,5 +27,8 @@
 #
 
-CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -O3 -nostdlib -nostdinc -imacros $(LIBC_PREFIX)/../../../config.h -I$(LIBC_PREFIX)/include -pipe -g
+CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration\
+    -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32 -finput-charset=UTF-8\
+    -Wmissing-prototypes -O3 -nostdlib -nostdinc -imacros\
+    $(LIBC_PREFIX)/../../../config.h -I$(LIBC_PREFIX)/include -pipe -g
 LFLAGS = -M -N $(SOFTINT_PREFIX)/libsoftint.a
 AFLAGS =
Index: uspace/lib/libc/generic/console.c
===================================================================
--- uspace/lib/libc/generic/console.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/lib/libc/generic/console.c	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -58,5 +58,5 @@
 
 static ssize_t cons_write(const char *buf, size_t nbyte);
-static void cons_putchar(int c);
+static void cons_putchar(wchar_t c);
 
 static void cbuffer_flush(void);
@@ -120,7 +120,9 @@
 }
 
-void console_putchar(int c)
-{
-	cbuffer_putc(c);
+void console_putchar(wchar_t c)
+{
+//	cbuffer_putc(c);
+	cbuffer_flush();
+	cons_putchar(c);
 }
 
@@ -163,5 +165,5 @@
 
 /** Write one character to the console via IPC. */
-static void cons_putchar(int c)
+static void cons_putchar(wchar_t c)
 {
 	int cons_phone = console_phone_get(true);
Index: uspace/lib/libc/generic/io/io.c
===================================================================
--- uspace/lib/libc/generic/io/io.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/lib/libc/generic/io/io.c	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -37,4 +37,6 @@
 #include <stdio.h>
 #include <io/io.h>
+#include <string.h>
+#include <errno.h>
 
 const static char nl = '\n';
@@ -88,8 +90,14 @@
 int putchar(int c)
 {
-	unsigned char ch = c;
-	if (write_stdout((void *) &ch, 1) == 1)
+	char buf[STR_BOUNDS(1)];
+	size_t offs;
+
+	offs = 0;
+	if (chr_encode(c, buf, &offs, STR_BOUNDS(1)) != EOK)
+		return EOF;
+
+	if (write_stdout((void *) buf, offs) == offs)
 		return c;
-	
+
 	return EOF;
 }
Index: uspace/lib/libc/include/console.h
===================================================================
--- uspace/lib/libc/include/console.h	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/lib/libc/include/console.h	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -38,4 +38,5 @@
 #include <console/style.h>
 #include <console/color.h>
+#include <sys/types.h>
 #include <bool.h>
 
@@ -48,5 +49,5 @@
 extern void console_clear(void);
 extern void console_goto(int, int);
-extern void console_putchar(int);
+extern void console_putchar(wchar_t);
 extern ssize_t console_write(const char *buf, size_t nbyte);
 extern void console_putstr(const char *s);
Index: uspace/srv/kbd/layout/cz.c
===================================================================
--- uspace/srv/kbd/layout/cz.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
+++ uspace/srv/kbd/layout/cz.c	(revision 56fa4183f5ed5c8a38196456f8502880e55bf945)
@@ -38,16 +38,16 @@
 
 static wchar_t map_lcase[] = {
-	[KC_2] = 'ě',
-	[KC_3] = 'š',
-	[KC_4] = 'č',
-	[KC_5] = 'ř',
-	[KC_6] = 'ž',
-	[KC_7] = 'ý',
-	[KC_8] = 'á',
-	[KC_9] = 'í',
-	[KC_0] = 'é',
-
-	[KC_LBRACKET] = 'ú',
-	[KC_SEMICOLON] = 'ů',
+	[KC_2] = L'ě',
+	[KC_3] = L'š',
+	[KC_4] = L'č',
+	[KC_5] = L'ř',
+	[KC_6] = L'ž',
+	[KC_7] = L'ý',
+	[KC_8] = L'á',
+	[KC_9] = L'í',
+	[KC_0] = L'é',
+
+	[KC_LBRACKET] = L'ú',
+	[KC_SEMICOLON] = L'ů',
 
 	[KC_Q] = 'q',
@@ -82,16 +82,16 @@
 
 static wchar_t map_ucase[] = {
-	[KC_2] = 'Ě',
-	[KC_3] = 'Š',
-	[KC_4] = 'Č',
-	[KC_5] = 'Ř',
-	[KC_6] = 'Ž',
-	[KC_7] = 'Ý',
-	[KC_8] = 'Á',
-	[KC_9] = 'Í',
-	[KC_0] = 'É',
-
-	[KC_LBRACKET] = 'Ú',
-	[KC_SEMICOLON] = 'Ů',
+	[KC_2] = L'Ě',
+	[KC_3] = L'Š',
+	[KC_4] = L'Č',
+	[KC_5] = L'Ř',
+	[KC_6] = L'Ž',
+	[KC_7] = L'Ý',
+	[KC_8] = L'Á',
+	[KC_9] = L'Í',
+	[KC_0] = L'É',
+
+	[KC_LBRACKET] = L'Ú',
+	[KC_SEMICOLON] = L'Ů',
 
 	[KC_Q] = 'Q',
@@ -134,5 +134,5 @@
 	[KC_RBRACKET] = ')',
 
-	[KC_QUOTE] = '§',
+	[KC_QUOTE] = L'§',
 
 	[KC_COMMA] = ',',
