Index: uspace/lib/libc/Makefile.toolchain
===================================================================
--- uspace/lib/libc/Makefile.toolchain	(revision 9db407965cef6f05d25dfc8de9cb515fee231915)
+++ uspace/lib/libc/Makefile.toolchain	(revision 0175246a19e8ee96e2ea4f2c13e89c437bf42b2e)
@@ -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 9db407965cef6f05d25dfc8de9cb515fee231915)
+++ uspace/lib/libc/generic/console.c	(revision 0175246a19e8ee96e2ea4f2c13e89c437bf42b2e)
@@ -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 9db407965cef6f05d25dfc8de9cb515fee231915)
+++ uspace/lib/libc/generic/io/io.c	(revision 0175246a19e8ee96e2ea4f2c13e89c437bf42b2e)
@@ -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 9db407965cef6f05d25dfc8de9cb515fee231915)
+++ uspace/lib/libc/include/console.h	(revision 0175246a19e8ee96e2ea4f2c13e89c437bf42b2e)
@@ -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);
