Index: boot/arch/arm32/src/putchar.c
===================================================================
--- boot/arch/arm32/src/putchar.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/arm32/src/putchar.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -195,5 +195,5 @@
  * @param ch	Character to display
  */
-void putchar(const wchar_t ch)
+void putwchar(const wchar_t ch)
 {
 	if (ch == '\n')
@@ -203,5 +203,5 @@
 		scons_sendb((uint8_t) ch);
 	else
-		scons_sendb(U_SPECIAL);
+		scons_sendb('?');
 }
 
Index: boot/arch/ia64/include/arch/ski.h
===================================================================
--- boot/arch/ia64/include/arch/ski.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/ia64/include/arch/ski.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -30,8 +30,5 @@
 #define BOOT_ia64_SKI_H_
 
-#include <stddef.h>
-#include <str.h>
-
-extern void ski_putchar(const wchar_t);
+extern void ski_putchar(char);
 
 #endif
Index: boot/arch/ia64/src/putchar.c
===================================================================
--- boot/arch/ia64/src/putchar.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/ia64/src/putchar.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -33,5 +33,5 @@
 #include <arch/ski.h>
 
-void putchar(const wchar_t ch)
+void putwchar(const wchar_t ch)
 {
 #ifdef MACHINE_ski
@@ -39,5 +39,5 @@
 		ski_putchar(ch);
 	else
-		ski_putchar(U_SPECIAL);
+		ski_putchar('?');
 #endif
 }
Index: boot/arch/ia64/src/ski.c
===================================================================
--- boot/arch/ia64/src/ski.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/ia64/src/ski.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -52,5 +52,5 @@
 }
 
-void ski_putchar(const wchar_t ch)
+void ski_putchar(char ch)
 {
 	ski_console_init();
Index: boot/arch/mips32/src/putchar.c
===================================================================
--- boot/arch/mips32/src/putchar.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/mips32/src/putchar.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -39,5 +39,5 @@
 #if defined(MACHINE_msim)
 #define _putchar(ch)	msim_putchar((ch))
-static void msim_putchar(const wchar_t ch)
+static void msim_putchar(char ch)
 {
 	*((char *) MSIM_VIDEORAM_ADDRESS) = ch;
@@ -51,18 +51,16 @@
     (yamon_print_count_ptr_t) YAMON_SUBR_PRINT_COUNT;
 
-static void yamon_putchar(const wchar_t wch)
+static void yamon_putchar(char ch)
 {
-	const char ch = (char) wch;
-
 	(*yamon_print_count)(0, &ch, 1);
 }
 #endif
 
-void putchar(const wchar_t ch)
+void putwchar(const wchar_t ch)
 {
 	if (ascii_check(ch))
 		_putchar(ch);
 	else
-		_putchar(U_SPECIAL);
+		_putchar('?');
 }
 
Index: boot/arch/ppc32/src/ofw.c
===================================================================
--- boot/arch/ppc32/src/ofw.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/ppc32/src/ofw.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -39,5 +39,5 @@
 }
 
-void putchar(const wchar_t ch)
+void putwchar(wchar_t ch)
 {
 	if (ch == '\n')
@@ -47,4 +47,4 @@
 		ofw_putchar(ch);
 	else
-		ofw_putchar(U_SPECIAL);
+		ofw_putchar('?');
 }
Index: boot/arch/riscv64/src/putchar.c
===================================================================
--- boot/arch/riscv64/src/putchar.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/riscv64/src/putchar.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -33,9 +33,9 @@
 #include <arch/ucb.h>
 
-void putchar(const wchar_t ch)
+void putwchar(wchar_t ch)
 {
 	if (ascii_check(ch))
 		htif_cmd(HTIF_DEVICE_CONSOLE, HTIF_CONSOLE_PUTC, ch);
 	else
-		htif_cmd(HTIF_DEVICE_CONSOLE, HTIF_CONSOLE_PUTC, U_SPECIAL);
+		htif_cmd(HTIF_DEVICE_CONSOLE, HTIF_CONSOLE_PUTC, '?');
 }
Index: boot/arch/sparc64/src/ofw.c
===================================================================
--- boot/arch/sparc64/src/ofw.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/arch/sparc64/src/ofw.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -43,5 +43,5 @@
 #include <str.h>
 
-void putchar(const wchar_t ch)
+void putwchar(wchar_t ch)
 {
 	if (ch == '\n')
@@ -51,5 +51,5 @@
 		ofw_putchar(ch);
 	else
-		ofw_putchar(U_SPECIAL);
+		ofw_putchar('?');
 }
 
Index: boot/genarch/include/genarch/ofw.h
===================================================================
--- boot/genarch/include/genarch/ofw.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/genarch/include/genarch/ofw.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -89,5 +89,5 @@
 extern void ofw_init(void);
 
-extern void ofw_putchar(const char);
+extern void ofw_putchar(char);
 
 extern ofw_arg_t ofw_get_property(const phandle, const char *, void *,
Index: boot/genarch/src/ofw.c
===================================================================
--- boot/genarch/src/ofw.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/genarch/src/ofw.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -194,5 +194,5 @@
 }
 
-void ofw_putchar(const char ch)
+void ofw_putchar(char ch)
 {
 	if (ofw_stdout == 0)
Index: boot/generic/include/putchar.h
===================================================================
--- boot/generic/include/putchar.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/generic/include/putchar.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -38,5 +38,5 @@
 #include <stddef.h>
 
-extern void putchar(const wchar_t);
+extern void putwchar(wchar_t);
 
 #endif
Index: boot/generic/src/vprintf.c
===================================================================
--- boot/generic/src/vprintf.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ boot/generic/src/vprintf.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -42,5 +42,5 @@
 
 	while (offset < size) {
-		putchar(str_decode(str, &offset, size));
+		putwchar(str_decode(str, &offset, size));
 		chars++;
 	}
@@ -56,9 +56,9 @@
 
 	while ((uc = str_decode(str, &offset, STR_NO_LIMIT)) != 0) {
-		putchar(uc);
+		putwchar(uc);
 		chars++;
 	}
 
-	putchar('\n');
+	putwchar('\n');
 	return chars;
 }
Index: kernel/arch/abs32le/src/abs32le.c
===================================================================
--- kernel/arch/abs32le/src/abs32le.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/abs32le/src/abs32le.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -136,5 +136,5 @@
 }
 
-void early_putchar(wchar_t ch)
+void early_putwchar(wchar_t ch)
 {
 }
Index: kernel/arch/amd64/src/asm.S
===================================================================
--- kernel/arch/amd64/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/amd64/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -412,5 +412,5 @@
  *
  */
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 #if ((defined(CONFIG_EGA)) && (!defined(CONFIG_FB)))
 
@@ -443,9 +443,9 @@
 	/* Sanity check for the cursor on screen */
 	cmp $2000, %ax
-	jb early_putchar_cursor_ok
+	jb early_putwchar_cursor_ok
 
 		movw $1998, %ax
 
-	early_putchar_cursor_ok:
+	early_putwchar_cursor_ok:
 
 	movw %ax, %bx
@@ -456,5 +456,5 @@
 
 	cmp $0x0a, %al
-	jne early_putchar_backspace
+	jne early_putwchar_backspace
 
 		/* Interpret newline */
@@ -470,20 +470,20 @@
 		subw %dx, %bx
 
-		jmp early_putchar_skip
-
-	early_putchar_backspace:
+		jmp early_putwchar_skip
+
+	early_putwchar_backspace:
 
 		cmp $0x08, %al
-		jne early_putchar_print
+		jne early_putwchar_print
 
 		/* Interpret backspace */
 
 		cmp $0x0000, %bx
-		je early_putchar_skip
+		je early_putwchar_skip
 
 		dec %bx
-		jmp early_putchar_skip
-
-	early_putchar_print:
+		jmp early_putwchar_skip
+
+	early_putwchar_print:
 
 		/* Print character */
@@ -493,9 +493,9 @@
 		inc %bx
 
-	early_putchar_skip:
+	early_putwchar_skip:
 
 	/* Sanity check for the cursor on the last line */
 	cmp $2000, %bx
-	jb early_putchar_no_scroll
+	jb early_putwchar_no_scroll
 
 		/* Scroll the screen (24 rows) */
@@ -513,5 +513,5 @@
 		movw $1920, %bx
 
-	early_putchar_no_scroll:
+	early_putwchar_no_scroll:
 
 	/* Write bits 8 - 15 of the cursor address */
@@ -540,3 +540,3 @@
 
 	ret
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/arm32/src/asm.S
===================================================================
--- kernel/arch/arm32/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/arm32/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -98,5 +98,5 @@
 	ldmia sp!, {r4, r5, pc}
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	mov pc, lr
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/ia32/src/asm.S
===================================================================
--- kernel/arch/ia32/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/ia32/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -451,5 +451,5 @@
  *
  */
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 
 #if ((defined(CONFIG_EGA)) && (!defined(CONFIG_FB)))
@@ -484,9 +484,9 @@
 	/* Sanity check for the cursor on screen */
 	cmp $2000, %ax
-	jb early_putchar_cursor_ok
+	jb early_putwchar_cursor_ok
 
 		movw $1998, %ax
 
-	early_putchar_cursor_ok:
+	early_putwchar_cursor_ok:
 
 	movw %ax, %bx
@@ -497,5 +497,5 @@
 
 	cmp $0x0a, %al
-	jne early_putchar_backspace
+	jne early_putwchar_backspace
 
 		/* Interpret newline */
@@ -511,20 +511,20 @@
 		subw %dx, %bx
 
-		jmp early_putchar_skip
-
-	early_putchar_backspace:
+		jmp early_putwchar_skip
+
+	early_putwchar_backspace:
 
 		cmp $0x08, %al
-		jne early_putchar_print
+		jne early_putwchar_print
 
 		/* Interpret backspace */
 
 		cmp $0x0000, %bx
-		je early_putchar_skip
+		je early_putwchar_skip
 
 		dec %bx
-		jmp early_putchar_skip
-
-	early_putchar_print:
+		jmp early_putwchar_skip
+
+	early_putwchar_print:
 
 		/* Print character */
@@ -534,9 +534,9 @@
 		inc %bx
 
-	early_putchar_skip:
+	early_putwchar_skip:
 
 	/* Sanity check for the cursor on the last line */
 	cmp $2000, %bx
-	jb early_putchar_no_scroll
+	jb early_putwchar_no_scroll
 
 		/* Scroll the screen (24 rows) */
@@ -554,5 +554,5 @@
 		movw $1920, %bx
 
-	early_putchar_no_scroll:
+	early_putwchar_no_scroll:
 
 	/* Write bits 8 - 15 of the cursor address */
@@ -583,4 +583,4 @@
 
 	ret
-FUNCTION_END(early_putchar)
-
+FUNCTION_END(early_putwchar)
+
Index: kernel/arch/ia64/src/asm.S
===================================================================
--- kernel/arch/ia64/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/ia64/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -191,5 +191,5 @@
 FUNCTION_END(switch_to_userspace)
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	br.ret.sptk.many b0
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/ia64/src/drivers/ski.c
===================================================================
--- kernel/arch/ia64/src/drivers/ski.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/ia64/src/drivers/ski.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -58,8 +58,8 @@
 };
 
-static void ski_putchar(outdev_t *, const wchar_t);
+static void ski_putwchar(outdev_t *, const wchar_t);
 
 static outdev_operations_t skidev_ops = {
-	.write = ski_putchar,
+	.write = ski_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -166,5 +166,5 @@
 }
 
-static void ski_do_putchar(const wchar_t ch)
+static void ski_do_putchar(char ch)
 {
 	asm volatile (
@@ -187,5 +187,5 @@
  *
  */
-static void ski_putchar(outdev_t *dev, const wchar_t ch)
+static void ski_putwchar(outdev_t *dev, wchar_t ch)
 {
 	// TODO FIXME:
@@ -198,6 +198,7 @@
 
 			ski_do_putchar(ch);
-		} else
-			ski_do_putchar(U_SPECIAL);
+		} else {
+			ski_do_putchar('?');
+		}
 	}
 }
Index: kernel/arch/mips32/src/asm.S
===================================================================
--- kernel/arch/mips32/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/mips32/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -296,6 +296,6 @@
 FUNCTION_END(fpu_context_restore)
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	j $ra
 	nop
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/mips32/src/mach/malta/malta.c
===================================================================
--- kernel/arch/mips32/src/mach/malta/malta.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/mips32/src/mach/malta/malta.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -81,5 +81,5 @@
     (yamon_print_count_ptr_t) YAMON_SUBR_PRINT_COUNT;
 
-static void yamon_putchar(outdev_t *dev, const wchar_t wch)
+static void yamon_putwchar(outdev_t *dev, const wchar_t wch)
 {
 
@@ -91,5 +91,5 @@
 static outdev_t yamon_outdev;
 static outdev_operations_t yamon_outdev_ops = {
-	.write = yamon_putchar,
+	.write = yamon_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/arch/ppc32/src/asm.S
===================================================================
--- kernel/arch/ppc32/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/ppc32/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -265,5 +265,5 @@
 	blr
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	blr
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/riscv64/include/arch/drivers/ucb.h
===================================================================
--- kernel/arch/riscv64/include/arch/drivers/ucb.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/riscv64/include/arch/drivers/ucb.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -42,5 +42,5 @@
 extern void htif_init(volatile uint64_t *, volatile uint64_t *);
 extern outdev_t *htifout_init(void);
-extern void htif_putchar(outdev_t *, const wchar_t);
+extern void htif_putwchar(outdev_t *, const wchar_t);
 
 #endif
Index: kernel/arch/riscv64/src/asm.S
===================================================================
--- kernel/arch/riscv64/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/riscv64/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -35,7 +35,7 @@
 FUNCTION_END(asm_delay_loop)
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	ret
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
 
 FUNCTION_BEGIN(cpu_halt)
Index: kernel/arch/riscv64/src/drivers/ucb.c
===================================================================
--- kernel/arch/riscv64/src/drivers/ucb.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/riscv64/src/drivers/ucb.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -42,5 +42,5 @@
 
 static outdev_operations_t htifdev_ops = {
-	.write = htif_putchar,
+	.write = htif_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -85,5 +85,5 @@
 }
 
-void htif_putchar(outdev_t *dev, const wchar_t ch)
+void htif_putwchar(outdev_t *dev, const wchar_t ch)
 {
 	if (ascii_check(ch))
Index: kernel/arch/sparc64/src/asm.S
===================================================================
--- kernel/arch/sparc64/src/asm.S	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/sparc64/src/asm.S	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -189,6 +189,6 @@
 	mov %g0, %o0  /* return 0 on failure */
 
-FUNCTION_BEGIN(early_putchar)
+FUNCTION_BEGIN(early_putwchar)
 	retl
 	nop
-FUNCTION_END(early_putchar)
+FUNCTION_END(early_putwchar)
Index: kernel/arch/sparc64/src/drivers/niagara.c
===================================================================
--- kernel/arch/sparc64/src/drivers/niagara.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/arch/sparc64/src/drivers/niagara.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -58,9 +58,9 @@
 static niagara_instance_t *instance = NULL;
 
-static void niagara_putchar(outdev_t *, const wchar_t);
+static void niagara_putwchar(outdev_t *, const wchar_t);
 
 /** Character device operations */
 static outdev_operations_t niagara_ops = {
-	.write = niagara_putchar,
+	.write = niagara_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -96,5 +96,5 @@
 
 /** Write a single character to the standard output. */
-static inline void do_putchar(const char c)
+static inline void do_putchar(char c)
 {
 	/* Repeat until the buffer is non-full */
@@ -104,10 +104,14 @@
 
 /** Write a single character to the standard output. */
-static void niagara_putchar(outdev_t *dev, const wchar_t ch)
+static void niagara_putwchar(outdev_t *dev, wchar_t ch)
 {
 	if ((!outbuf_parea.mapped) || (console_override)) {
-		do_putchar(ch);
-		if (ch == '\n')
-			do_putchar('\r');
+		if (ascii_check(ch)) {
+			do_putchar(ch);
+			if (ch == '\n')
+				do_putchar('\r');
+		} else {
+			do_putchar('?');
+		}
 	}
 }
Index: kernel/genarch/src/drivers/dsrln/dsrlnout.c
===================================================================
--- kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -49,5 +49,5 @@
 } dsrlnout_instance_t;
 
-static void dsrlnout_putchar(outdev_t *dev, const wchar_t ch)
+static void dsrlnout_putwchar(outdev_t *dev, const wchar_t ch)
 {
 	dsrlnout_instance_t *instance = (dsrlnout_instance_t *) dev->data;
@@ -62,5 +62,5 @@
 
 static outdev_operations_t dsrlndev_ops = {
-	.write = dsrlnout_putchar,
+	.write = dsrlnout_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/ega/ega.c
===================================================================
--- kernel/genarch/src/drivers/ega/ega.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/ega/ega.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -72,9 +72,9 @@
 } ega_instance_t;
 
-static void ega_putchar(outdev_t *, wchar_t);
+static void ega_putwchar(outdev_t *, wchar_t);
 static void ega_redraw(outdev_t *);
 
 static outdev_operations_t egadev_ops = {
-	.write = ega_putchar,
+	.write = ega_putwchar,
 	.redraw = ega_redraw,
 	.scroll_up = NULL,
@@ -516,5 +516,5 @@
 }
 
-static void ega_display_char(ega_instance_t *instance, wchar_t ch)
+static void ega_display_wchar(ega_instance_t *instance, wchar_t ch)
 {
 	uint16_t index = ega_oem_glyph(ch);
@@ -539,5 +539,5 @@
 }
 
-static void ega_putchar(outdev_t *dev, wchar_t ch)
+static void ega_putwchar(outdev_t *dev, wchar_t ch)
 {
 	ega_instance_t *instance = (ega_instance_t *) dev->data;
@@ -559,5 +559,5 @@
 		break;
 	default:
-		ega_display_char(instance, ch);
+		ega_display_wchar(instance, ch);
 		instance->cursor++;
 		break;
Index: kernel/genarch/src/drivers/ns16550/ns16550.c
===================================================================
--- kernel/genarch/src/drivers/ns16550/ns16550.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/ns16550/ns16550.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -92,5 +92,5 @@
 }
 
-static void ns16550_putchar(outdev_t *dev, wchar_t ch)
+static void ns16550_putwchar(outdev_t *dev, wchar_t ch)
 {
 	ns16550_instance_t *instance = (ns16550_instance_t *) dev->data;
@@ -105,5 +105,5 @@
 
 static outdev_operations_t ns16550_ops = {
-	.write = ns16550_putchar,
+	.write = ns16550_putwchar,
 	.redraw = NULL
 };
Index: kernel/genarch/src/drivers/omap/uart.c
===================================================================
--- kernel/genarch/src/drivers/omap/uart.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/omap/uart.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -49,5 +49,5 @@
 }
 
-static void omap_uart_putchar(outdev_t *dev, wchar_t ch)
+static void omap_uart_putwchar(outdev_t *dev, wchar_t ch)
 {
 	omap_uart_t *uart = dev->data;
@@ -62,5 +62,5 @@
 
 static outdev_operations_t omap_uart_ops = {
-	.write = omap_uart_putchar,
+	.write = omap_uart_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/pl011/pl011.c
===================================================================
--- kernel/genarch/src/drivers/pl011/pl011.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/pl011/pl011.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -56,5 +56,5 @@
 }
 
-static void pl011_uart_putchar(outdev_t *dev, wchar_t ch)
+static void pl011_uart_putwchar(outdev_t *dev, wchar_t ch)
 {
 	pl011_uart_t *uart = dev->data;
@@ -70,5 +70,5 @@
 
 static outdev_operations_t pl011_uart_ops = {
-	.write = pl011_uart_putchar,
+	.write = pl011_uart_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/s3c24xx/uart.c
===================================================================
--- kernel/genarch/src/drivers/s3c24xx/uart.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/drivers/s3c24xx/uart.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -61,5 +61,5 @@
 }
 
-static void s3c24xx_uart_putchar(outdev_t *dev, wchar_t ch)
+static void s3c24xx_uart_putwchar(outdev_t *dev, wchar_t ch)
 {
 	s3c24xx_uart_t *uart =
@@ -94,5 +94,5 @@
 
 static outdev_operations_t s3c24xx_uart_ops = {
-	.write = s3c24xx_uart_putchar,
+	.write = s3c24xx_uart_putwchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/genarch/src/fb/fb.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -122,5 +122,5 @@
 } fb_instance_t;
 
-static void fb_putchar(outdev_t *, wchar_t);
+static void fb_putwchar(outdev_t *, wchar_t);
 static void fb_redraw(outdev_t *);
 static void fb_scroll_up(outdev_t *);
@@ -128,5 +128,5 @@
 
 static outdev_operations_t fbdev_ops = {
-	.write = fb_putchar,
+	.write = fb_putwchar,
 	.redraw = fb_redraw,
 	.scroll_up = fb_scroll_up,
@@ -410,5 +410,5 @@
  *
  */
-static void fb_putchar(outdev_t *dev, wchar_t ch)
+static void fb_putwchar(outdev_t *dev, wchar_t ch)
 {
 	fb_instance_t *instance = (fb_instance_t *) dev->data;
Index: kernel/generic/include/console/console.h
===================================================================
--- kernel/generic/include/console/console.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/generic/include/console/console.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -57,5 +57,5 @@
 extern outdev_t *stdout;
 
-extern void early_putchar(wchar_t);
+extern void early_putwchar(wchar_t);
 
 extern indev_t *stdin_wire(void);
Index: kernel/generic/include/putchar.h
===================================================================
--- kernel/generic/include/putchar.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/generic/include/putchar.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -36,5 +36,7 @@
 #define KERN_PUTCHAR_H_
 
-extern void putchar(const wchar_t ch);
+#include <stddef.h>
+
+extern void putwchar(wchar_t);
 
 #endif
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/generic/src/console/console.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -262,7 +262,7 @@
 			if (count > 0) {
 				/* Space, backspace, space */
-				putchar('\b');
-				putchar(' ');
-				putchar('\b');
+				putwchar('\b');
+				putwchar(' ');
+				putwchar('\b');
 
 				count--;
@@ -273,5 +273,5 @@
 
 		if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) {
-			putchar(ch);
+			putwchar(ch);
 			count++;
 			buf[offset] = 0;
@@ -286,5 +286,5 @@
 {
 	wchar_t ch = indev_pop_character(indev);
-	putchar(ch);
+	putwchar(ch);
 	return ch;
 }
@@ -356,5 +356,5 @@
 }
 
-void putchar(const wchar_t ch)
+void putwchar(const wchar_t ch)
 {
 	bool ordy = ((stdout) && (stdout->op->write));
@@ -373,10 +373,10 @@
 		 * for possible future output.
 		 *
-		 * The early_putchar() function is used to output
+		 * The early_putwchar() function is used to output
 		 * the character for low-level debugging purposes.
 		 * Note that the early_putc() function might be
 		 * a no-op on certain hardware configurations.
 		 */
-		early_putchar(ch);
+		early_putwchar(ch);
 	}
 
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/generic/src/console/kconsole.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -160,5 +160,5 @@
 	size_t i;
 	for (i = 0; i < count; i++)
-		putchar(ch);
+		putwchar(ch);
 }
 
@@ -339,5 +339,5 @@
 		if (ch == '\n') {
 			/* Enter */
-			putchar(ch);
+			putwchar(ch);
 			break;
 		}
@@ -350,5 +350,5 @@
 			if (wstr_remove(current, position - 1)) {
 				position--;
-				putchar('\b');
+				putwchar('\b');
 				printf("%ls ", current + position);
 				print_cc('\b', wstr_length(current) - position + 1);
@@ -363,5 +363,5 @@
 			for (; (current[position] != 0) && (!isspace(current[position]));
 			    position++)
-				putchar(current[position]);
+				putwchar(current[position]);
 
 
@@ -459,5 +459,5 @@
 			/* Left */
 			if (position > 0) {
-				putchar('\b');
+				putwchar('\b');
 				position--;
 			}
@@ -468,5 +468,5 @@
 			/* Right */
 			if (position < wstr_length(current)) {
-				putchar(current[position]);
+				putwchar(current[position]);
 				position++;
 			}
Index: kernel/generic/src/printf/vprintf.c
===================================================================
--- kernel/generic/src/printf/vprintf.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ kernel/generic/src/printf/vprintf.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -47,5 +47,5 @@
 
 	while (offset < size) {
-		putchar(str_decode(str, &offset, size));
+		putwchar(str_decode(str, &offset, size));
 		chars++;
 	}
@@ -60,5 +60,5 @@
 
 	while (offset < size) {
-		putchar(str[chars]);
+		putwchar(str[chars]);
 		chars++;
 		offset += sizeof(wchar_t);
@@ -75,9 +75,9 @@
 
 	while ((uc = str_decode(str, &offset, STR_NO_LIMIT)) != 0) {
-		putchar(uc);
+		putwchar(uc);
 		chars++;
 	}
 
-	putchar('\n');
+	putwchar('\n');
 	return chars;
 }
Index: uspace/app/bdsh/cmds/modules/cat/cat.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cat/cat.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/app/bdsh/cmds/modules/cat/cat.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -160,5 +160,5 @@
 		printf("%6u  ", lineno);
 	}
-	putchar(c);
+	putwchar(c);
 	last_char_was_newline = c == '\n';
 	if (paging_enabled) {
Index: uspace/app/bdsh/cmds/modules/printf/printf.c
===================================================================
--- uspace/app/bdsh/cmds/modules/printf/printf.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/app/bdsh/cmds/modules/printf/printf.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -172,9 +172,9 @@
 				break;
 			}
-			putchar(ch);
+			putwchar(ch);
 			break;
 
 		emit:
-			putchar(ch);
+			putwchar(ch);
 			esc_flag = false;
 		}
Index: uspace/app/edit/edit.c
===================================================================
--- uspace/app/edit/edit.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/app/edit/edit.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -671,5 +671,5 @@
 				default:
 					if (kev->c >= 32 && nc < max_len) {
-						putchar(kev->c);
+						putwchar(kev->c);
 						console_flush(con);
 						buffer[nc++] = kev->c;
Index: uspace/app/kio/kio.c
===================================================================
--- uspace/app/kio/kio.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/app/kio/kio.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -122,9 +122,9 @@
 
 		for (size_t i = 0; i < item->length; i++)
-			putchar(item->data[i]);
+			putwchar(item->data[i]);
 
 		if (log != NULL) {
 			for (size_t i = 0; i < item->length; i++)
-				fputc(item->data[i], log);
+				fputwc(item->data[i], log);
 
 			fflush(log);
Index: uspace/dist/src/c/demos/edit/edit.c
===================================================================
--- uspace/dist/src/c/demos/edit/edit.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/dist/src/c/demos/edit/edit.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -671,5 +671,5 @@
 				default:
 					if (kev->c >= 32 && nc < max_len) {
-						putchar(kev->c);
+						putwchar(kev->c);
 						console_flush(con);
 						buffer[nc++] = kev->c;
Index: uspace/lib/c/generic/io/chargrid.c
===================================================================
--- uspace/lib/c/generic/io/chargrid.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/generic/io/chargrid.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -140,5 +140,5 @@
  *
  */
-sysarg_t chargrid_putchar(chargrid_t *scrbuf, wchar_t ch, bool update)
+sysarg_t chargrid_putwchar(chargrid_t *scrbuf, wchar_t ch, bool update)
 {
 	assert(scrbuf->col < scrbuf->cols);
@@ -199,5 +199,5 @@
 
 	for (sysarg_t i = 0; i < spaces; i++)
-		flush += chargrid_putchar(scrbuf, ' ', true) - 1;
+		flush += chargrid_putwchar(scrbuf, ' ', true) - 1;
 
 	return flush;
@@ -228,10 +228,10 @@
 		scrbuf->row--;
 
-		chargrid_putchar(scrbuf, ' ', false);
+		chargrid_putwchar(scrbuf, ' ', false);
 		return 2;
 	}
 
 	scrbuf->col--;
-	chargrid_putchar(scrbuf, ' ', false);
+	chargrid_putwchar(scrbuf, ' ', false);
 	return 1;
 }
Index: uspace/lib/c/generic/io/io.c
===================================================================
--- uspace/lib/c/generic/io/io.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/generic/io/io.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -46,4 +46,5 @@
 #include <ipc/loc.h>
 #include <adt/list.h>
+#include <wchar.h>
 #include "../private/io.h"
 #include "../private/stdio.h"
@@ -702,22 +703,40 @@
 }
 
-int fputc(wchar_t c, FILE *stream)
+wint_t fputwc(wchar_t wc, FILE *stream)
 {
 	char buf[STR_BOUNDS(1)];
 	size_t sz = 0;
 
-	if (chr_encode(c, buf, &sz, STR_BOUNDS(1)) == EOK) {
-		size_t wr = fwrite(buf, 1, sz, stream);
-
-		if (wr < sz)
-			return EOF;
-
-		return (int) c;
-	}
-
-	return EOF;
-}
-
-int putchar(wchar_t c)
+	if (chr_encode(wc, buf, &sz, STR_BOUNDS(1)) != EOK) {
+		errno = EILSEQ;
+		return WEOF;
+	}
+
+	size_t wr = fwrite(buf, 1, sz, stream);
+	if (wr < sz)
+		return WEOF;
+
+	return wc;
+}
+
+wint_t putwchar(wchar_t wc)
+{
+	return fputwc(wc, stdout);
+}
+
+int fputc(int c, FILE *stream)
+{
+	unsigned char b;
+	size_t wr;
+
+	b = (unsigned char) c;
+	wr = fwrite(&b, sizeof(b), 1, stream);
+	if (wr < 1)
+		return EOF;
+
+	return b;
+}
+
+int putchar(int c)
 {
 	return fputc(c, stdout);
Index: uspace/lib/c/generic/io/vprintf.c
===================================================================
--- uspace/lib/c/generic/io/vprintf.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/generic/io/vprintf.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -54,5 +54,5 @@
 
 	while (offset < size) {
-		if (fputc(str[chars], (FILE *) stream) <= 0)
+		if (fputwc(str[chars], (FILE *) stream) <= 0)
 			break;
 
Index: uspace/lib/c/include/io/chargrid.h
===================================================================
--- uspace/lib/c/include/io/chargrid.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/include/io/chargrid.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -79,5 +79,5 @@
 extern sysarg_t chargrid_get_top_row(chargrid_t *);
 
-extern sysarg_t chargrid_putchar(chargrid_t *, wchar_t, bool);
+extern sysarg_t chargrid_putwchar(chargrid_t *, wchar_t, bool);
 extern sysarg_t chargrid_newline(chargrid_t *);
 extern sysarg_t chargrid_tabstop(chargrid_t *, sysarg_t);
Index: uspace/lib/c/include/stdio.h
===================================================================
--- uspace/lib/c/include/stdio.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/include/stdio.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -40,4 +40,5 @@
 #include <_bits/size_t.h>
 #include <_bits/wchar_t.h>
+#include <_bits/wint_t.h>
 
 #define EOF  (-1)
@@ -73,13 +74,14 @@
 
 /* Character and string output functions */
-extern int fputc(wchar_t, FILE *);
+extern int fputc(int, FILE *);
 extern int fputs(const char *, FILE *);
 
-// FIXME: putchar and fputc are byte-oriented.
-// They shouldn't accept wide characters.
-extern int putchar(wchar_t);
+extern int putchar(int);
 extern int puts(const char *);
 
 extern int ungetc(int, FILE *);
+
+extern wint_t fputwc(wchar_t, FILE *);
+extern wint_t putwchar(wchar_t);
 
 /* Formatted string output functions */
Index: uspace/lib/c/include/wchar.h
===================================================================
--- uspace/lib/c/include/wchar.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/c/include/wchar.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -44,4 +44,5 @@
 #include <_bits/wchar_t.h>
 #include <_bits/wint_t.h>
+#include <_bits/WEOF.h>
 
 #include <_bits/NULL.h>
Index: uspace/lib/clui/tinput.c
===================================================================
--- uspace/lib/clui/tinput.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/clui/tinput.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -145,5 +145,5 @@
 
 	for (p = 0; p < pad; p++)
-		putchar(' ');
+		putwchar(' ');
 
 	console_flush(ti->console);
@@ -182,5 +182,5 @@
 	tinput_console_set_lpos(ti, ti->text_coord + ti->nc);
 	console_flush(ti->console);
-	putchar('\n');
+	putwchar('\n');
 }
 
Index: uspace/lib/fmtutil/fmtutil.c
===================================================================
--- uspace/lib/fmtutil/fmtutil.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/fmtutil/fmtutil.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -95,14 +95,14 @@
 		for (i = 0; i < width; i++) {
 			if (i < len)
-				putchar(wstr[i]);
+				putwchar(wstr[i]);
 			else
-				putchar(' ');
+				putwchar(' ');
 		}
 	} else if (mode == ALIGN_RIGHT) {
 		for (i = 0; i < width; i++) {
 			if (i < width - len)
-				putchar(' ');
+				putwchar(' ');
 			else
-				putchar(wstr[i - (width - len)]);
+				putwchar(wstr[i - (width - len)]);
 		}
 	} else if (mode == ALIGN_CENTER) {
@@ -110,7 +110,7 @@
 		for (i = 0; i < width; i++) {
 			if ((i < padding) || ((i - padding) >= len))
-				putchar(' ');
+				putwchar(' ');
 			else
-				putchar(wstr[i - padding]);
+				putwchar(wstr[i - padding]);
 		}
 	} else if (mode == ALIGN_JUSTIFY) {
@@ -146,10 +146,10 @@
 				    (words - 1)));
 				for (j = 0; j < spaces; j++) {
-					putchar(' ');
+					putwchar(' ');
 				}
 				done_chars += spaces;
 			}
 			while (i < len && wstr[i] != ' ') {
-				putchar(wstr[i++]);
+				putwchar(wstr[i++]);
 				done_chars++;
 			}
@@ -158,5 +158,5 @@
 	skip_words:
 		while (done_chars < width) {
-			putchar(' ');
+			putwchar(' ');
 			done_chars++;
 		}
Index: uspace/lib/gui/terminal.c
===================================================================
--- uspace/lib/gui/terminal.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/gui/terminal.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -456,5 +456,5 @@
 		break;
 	default:
-		updated = chargrid_putchar(term->frontbuf, ch, true);
+		updated = chargrid_putwchar(term->frontbuf, ch, true);
 	}
 
Index: uspace/lib/posix/include/posix/stdio.h
===================================================================
--- uspace/lib/posix/include/posix/stdio.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/lib/posix/include/posix/stdio.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -75,8 +75,8 @@
 extern char *gets(char *, size_t);
 
-extern int fputc(wchar_t, FILE *);
+extern int fputc(int, FILE *);
 extern int fputs(const char *, FILE *);
 
-extern int putchar(wchar_t);
+extern int putchar(int);
 extern int puts(const char *);
 
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/console/console.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -311,5 +311,5 @@
 		break;
 	default:
-		updated = chargrid_putchar(cons->frontbuf, ch, true);
+		updated = chargrid_putwchar(cons->frontbuf, ch, true);
 	}
 
Index: uspace/srv/hid/output/ctl/serial.c
===================================================================
--- uspace/srv/hid/output/ctl/serial.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/output/ctl/serial.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -57,5 +57,5 @@
 	vt100_goto(state, col, row);
 	vt100_set_attr(state, field->attrs);
-	vt100_putchar(state, field->ch);
+	vt100_putwchar(state, field->ch);
 }
 
@@ -122,9 +122,9 @@
 };
 
-errno_t serial_init(vt100_putchar_t putchar_fn,
+errno_t serial_init(vt100_putwchar_t putwchar_fn,
     vt100_control_puts_t control_puts_fn, vt100_flush_t flush_fn)
 {
 	vt100_state_t *state =
-	    vt100_state_create(SERIAL_COLS, SERIAL_ROWS, putchar_fn,
+	    vt100_state_create(SERIAL_COLS, SERIAL_ROWS, putwchar_fn,
 	    control_puts_fn, flush_fn);
 	if (state == NULL)
Index: uspace/srv/hid/output/ctl/serial.h
===================================================================
--- uspace/srv/hid/output/ctl/serial.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/output/ctl/serial.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -36,5 +36,5 @@
 #include "../proto/vt100.h"
 
-extern errno_t serial_init(vt100_putchar_t, vt100_control_puts_t, vt100_flush_t);
+extern errno_t serial_init(vt100_putwchar_t, vt100_control_puts_t, vt100_flush_t);
 
 #endif
Index: uspace/srv/hid/output/port/chardev.c
===================================================================
--- uspace/srv/hid/output/port/chardev.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/output/port/chardev.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -77,5 +77,5 @@
 }
 
-static void chardev_putchar(wchar_t ch)
+static void chardev_putwchar(wchar_t ch)
 {
 	if (chardev_bused == chardev_buf_size)
@@ -92,5 +92,5 @@
 	p = str;
 	while (*p != '\0')
-		chardev_putchar(*p++);
+		chardev_putwchar(*p++);
 }
 
@@ -198,5 +198,5 @@
 	}
 
-	serial_init(chardev_putchar, chardev_control_puts, chardev_flush);
+	serial_init(chardev_putwchar, chardev_control_puts, chardev_flush);
 
 	discovery_finished = true;
Index: uspace/srv/hid/output/proto/vt100.c
===================================================================
--- uspace/srv/hid/output/proto/vt100.c	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/output/proto/vt100.c	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -139,5 +139,5 @@
 
 vt100_state_t *vt100_state_create(sysarg_t cols, sysarg_t rows,
-    vt100_putchar_t putchar_fn, vt100_control_puts_t control_puts_fn,
+    vt100_putwchar_t putwchar_fn, vt100_control_puts_t control_puts_fn,
     vt100_flush_t flush_fn)
 {
@@ -146,5 +146,5 @@
 		return NULL;
 
-	state->putchar = putchar_fn;
+	state->putwchar = putwchar_fn;
 	state->control_puts = control_puts_fn;
 	state->flush = flush_fn;
@@ -219,7 +219,7 @@
 }
 
-void vt100_putchar(vt100_state_t *state, wchar_t ch)
-{
-	state->putchar(ch == 0 ? ' ' : ch);
+void vt100_putwchar(vt100_state_t *state, wchar_t ch)
+{
+	state->putwchar(ch == 0 ? ' ' : ch);
 	state->cur_col++;
 
Index: uspace/srv/hid/output/proto/vt100.h
===================================================================
--- uspace/srv/hid/output/proto/vt100.h	(revision a57fa325b051d5e952ced94f3f203b231c8f259a)
+++ uspace/srv/hid/output/proto/vt100.h	(revision ed88c8e9e48e792fdd0df46568e33e36eb624db3)
@@ -35,5 +35,5 @@
 #include <io/charfield.h>
 
-typedef void (*vt100_putchar_t)(wchar_t ch);
+typedef void (*vt100_putwchar_t)(wchar_t ch);
 typedef void (*vt100_control_puts_t)(const char *str);
 typedef void (*vt100_flush_t)(void);
@@ -47,10 +47,10 @@
 	char_attrs_t cur_attrs;
 
-	vt100_putchar_t putchar;
+	vt100_putwchar_t putwchar;
 	vt100_control_puts_t control_puts;
 	vt100_flush_t flush;
 } vt100_state_t;
 
-extern vt100_state_t *vt100_state_create(sysarg_t, sysarg_t, vt100_putchar_t,
+extern vt100_state_t *vt100_state_create(sysarg_t, sysarg_t, vt100_putwchar_t,
     vt100_control_puts_t, vt100_flush_t);
 extern void vt100_state_destroy(vt100_state_t *);
@@ -63,5 +63,5 @@
 extern void vt100_set_attr(vt100_state_t *, char_attrs_t);
 extern void vt100_cursor_visibility(vt100_state_t *, bool);
-extern void vt100_putchar(vt100_state_t *, wchar_t);
+extern void vt100_putwchar(vt100_state_t *, wchar_t);
 extern void vt100_flush(vt100_state_t *);
 
