Index: kernel/arch/abs32le/src/abs32le.c
===================================================================
--- kernel/arch/abs32le/src/abs32le.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/abs32le/src/abs32le.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -136,5 +136,5 @@
 }
 
-void early_putwchar(wchar_t ch)
+void early_putuchar(char32_t ch)
 {
 }
Index: kernel/arch/amd64/src/asm.S
===================================================================
--- kernel/arch/amd64/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/amd64/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -409,5 +409,5 @@
  *
  */
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 
 #if (defined(CONFIG_L4RE_UVMM_EARLY_PRINT))
@@ -447,9 +447,9 @@
 	/* Sanity check for the cursor on screen */
 	cmp $2000, %ax
-	jb early_putwchar_cursor_ok
+	jb early_putuchar_cursor_ok
 
 		movw $1998, %ax
 
-	early_putwchar_cursor_ok:
+	early_putuchar_cursor_ok:
 
 	movw %ax, %bx
@@ -460,5 +460,5 @@
 
 	cmp $0x0a, %al
-	jne early_putwchar_backspace
+	jne early_putuchar_backspace
 
 		/* Interpret newline */
@@ -474,20 +474,20 @@
 		subw %dx, %bx
 
-		jmp early_putwchar_skip
-
-	early_putwchar_backspace:
+		jmp early_putuchar_skip
+
+	early_putuchar_backspace:
 
 		cmp $0x08, %al
-		jne early_putwchar_print
+		jne early_putuchar_print
 
 		/* Interpret backspace */
 
 		cmp $0x0000, %bx
-		je early_putwchar_skip
+		je early_putuchar_skip
 
 		dec %bx
-		jmp early_putwchar_skip
-
-	early_putwchar_print:
+		jmp early_putuchar_skip
+
+	early_putuchar_print:
 
 		/* Print character */
@@ -497,9 +497,9 @@
 		inc %bx
 
-	early_putwchar_skip:
+	early_putuchar_skip:
 
 	/* Sanity check for the cursor on the last line */
 	cmp $2000, %bx
-	jb early_putwchar_no_scroll
+	jb early_putuchar_no_scroll
 
 		/* Scroll the screen (24 rows) */
@@ -517,5 +517,5 @@
 		movw $1920, %bx
 
-	early_putwchar_no_scroll:
+	early_putuchar_no_scroll:
 
 	/* Write bits 8 - 15 of the cursor address */
@@ -544,3 +544,3 @@
 
 	ret
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/arm32/src/asm.S
===================================================================
--- kernel/arch/arm32/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/arm32/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -98,5 +98,5 @@
 	ldmia sp!, {r4, r5, pc}
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	mov pc, lr
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/arm64/src/asm.S
===================================================================
--- kernel/arch/arm64/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/arm64/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -56,7 +56,7 @@
 FUNCTION_END(memcpy_to_uspace_failover_address)
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	ret
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
 
 /* Static checks for the istate_t save/load. */
Index: kernel/arch/ia32/src/asm.S
===================================================================
--- kernel/arch/ia32/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/ia32/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -451,5 +451,5 @@
  *
  */
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 
 #if ((defined(CONFIG_EGA)) && (!defined(CONFIG_FB)))
@@ -484,9 +484,9 @@
 	/* Sanity check for the cursor on screen */
 	cmp $2000, %ax
-	jb early_putwchar_cursor_ok
+	jb early_putuchar_cursor_ok
 
 		movw $1998, %ax
 
-	early_putwchar_cursor_ok:
+	early_putuchar_cursor_ok:
 
 	movw %ax, %bx
@@ -497,5 +497,5 @@
 
 	cmp $0x0a, %al
-	jne early_putwchar_backspace
+	jne early_putuchar_backspace
 
 		/* Interpret newline */
@@ -511,20 +511,20 @@
 		subw %dx, %bx
 
-		jmp early_putwchar_skip
-
-	early_putwchar_backspace:
+		jmp early_putuchar_skip
+
+	early_putuchar_backspace:
 
 		cmp $0x08, %al
-		jne early_putwchar_print
+		jne early_putuchar_print
 
 		/* Interpret backspace */
 
 		cmp $0x0000, %bx
-		je early_putwchar_skip
+		je early_putuchar_skip
 
 		dec %bx
-		jmp early_putwchar_skip
-
-	early_putwchar_print:
+		jmp early_putuchar_skip
+
+	early_putuchar_print:
 
 		/* Print character */
@@ -534,9 +534,9 @@
 		inc %bx
 
-	early_putwchar_skip:
+	early_putuchar_skip:
 
 	/* Sanity check for the cursor on the last line */
 	cmp $2000, %bx
-	jb early_putwchar_no_scroll
+	jb early_putuchar_no_scroll
 
 		/* Scroll the screen (24 rows) */
@@ -554,5 +554,5 @@
 		movw $1920, %bx
 
-	early_putwchar_no_scroll:
+	early_putuchar_no_scroll:
 
 	/* Write bits 8 - 15 of the cursor address */
@@ -583,4 +583,4 @@
 
 	ret
-FUNCTION_END(early_putwchar)
-
+FUNCTION_END(early_putuchar)
+
Index: kernel/arch/ia64/src/asm.S
===================================================================
--- kernel/arch/ia64/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/ia64/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -191,5 +191,5 @@
 FUNCTION_END(switch_to_userspace)
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	br.ret.sptk.many b0
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/ia64/src/drivers/ski.c
===================================================================
--- kernel/arch/ia64/src/drivers/ski.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/ia64/src/drivers/ski.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -60,8 +60,8 @@
 };
 
-static void ski_putwchar(outdev_t *, const wchar_t);
+static void ski_putuchar(outdev_t *, const char32_t);
 
 static outdev_operations_t skidev_ops = {
-	.write = ski_putwchar,
+	.write = ski_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -82,5 +82,5 @@
  *
  */
-static wchar_t ski_getchar(void)
+static char32_t ski_getchar(void)
 {
 	uint64_t ch;
@@ -96,5 +96,5 @@
 	);
 
-	return (wchar_t) ch;
+	return (char32_t) ch;
 }
 
@@ -111,5 +111,5 @@
 
 	while (count > 0) {
-		wchar_t ch = ski_getchar();
+		char32_t ch = ski_getchar();
 
 		if (ch == '\0')
@@ -203,5 +203,5 @@
  *
  */
-static void ski_putwchar(outdev_t *dev, wchar_t ch)
+static void ski_putuchar(outdev_t *dev, char32_t ch)
 {
 	if (ski_parea.mapped && !console_override)
Index: kernel/arch/mips32/src/asm.S
===================================================================
--- kernel/arch/mips32/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/mips32/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -296,6 +296,6 @@
 FUNCTION_END(fpu_context_restore)
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	j $ra
 	nop
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/ppc32/src/asm.S
===================================================================
--- kernel/arch/ppc32/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/ppc32/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -265,5 +265,5 @@
 	blr
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	blr
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/riscv64/include/arch/drivers/ucb.h
===================================================================
--- kernel/arch/riscv64/include/arch/drivers/ucb.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/riscv64/include/arch/drivers/ucb.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -42,5 +42,5 @@
 extern void htif_init(volatile uint64_t *, volatile uint64_t *);
 extern outdev_t *htifout_init(void);
-extern void htif_putwchar(outdev_t *, const wchar_t);
+extern void htif_putuchar(outdev_t *, const char32_t);
 
 #endif
Index: kernel/arch/riscv64/src/asm.S
===================================================================
--- kernel/arch/riscv64/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/riscv64/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -35,7 +35,7 @@
 FUNCTION_END(asm_delay_loop)
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	ret
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
 
 FUNCTION_BEGIN(cpu_halt)
Index: kernel/arch/riscv64/src/drivers/ucb.c
===================================================================
--- kernel/arch/riscv64/src/drivers/ucb.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/riscv64/src/drivers/ucb.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -42,5 +42,5 @@
 
 static outdev_operations_t htifdev_ops = {
-	.write = htif_putwchar,
+	.write = htif_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -85,5 +85,5 @@
 }
 
-void htif_putwchar(outdev_t *dev, const wchar_t ch)
+void htif_putuchar(outdev_t *dev, const char32_t ch)
 {
 	if (ascii_check(ch))
Index: kernel/arch/sparc64/src/asm.S
===================================================================
--- kernel/arch/sparc64/src/asm.S	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/sparc64/src/asm.S	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -189,6 +189,6 @@
 	mov %g0, %o0  /* return 0 on failure */
 
-FUNCTION_BEGIN(early_putwchar)
+FUNCTION_BEGIN(early_putuchar)
 	retl
 	nop
-FUNCTION_END(early_putwchar)
+FUNCTION_END(early_putuchar)
Index: kernel/arch/sparc64/src/drivers/niagara.c
===================================================================
--- kernel/arch/sparc64/src/drivers/niagara.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/arch/sparc64/src/drivers/niagara.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -57,9 +57,9 @@
 static niagara_instance_t *instance = NULL;
 
-static void niagara_putwchar(outdev_t *, const wchar_t);
+static void niagara_putuchar(outdev_t *, const char32_t);
 
 /** Character device operations */
 static outdev_operations_t niagara_ops = {
-	.write = niagara_putwchar,
+	.write = niagara_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
@@ -103,5 +103,5 @@
 
 /** Write a single character to the standard output. */
-static void niagara_putwchar(outdev_t *dev, wchar_t ch)
+static void niagara_putuchar(outdev_t *dev, char32_t ch)
 {
 	if ((!outbuf_parea.mapped) || (console_override)) {
Index: kernel/genarch/include/genarch/fb/font-8x16.h
===================================================================
--- kernel/genarch/include/genarch/fb/font-8x16.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/include/genarch/fb/font-8x16.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -42,5 +42,5 @@
 #include <typedefs.h>
 
-extern uint16_t fb_font_glyph(const wchar_t ch);
+extern uint16_t fb_font_glyph(const char32_t ch);
 extern uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES];
 
Index: kernel/genarch/include/genarch/kbrd/scanc.h
===================================================================
--- kernel/genarch/include/genarch/kbrd/scanc.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/include/genarch/kbrd/scanc.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -41,6 +41,6 @@
 #define SCANCODES  128
 
-extern wchar_t sc_primary_map[SCANCODES];
-extern wchar_t sc_secondary_map[SCANCODES];
+extern char32_t sc_primary_map[SCANCODES];
+extern char32_t sc_secondary_map[SCANCODES];
 
 #endif
Index: kernel/genarch/src/drivers/dsrln/dsrlnout.c
===================================================================
--- kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -49,5 +49,5 @@
 } dsrlnout_instance_t;
 
-static void dsrlnout_putwchar(outdev_t *dev, const wchar_t ch)
+static void dsrlnout_putuchar(outdev_t *dev, const char32_t ch)
 {
 	dsrlnout_instance_t *instance = (dsrlnout_instance_t *) dev->data;
@@ -62,5 +62,5 @@
 
 static outdev_operations_t dsrlndev_ops = {
-	.write = dsrlnout_putwchar,
+	.write = dsrlnout_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/ega/ega.c
===================================================================
--- kernel/genarch/src/drivers/ega/ega.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/ega/ega.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -71,9 +71,9 @@
 } ega_instance_t;
 
-static void ega_putwchar(outdev_t *, wchar_t);
+static void ega_putuchar(outdev_t *, char32_t);
 static void ega_redraw(outdev_t *);
 
 static outdev_operations_t egadev_ops = {
-	.write = ega_putwchar,
+	.write = ega_putuchar,
 	.redraw = ega_redraw,
 	.scroll_up = NULL,
@@ -81,7 +81,7 @@
 };
 
-static uint16_t ega_oem_glyph(const wchar_t ch)
-{
-	if ((ch >= 0x0000) && (ch <= 0x007f))
+static uint16_t ega_oem_glyph(const char32_t ch)
+{
+	if (ch <= 0x007f)
 		return ch;
 
@@ -515,5 +515,5 @@
 }
 
-static void ega_display_wchar(ega_instance_t *instance, wchar_t ch)
+static void ega_display_wchar(ega_instance_t *instance, char32_t ch)
 {
 	uint16_t index = ega_oem_glyph(ch);
@@ -538,5 +538,5 @@
 }
 
-static void ega_putwchar(outdev_t *dev, wchar_t ch)
+static void ega_putuchar(outdev_t *dev, char32_t ch)
 {
 	ega_instance_t *instance = (ega_instance_t *) dev->data;
Index: kernel/genarch/src/drivers/ns16550/ns16550.c
===================================================================
--- kernel/genarch/src/drivers/ns16550/ns16550.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/ns16550/ns16550.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -112,5 +112,5 @@
 }
 
-static void ns16550_putwchar(outdev_t *dev, wchar_t ch)
+static void ns16550_putuchar(outdev_t *dev, char32_t ch)
 {
 	ns16550_instance_t *instance = (ns16550_instance_t *) dev->data;
@@ -128,5 +128,5 @@
 
 static outdev_operations_t ns16550_ops = {
-	.write = ns16550_putwchar,
+	.write = ns16550_putuchar,
 	.redraw = NULL
 };
Index: kernel/genarch/src/drivers/omap/uart.c
===================================================================
--- kernel/genarch/src/drivers/omap/uart.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/omap/uart.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -49,5 +49,5 @@
 }
 
-static void omap_uart_putwchar(outdev_t *dev, wchar_t ch)
+static void omap_uart_putuchar(outdev_t *dev, char32_t ch)
 {
 	omap_uart_t *uart = dev->data;
@@ -62,5 +62,5 @@
 
 static outdev_operations_t omap_uart_ops = {
-	.write = omap_uart_putwchar,
+	.write = omap_uart_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/pl011/pl011.c
===================================================================
--- kernel/genarch/src/drivers/pl011/pl011.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/pl011/pl011.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -56,5 +56,5 @@
 }
 
-static void pl011_uart_putwchar(outdev_t *dev, wchar_t ch)
+static void pl011_uart_putuchar(outdev_t *dev, char32_t ch)
 {
 	pl011_uart_t *uart = dev->data;
@@ -74,5 +74,5 @@
 
 static outdev_operations_t pl011_uart_ops = {
-	.write = pl011_uart_putwchar,
+	.write = pl011_uart_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/drivers/s3c24xx/uart.c
===================================================================
--- kernel/genarch/src/drivers/s3c24xx/uart.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/drivers/s3c24xx/uart.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -61,5 +61,5 @@
 }
 
-static void s3c24xx_uart_putwchar(outdev_t *dev, wchar_t ch)
+static void s3c24xx_uart_putuchar(outdev_t *dev, char32_t ch)
 {
 	s3c24xx_uart_t *uart =
@@ -94,5 +94,5 @@
 
 static outdev_operations_t s3c24xx_uart_ops = {
-	.write = s3c24xx_uart_putwchar,
+	.write = s3c24xx_uart_putuchar,
 	.redraw = NULL,
 	.scroll_up = NULL,
Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/fb/fb.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -123,5 +123,5 @@
 } fb_instance_t;
 
-static void fb_putwchar(outdev_t *, wchar_t);
+static void fb_putuchar(outdev_t *, char32_t);
 static void fb_redraw(outdev_t *);
 static void fb_scroll_up(outdev_t *);
@@ -129,5 +129,5 @@
 
 static outdev_operations_t fbdev_ops = {
-	.write = fb_putwchar,
+	.write = fb_putuchar,
 	.redraw = fb_redraw,
 	.scroll_up = fb_scroll_up,
@@ -418,5 +418,5 @@
  *
  */
-static void fb_putwchar(outdev_t *dev, wchar_t ch)
+static void fb_putuchar(outdev_t *dev, char32_t ch)
 {
 	fb_instance_t *instance = (fb_instance_t *) dev->data;
Index: kernel/genarch/src/fb/font-8x16.c
===================================================================
--- kernel/genarch/src/fb/font-8x16.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/fb/font-8x16.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -43,5 +43,5 @@
  * mark glyph if no specific glyph exists.
  */
-uint16_t fb_font_glyph(const wchar_t ch)
+uint16_t fb_font_glyph(const char32_t ch)
 {
 	if (ch == 0x0000)
Index: kernel/genarch/src/kbrd/kbrd.c
===================================================================
--- kernel/genarch/src/kbrd/kbrd.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/kbrd.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -76,5 +76,5 @@
  * @param sc Scancode of the key being released.
  */
-static void key_released(kbrd_instance_t *instance, wchar_t sc)
+static void key_released(kbrd_instance_t *instance, char32_t sc)
 {
 	spinlock_lock(&instance->keylock);
@@ -103,10 +103,10 @@
  * @param sc Scancode of the key being pressed.
  */
-static void key_pressed(kbrd_instance_t *instance, wchar_t sc)
+static void key_pressed(kbrd_instance_t *instance, char32_t sc)
 {
 	bool letter;
 	bool shift;
 	bool capslock;
-	wchar_t ch;
+	char32_t ch;
 
 	spinlock_lock(&instance->keylock);
@@ -158,5 +158,5 @@
 
 	while (true) {
-		wchar_t sc = indev_pop_character(&instance->raw);
+		char32_t sc = indev_pop_character(&instance->raw);
 
 		if (sc == IGNORE_CODE)
Index: kernel/genarch/src/kbrd/kbrd_at.c
===================================================================
--- kernel/genarch/src/kbrd/kbrd_at.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/kbrd_at.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -59,5 +59,5 @@
 #define AT_SCROLL_SCAN_CODE	0x7E
 
-static bool is_lock_key(wchar_t);
+static bool is_lock_key(char32_t);
 
 static indev_operations_t kbrd_raw_ops = {
@@ -69,5 +69,5 @@
  * @param sc Scancode of the key being released.
  */
-static void key_released(kbrd_instance_t *instance, wchar_t sc)
+static void key_released(kbrd_instance_t *instance, char32_t sc)
 {
 	spinlock_lock(&instance->keylock);
@@ -96,5 +96,5 @@
  * @param sc Scancode of the key being pressed.
  */
-static void key_pressed(kbrd_instance_t *instance, wchar_t sc)
+static void key_pressed(kbrd_instance_t *instance, char32_t sc)
 {
 	bool letter;
@@ -140,5 +140,5 @@
 
 	while (true) {
-		wchar_t sc = indev_pop_character(&instance->raw);
+		char32_t sc = indev_pop_character(&instance->raw);
 
 		if (sc == AT_KEY_RELEASE) {
@@ -203,5 +203,5 @@
 }
 
-static bool is_lock_key(wchar_t sc)
+static bool is_lock_key(char32_t sc)
 {
 	return ((sc == AT_CAPS_SCAN_CODE) || (sc == AT_NUM_SCAN_CODE) ||
Index: kernel/genarch/src/kbrd/scanc_at.c
===================================================================
--- kernel/genarch/src/kbrd/scanc_at.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/scanc_at.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -39,5 +39,5 @@
 
 /** Primary meaning of scancodes. */
-wchar_t sc_primary_map[] = {
+char32_t sc_primary_map[] = {
 	U_NULL, /* 0x00 */
 	U_SPECIAL, /* 0x01 - F9 */
@@ -135,5 +135,5 @@
 
 /** Secondary meaning of scancodes. */
-wchar_t sc_secondary_map[] = {
+char32_t sc_secondary_map[] = {
 	U_NULL, /* 0x00 */
 	U_SPECIAL, /* 0x01 - F9 */
Index: kernel/genarch/src/kbrd/scanc_mac.c
===================================================================
--- kernel/genarch/src/kbrd/scanc_mac.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/scanc_mac.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -40,5 +40,5 @@
 
 /** Primary meaning of scancodes. */
-wchar_t sc_primary_map[SCANCODES] = {
+char32_t sc_primary_map[SCANCODES] = {
 	[0x00] = 'a',
 	[0x01] = 's',
@@ -172,5 +172,5 @@
 
 /** Secondary meaning of scancodes. */
-wchar_t sc_secondary_map[SCANCODES] = {
+char32_t sc_secondary_map[SCANCODES] = {
 	[0x00] = 'A',
 	[0x01] = 'S',
Index: kernel/genarch/src/kbrd/scanc_pc.c
===================================================================
--- kernel/genarch/src/kbrd/scanc_pc.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/scanc_pc.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -40,5 +40,5 @@
 
 /** Primary meaning of scancodes. */
-wchar_t sc_primary_map[SCANCODES] = {
+char32_t sc_primary_map[SCANCODES] = {
 	U_NULL,         /* 0x00 - undefined */
 	U_ESCAPE,       /* 0x01 - Esc */
@@ -129,5 +129,5 @@
 
 /** Secondary meaning of scancodes. */
-wchar_t sc_secondary_map[SCANCODES] = {
+char32_t sc_secondary_map[SCANCODES] = {
 	U_NULL,         /* 0x00 - undefined */
 	U_ESCAPE,       /* 0x01 - Esc */
Index: kernel/genarch/src/kbrd/scanc_sun.c
===================================================================
--- kernel/genarch/src/kbrd/scanc_sun.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/kbrd/scanc_sun.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -40,5 +40,5 @@
 
 /** Primary meaning of scancodes. */
-wchar_t sc_primary_map[SCANCODES] = {
+char32_t sc_primary_map[SCANCODES] = {
 	[0x00] = U_SPECIAL,
 	[0x01] = U_SPECIAL,
@@ -172,5 +172,5 @@
 
 /** Secondary meaning of scancodes. */
-wchar_t sc_secondary_map[SCANCODES] = {
+char32_t sc_secondary_map[SCANCODES] = {
 	[0x00] = U_SPECIAL,
 	[0x01] = U_SPECIAL,
Index: kernel/genarch/src/srln/srln.c
===================================================================
--- kernel/genarch/src/srln/srln.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/genarch/src/srln/srln.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -56,5 +56,5 @@
 
 	while (true) {
-		wchar_t ch = indev_pop_character(&instance->raw);
+		char32_t ch = indev_pop_character(&instance->raw);
 
 		/* ANSI escape sequence processing */
Index: kernel/generic/include/console/chardev.h
===================================================================
--- kernel/generic/include/console/chardev.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/include/console/chardev.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -55,5 +55,5 @@
 typedef struct {
 	/** Read character directly from device, assume interrupts disabled. */
-	wchar_t (*poll)(struct indev *);
+	char32_t (*poll)(struct indev *);
 
 	/** Signal out-of-band condition. */
@@ -68,5 +68,5 @@
 	/** Protects everything below. */
 	IRQ_SPINLOCK_DECLARE(lock);
-	wchar_t buffer[INDEV_BUFLEN];
+	char32_t buffer[INDEV_BUFLEN];
 	size_t counter;
 
@@ -82,5 +82,5 @@
 typedef struct {
 	/** Write character to output. */
-	void (*write)(struct outdev *, wchar_t);
+	void (*write)(struct outdev *, char32_t);
 
 	/** Redraw any previously cached characters. */
@@ -112,6 +112,6 @@
 extern void indev_initialize(const char *, indev_t *,
     indev_operations_t *);
-extern void indev_push_character(indev_t *, wchar_t);
-extern wchar_t indev_pop_character(indev_t *);
+extern void indev_push_character(indev_t *, char32_t);
+extern char32_t indev_pop_character(indev_t *);
 extern void indev_signal(indev_t *, indev_signal_t);
 
Index: kernel/generic/include/console/console.h
===================================================================
--- kernel/generic/include/console/console.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/include/console/console.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -57,5 +57,5 @@
 extern outdev_t *stdout;
 
-extern void early_putwchar(wchar_t);
+extern void early_putuchar(char32_t);
 
 extern indev_t *stdin_wire(void);
@@ -66,8 +66,8 @@
 extern void kio_update(void *);
 extern void kio_flush(void);
-extern void kio_push_char(const wchar_t);
+extern void kio_push_char(const char32_t);
 SPINLOCK_EXTERN(kio_lock);
 
-extern wchar_t getc(indev_t *indev);
+extern char32_t getc(indev_t *indev);
 extern size_t gets(indev_t *indev, char *buf, size_t buflen);
 extern sys_errno_t sys_kio(int cmd, uspace_addr_t buf, size_t size);
Index: kernel/generic/include/printf/printf_core.h
===================================================================
--- kernel/generic/include/printf/printf_core.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/include/printf/printf_core.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -38,4 +38,5 @@
 #include <stdarg.h>
 #include <stddef.h>
+#include <uchar.h>
 
 /** Structure for specifying output methods for different printf clones. */
@@ -45,5 +46,5 @@
 
 	/* Wide string output function, returns number of printed characters or EOF */
-	int (*wstr_write)(const wchar_t *, size_t, void *);
+	int (*wstr_write)(const char32_t *, size_t, void *);
 
 	/* User data - output stream specification, state, locks, etc. */
Index: kernel/generic/include/putchar.h
===================================================================
--- kernel/generic/include/putchar.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/include/putchar.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -36,7 +36,7 @@
 #define KERN_PUTCHAR_H_
 
-#include <stddef.h>
+#include <uchar.h>
 
-extern void putwchar(wchar_t);
+extern void putuchar(char32_t);
 
 #endif
Index: kernel/generic/include/str.h
===================================================================
--- kernel/generic/include/str.h	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/include/str.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -44,5 +44,5 @@
 
 /* Common Unicode characters */
-#define U_SPECIAL      '?'
+#define U_SPECIAL  '?'
 
 #define U_LEFT_ARROW   0x2190
@@ -69,36 +69,36 @@
 #define STR_BOUNDS(length)  ((length) << 2)
 
-extern wchar_t str_decode(const char *str, size_t *offset, size_t sz);
-extern errno_t chr_encode(wchar_t ch, char *str, size_t *offset, size_t sz);
+extern char32_t str_decode(const char *, size_t *, size_t);
+extern errno_t chr_encode(char32_t, char *, size_t *, size_t);
 
-extern size_t str_size(const char *str);
-extern size_t wstr_size(const wchar_t *str);
+extern size_t str_size(const char *);
+extern size_t wstr_size(const char32_t *);
 
-extern size_t str_lsize(const char *str, size_t max_len);
-extern size_t wstr_lsize(const wchar_t *str, size_t max_len);
+extern size_t str_lsize(const char *, size_t);
+extern size_t wstr_lsize(const char32_t *, size_t);
 
-extern size_t str_length(const char *str);
-extern size_t wstr_length(const wchar_t *wstr);
+extern size_t str_length(const char *);
+extern size_t wstr_length(const char32_t *);
 
-extern size_t str_nlength(const char *str, size_t size);
-extern size_t wstr_nlength(const wchar_t *str, size_t size);
+extern size_t str_nlength(const char *, size_t);
+extern size_t wstr_nlength(const char32_t *, size_t);
 
-extern bool ascii_check(wchar_t ch);
-extern bool chr_check(wchar_t ch);
+extern bool ascii_check(char32_t);
+extern bool chr_check(char32_t);
 
-extern int str_cmp(const char *s1, const char *s2);
-extern int str_lcmp(const char *s1, const char *s2, size_t max_len);
+extern int str_cmp(const char *, const char *);
+extern int str_lcmp(const char *, const char *, size_t);
 
-extern void str_cpy(char *dest, size_t size, const char *src);
-extern void str_ncpy(char *dest, size_t size, const char *src, size_t n);
-extern void wstr_to_str(char *dest, size_t size, const wchar_t *src);
+extern void str_cpy(char *, size_t, const char *);
+extern void str_ncpy(char *, size_t, const char *, size_t);
+extern void wstr_to_str(char *, size_t, const char32_t *);
 
-extern char *str_chr(const char *str, wchar_t ch);
+extern char *str_chr(const char *, char32_t);
 
-extern bool wstr_linsert(wchar_t *str, wchar_t ch, size_t pos, size_t max_pos);
-extern bool wstr_remove(wchar_t *str, size_t pos);
+extern bool wstr_linsert(char32_t *, char32_t, size_t, size_t);
+extern bool wstr_remove(char32_t *, size_t);
 
-extern char *str_dup(const char *src);
-extern char *str_ndup(const char *src, size_t n);
+extern char *str_dup(const char *);
+extern char *str_ndup(const char *, size_t);
 
 extern errno_t str_uint64_t(const char *, char **, unsigned int, bool,
@@ -108,6 +108,6 @@
 extern void bin_order_suffix(const uint64_t, uint64_t *, const char **, bool);
 
-extern const char *str_error(errno_t err);
-extern const char *str_error_name(errno_t err);
+extern const char *str_error(errno_t);
+extern const char *str_error_name(errno_t);
 
 #endif
Index: kernel/generic/include/uchar.h
===================================================================
--- kernel/generic/include/uchar.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
+++ kernel/generic/include/uchar.h	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kernel_generic
+ * @{
+ */
+/** @file
+ */
+
+#ifndef _KERN_UCHAR_H_
+#define _KERN_UCHAR_H_
+
+#include <_bits/uchar.h>
+
+#endif
+
+/** @}
+ */
Index: kernel/generic/src/console/chardev.c
===================================================================
--- kernel/generic/src/console/chardev.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/console/chardev.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -65,5 +65,5 @@
  *
  */
-void indev_push_character(indev_t *indev, wchar_t ch)
+void indev_push_character(indev_t *indev, char32_t ch)
 {
 	assert(indev);
@@ -92,5 +92,5 @@
  *
  */
-wchar_t indev_pop_character(indev_t *indev)
+char32_t indev_pop_character(indev_t *indev)
 {
 	if (atomic_load(&haltstate)) {
@@ -117,5 +117,5 @@
 	waitq_sleep(&indev->wq);
 	irq_spinlock_lock(&indev->lock, true);
-	wchar_t ch = indev->buffer[(indev->index - indev->counter) %
+	char32_t ch = indev->buffer[(indev->index - indev->counter) %
 	    INDEV_BUFLEN];
 	indev->counter--;
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/console/console.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -59,8 +59,8 @@
 
 #define KIO_PAGES    8
-#define KIO_LENGTH   (KIO_PAGES * PAGE_SIZE / sizeof(wchar_t))
+#define KIO_LENGTH   (KIO_PAGES * PAGE_SIZE / sizeof(char32_t))
 
 /** Kernel log cyclic buffer */
-wchar_t kio[KIO_LENGTH] __attribute__((aligned(PAGE_SIZE)));
+char32_t kio[KIO_LENGTH] __attribute__((aligned(PAGE_SIZE)));
 
 /** Kernel log initialized */
@@ -95,5 +95,5 @@
 };
 
-static void stdout_write(outdev_t *, wchar_t);
+static void stdout_write(outdev_t *, char32_t);
 static void stdout_redraw(outdev_t *);
 static void stdout_scroll_up(outdev_t *);
@@ -148,5 +148,5 @@
 }
 
-static void stdout_write(outdev_t *dev, wchar_t ch)
+static void stdout_write(outdev_t *dev, char32_t ch)
 {
 	list_foreach(dev->list, link, outdev_t, sink) {
@@ -261,12 +261,12 @@
 	buf[offset] = 0;
 
-	wchar_t ch;
+	char32_t ch;
 	while ((ch = indev_pop_character(indev)) != '\n') {
 		if (ch == '\b') {
 			if (count > 0) {
 				/* Space, backspace, space */
-				putwchar('\b');
-				putwchar(' ');
-				putwchar('\b');
+				putuchar('\b');
+				putuchar(' ');
+				putuchar('\b');
 
 				count--;
@@ -277,5 +277,5 @@
 
 		if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) {
-			putwchar(ch);
+			putuchar(ch);
 			count++;
 			buf[offset] = 0;
@@ -287,8 +287,8 @@
 
 /** Get character from input device & echo it to screen */
-wchar_t getc(indev_t *indev)
-{
-	wchar_t ch = indev_pop_character(indev);
-	putwchar(ch);
+char32_t getc(indev_t *indev)
+{
+	char32_t ch = indev_pop_character(indev);
+	putuchar(ch);
 	return ch;
 }
@@ -324,5 +324,5 @@
 	/* Print characters that weren't printed earlier */
 	while (kio_stored > 0) {
-		wchar_t tmp = kio[(kio_start + kio_len - kio_stored) % KIO_LENGTH];
+		char32_t tmp = kio[(kio_start + kio_len - kio_stored) % KIO_LENGTH];
 		kio_stored--;
 
@@ -344,5 +344,5 @@
  * The caller is required to hold kio_lock
  */
-void kio_push_char(const wchar_t ch)
+void kio_push_char(const char32_t ch)
 {
 	kio[(kio_start + kio_len) % KIO_LENGTH] = ch;
@@ -360,5 +360,5 @@
 }
 
-void putwchar(const wchar_t ch)
+void putuchar(const char32_t ch)
 {
 	bool ordy = ((stdout) && (stdout->op->write));
@@ -377,10 +377,10 @@
 		 * for possible future output.
 		 *
-		 * The early_putwchar() function is used to output
+		 * The early_putuchar() 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_putwchar(ch);
+		early_putuchar(ch);
 	}
 
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/console/kconsole.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -86,5 +86,5 @@
 LIST_INITIALIZE(cmd_list);      /**< Command list. */
 
-static wchar_t history[KCONSOLE_HISTORY][MAX_CMDLINE] = { };
+static char32_t history[KCONSOLE_HISTORY][MAX_CMDLINE] = { };
 static size_t history_pos = 0;
 
@@ -156,9 +156,9 @@
 
 /** Print count times a character */
-_NO_TRACE static void print_cc(wchar_t ch, size_t count)
+_NO_TRACE static void print_cc(char32_t ch, size_t count)
 {
 	size_t i;
 	for (i = 0; i < count; i++)
-		putwchar(ch);
+		putuchar(ch);
 }
 
@@ -290,5 +290,5 @@
 }
 
-_NO_TRACE static cmd_info_t *parse_cmd(const wchar_t *cmdline)
+_NO_TRACE static cmd_info_t *parse_cmd(const char32_t *cmdline)
 {
 	size_t start = 0;
@@ -331,5 +331,5 @@
 }
 
-_NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev,
+_NO_TRACE static char32_t *clever_readline(const char *prompt, indev_t *indev,
     char *tmp)
 {
@@ -337,13 +337,13 @@
 
 	size_t position = 0;
-	wchar_t *current = history[history_pos];
+	char32_t *current = history[history_pos];
 	current[0] = 0;
 
 	while (true) {
-		wchar_t ch = indev_pop_character(indev);
+		char32_t ch = indev_pop_character(indev);
 
 		if (ch == '\n') {
 			/* Enter */
-			putwchar(ch);
+			putuchar(ch);
 			break;
 		}
@@ -356,5 +356,5 @@
 			if (wstr_remove(current, position - 1)) {
 				position--;
-				putwchar('\b');
+				putuchar('\b');
 				printf("%ls ", current + position);
 				print_cc('\b', wstr_length(current) - position + 1);
@@ -369,5 +369,5 @@
 			for (; (current[position] != 0) && (!isspace(current[position]));
 			    position++)
-				putwchar(current[position]);
+				putuchar(current[position]);
 
 			/*
@@ -464,5 +464,5 @@
 			/* Left */
 			if (position > 0) {
-				putwchar('\b');
+				putuchar('\b');
 				position--;
 			}
@@ -473,5 +473,5 @@
 			/* Right */
 			if (position < wstr_length(current)) {
-				putwchar(current[position]);
+				putuchar(current[position]);
 				position++;
 			}
@@ -646,5 +646,5 @@
 	size_t offset = *start;
 	size_t prev = *start;
-	wchar_t ch;
+	char32_t ch;
 
 	while ((ch = str_decode(cmdline, &offset, size)) != 0) {
@@ -825,5 +825,5 @@
 
 	while (true) {
-		wchar_t *tmp = clever_readline((char *) prompt, stdin, buffer);
+		char32_t *tmp = clever_readline((char *) prompt, stdin, buffer);
 		size_t len = wstr_length(tmp);
 		if (!len)
Index: kernel/generic/src/console/prompt.c
===================================================================
--- kernel/generic/src/console/prompt.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/console/prompt.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -56,5 +56,5 @@
 
 	while (true) {
-		wchar_t answer = indev_pop_character(indev);
+		char32_t answer = indev_pop_character(indev);
 
 		if ((answer == 'y') || (answer == 'Y')) {
@@ -87,5 +87,5 @@
 	printf("--More--");
 	while (true) {
-		wchar_t continue_showing_hints = indev_pop_character(indev);
+		char32_t continue_showing_hints = indev_pop_character(indev);
 		/* Display a full page again? */
 		if ((continue_showing_hints == 'y') ||
Index: kernel/generic/src/lib/str.c
===================================================================
--- kernel/generic/src/lib/str.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/lib/str.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -42,5 +42,5 @@
  * strings, called just strings are encoded in UTF-8. Wide strings (encoded
  * in UTF-32) are supported to a limited degree. A single character is
- * represented as wchar_t.@n
+ * represented as char32_t.@n
  *
  * Overview of the terminology:@n
@@ -50,6 +50,6 @@
  *  byte                  8 bits stored in uint8_t (unsigned 8 bit integer)
  *
- *  character             UTF-32 encoded Unicode character, stored in wchar_t
- *                        (signed 32 bit integer), code points 0 .. 1114111
+ *  character             UTF-32 encoded Unicode character, stored in char32_t
+ *                        (unsigned 32 bit integer), code points 0 .. 1114111
  *                        are valid
  *
@@ -61,5 +61,5 @@
  *
  *  wide string           UTF-32 encoded NULL-terminated Unicode string,
- *                        wchar_t *
+ *                        char32_t *
  *
  *  [wide] string size    number of BYTES in a [wide] string (excluding
@@ -100,5 +100,5 @@
  * A specific character inside a [wide] string can be referred to by:@n
  *
- *  pointer (char *, wchar_t *)
+ *  pointer (char *, char32_t *)
  *  byte offset (size_t)
  *  character index (size_t)
@@ -118,11 +118,4 @@
 #include <macros.h>
 
-/** Check the condition if wchar_t is signed */
-#ifdef __WCHAR_UNSIGNED__
-#define WCHAR_SIGNED_CHECK(cond)  (true)
-#else
-#define WCHAR_SIGNED_CHECK(cond)  (cond)
-#endif
-
 /** Byte mask consisting of lowest @n bits (out of 8) */
 #define LO_MASK_8(n)  ((uint8_t) ((1 << (n)) - 1))
@@ -152,5 +145,5 @@
  *
  */
-wchar_t str_decode(const char *str, size_t *offset, size_t size)
+char32_t str_decode(const char *str, size_t *offset, size_t size)
 {
 	if (*offset + 1 > size)
@@ -189,5 +182,5 @@
 		return U_SPECIAL;
 
-	wchar_t ch = b0 & LO_MASK_8(b0_bits);
+	char32_t ch = b0 & LO_MASK_8(b0_bits);
 
 	/* Decode continuation bytes */
@@ -200,5 +193,5 @@
 
 		/* Shift data bits to ch */
-		ch = (ch << CONT_BITS) | (wchar_t) (b & LO_MASK_8(CONT_BITS));
+		ch = (ch << CONT_BITS) | (char32_t) (b & LO_MASK_8(CONT_BITS));
 		cbytes--;
 	}
@@ -222,5 +215,5 @@
  *         code was invalid.
  */
-errno_t chr_encode(const wchar_t ch, char *str, size_t *offset, size_t size)
+errno_t chr_encode(const char32_t ch, char *str, size_t *offset, size_t size)
 {
 	if (*offset >= size)
@@ -308,7 +301,7 @@
  *
  */
-size_t wstr_size(const wchar_t *str)
-{
-	return (wstr_length(str) * sizeof(wchar_t));
+size_t wstr_size(const char32_t *str)
+{
+	return (wstr_length(str) * sizeof(char32_t));
 }
 
@@ -354,7 +347,7 @@
  *
  */
-size_t wstr_lsize(const wchar_t *str, size_t max_len)
-{
-	return (wstr_nlength(str, max_len * sizeof(wchar_t)) * sizeof(wchar_t));
+size_t wstr_lsize(const char32_t *str, size_t max_len)
+{
+	return (wstr_nlength(str, max_len * sizeof(char32_t)) * sizeof(char32_t));
 }
 
@@ -384,5 +377,5 @@
  *
  */
-size_t wstr_length(const wchar_t *wstr)
+size_t wstr_length(const char32_t *wstr)
 {
 	size_t len = 0;
@@ -421,13 +414,13 @@
  *
  */
-size_t wstr_nlength(const wchar_t *str, size_t size)
+size_t wstr_nlength(const char32_t *str, size_t size)
 {
 	size_t len = 0;
-	size_t limit = ALIGN_DOWN(size, sizeof(wchar_t));
+	size_t limit = ALIGN_DOWN(size, sizeof(char32_t));
 	size_t offset = 0;
 
 	while ((offset < limit) && (*str++ != 0)) {
 		len++;
-		offset += sizeof(wchar_t);
+		offset += sizeof(char32_t);
 	}
 
@@ -440,7 +433,7 @@
  *
  */
-bool ascii_check(wchar_t ch)
-{
-	if (WCHAR_SIGNED_CHECK(ch >= 0) && (ch <= 127))
+bool ascii_check(char32_t ch)
+{
+	if (ch <= 127)
 		return true;
 
@@ -453,7 +446,7 @@
  *
  */
-bool chr_check(wchar_t ch)
-{
-	if (WCHAR_SIGNED_CHECK(ch >= 0) && (ch <= 1114111))
+bool chr_check(char32_t ch)
+{
+	if (ch <= 1114111)
 		return true;
 
@@ -481,6 +474,6 @@
 int str_cmp(const char *s1, const char *s2)
 {
-	wchar_t c1 = 0;
-	wchar_t c2 = 0;
+	char32_t c1 = 0;
+	char32_t c2 = 0;
 
 	size_t off1 = 0;
@@ -528,6 +521,6 @@
 int str_lcmp(const char *s1, const char *s2, size_t max_len)
 {
-	wchar_t c1 = 0;
-	wchar_t c2 = 0;
+	char32_t c1 = 0;
+	char32_t c2 = 0;
 
 	size_t off1 = 0;
@@ -580,5 +573,5 @@
 	size_t dest_off = 0;
 
-	wchar_t ch;
+	char32_t ch;
 	while ((ch = str_decode(src, &src_off, STR_NO_LIMIT)) != 0) {
 		if (chr_encode(ch, dest, &dest_off, size - 1) != EOK)
@@ -613,5 +606,5 @@
 	size_t dest_off = 0;
 
-	wchar_t ch;
+	char32_t ch;
 	while ((ch = str_decode(src, &src_off, n)) != 0) {
 		if (chr_encode(ch, dest, &dest_off, size - 1) != EOK)
@@ -628,11 +621,11 @@
  * written will always be well-formed.
  *
- * @param dest	Destination buffer.
- * @param size	Size of the destination buffer.
- * @param src	Source wide string.
- */
-void wstr_to_str(char *dest, size_t size, const wchar_t *src)
-{
-	wchar_t ch;
+ * @param dest Destination buffer.
+ * @param size Size of the destination buffer.
+ * @param src  Source wide string.
+ */
+void wstr_to_str(char *dest, size_t size, const char32_t *src)
+{
+	char32_t ch;
 	size_t src_idx;
 	size_t dest_off;
@@ -659,7 +652,7 @@
  * @return Pointer to character in @a str or NULL if not found.
  */
-char *str_chr(const char *str, wchar_t ch)
-{
-	wchar_t acc;
+char *str_chr(const char *str, char32_t ch)
+{
+	char32_t acc;
 	size_t off = 0;
 	size_t last = 0;
@@ -688,5 +681,5 @@
  *
  */
-bool wstr_linsert(wchar_t *str, wchar_t ch, size_t pos, size_t max_pos)
+bool wstr_linsert(char32_t *str, char32_t ch, size_t pos, size_t max_pos)
 {
 	size_t len = wstr_length(str);
@@ -716,5 +709,5 @@
  *
  */
-bool wstr_remove(wchar_t *str, size_t pos)
+bool wstr_remove(char32_t *str, size_t pos)
 {
 	size_t len = wstr_length(str);
Index: kernel/generic/src/log/log.c
===================================================================
--- kernel/generic/src/log/log.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/log/log.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -214,5 +214,5 @@
 }
 
-static int log_printf_wstr_write(const wchar_t *wstr, size_t size, void *data)
+static int log_printf_wstr_write(const char32_t *wstr, size_t size, void *data)
 {
 	char buffer[16];
@@ -220,5 +220,5 @@
 	size_t chars = 0;
 
-	for (offset = 0; offset < size; offset += sizeof(wchar_t), chars++) {
+	for (offset = 0; offset < size; offset += sizeof(char32_t), chars++) {
 		kio_push_char(wstr[chars]);
 
Index: kernel/generic/src/printf/printf_core.c
===================================================================
--- kernel/generic/src/printf/printf_core.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/printf/printf_core.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -139,5 +139,5 @@
  *
  */
-static int printf_wputnchars(const wchar_t *buf, size_t size,
+static int printf_wputnchars(const char32_t *buf, size_t size,
     printf_spec_t *ps)
 {
@@ -185,10 +185,10 @@
  *
  */
-static int printf_putwchar(const wchar_t ch, printf_spec_t *ps)
+static int printf_putuchar(const char32_t ch, printf_spec_t *ps)
 {
 	if (!chr_check(ch))
 		return ps->str_write((void *) &invalch, 1, ps->data);
 
-	return ps->wstr_write(&ch, sizeof(wchar_t), ps->data);
+	return ps->wstr_write(&ch, sizeof(char32_t), ps->data);
 }
 
@@ -240,5 +240,5 @@
  *
  */
-static int print_wchar(const wchar_t ch, int width, uint32_t flags, printf_spec_t *ps)
+static int print_wchar(const char32_t ch, int width, uint32_t flags, printf_spec_t *ps)
 {
 	size_t counter = 0;
@@ -254,5 +254,5 @@
 	}
 
-	if (printf_putwchar(ch, ps) > 0)
+	if (printf_putuchar(ch, ps) > 0)
 		counter++;
 
@@ -326,5 +326,5 @@
  * @return Number of wide characters printed, negative value on failure.
  */
-static int print_wstr(wchar_t *str, int width, unsigned int precision,
+static int print_wstr(char32_t *str, int width, unsigned int precision,
     uint32_t flags, printf_spec_t *ps)
 {
@@ -576,5 +576,5 @@
  *  - "l"  Signed or unsigned long int.@n
  *         If conversion is "c", the character is wint_t (wide character).@n
- *         If conversion is "s", the string is wchar_t * (wide string).@n
+ *         If conversion is "s", the string is char32_t * (UTF-32 string).@n
  *  - "ll" Signed or unsigned long long int.@n
  *  - "z"  Signed or unsigned ssize_t or site_t.@n
@@ -630,5 +630,5 @@
 	while (true) {
 		i = nxt;
-		wchar_t uc = str_decode(fmt, &nxt, STR_NO_LIMIT);
+		char32_t uc = str_decode(fmt, &nxt, STR_NO_LIMIT);
 
 		if (uc == 0)
@@ -789,5 +789,5 @@
 			case 's':
 				if (qualifier == PrintfQualifierLong)
-					retval = print_wstr(va_arg(ap, wchar_t *), width, precision, flags, ps);
+					retval = print_wstr(va_arg(ap, char32_t *), width, precision, flags, ps);
 				else
 					retval = print_str(va_arg(ap, char *), width, precision, flags, ps);
Index: kernel/generic/src/printf/vprintf.c
===================================================================
--- kernel/generic/src/printf/vprintf.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/printf/vprintf.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -47,5 +47,5 @@
 
 	while (offset < size) {
-		putwchar(str_decode(str, &offset, size));
+		putuchar(str_decode(str, &offset, size));
 		chars++;
 	}
@@ -54,5 +54,5 @@
 }
 
-static int vprintf_wstr_write(const wchar_t *str, size_t size, void *data)
+static int vprintf_wstr_write(const char32_t *str, size_t size, void *data)
 {
 	size_t offset = 0;
@@ -60,7 +60,7 @@
 
 	while (offset < size) {
-		putwchar(str[chars]);
+		putuchar(str[chars]);
 		chars++;
-		offset += sizeof(wchar_t);
+		offset += sizeof(char32_t);
 	}
 
@@ -72,12 +72,12 @@
 	size_t offset = 0;
 	size_t chars = 0;
-	wchar_t uc;
+	char32_t uc;
 
 	while ((uc = str_decode(str, &offset, STR_NO_LIMIT)) != 0) {
-		putwchar(uc);
+		putuchar(uc);
 		chars++;
 	}
 
-	putwchar('\n');
+	putuchar('\n');
 	return chars;
 }
Index: kernel/generic/src/printf/vsnprintf.c
===================================================================
--- kernel/generic/src/printf/vsnprintf.c	(revision 128359ebc085c950da1f7e34c3928f12654b438f)
+++ kernel/generic/src/printf/vsnprintf.c	(revision ce52c333dd9013cd4e9c22121ab41c36aee9c7d4)
@@ -88,5 +88,5 @@
 
 		while (index < size) {
-			wchar_t uc = str_decode(str, &index, size);
+			char32_t uc = str_decode(str, &index, size);
 
 			if (chr_encode(uc, data->dst, &data->len, data->size - 1) != EOK)
@@ -133,9 +133,9 @@
  *
  */
-static int vsnprintf_wstr_write(const wchar_t *str, size_t size, vsnprintf_data_t *data)
+static int vsnprintf_wstr_write(const char32_t *str, size_t size, vsnprintf_data_t *data)
 {
 	size_t index = 0;
 
-	while (index < (size / sizeof(wchar_t))) {
+	while (index < (size / sizeof(char32_t))) {
 		size_t left = data->size - data->len;
 
@@ -177,5 +177,5 @@
 	printf_spec_t ps = {
 		(int (*) (const char *, size_t, void *)) vsnprintf_str_write,
-		(int (*) (const wchar_t *, size_t, void *)) vsnprintf_wstr_write,
+		(int (*) (const char32_t *, size_t, void *)) vsnprintf_wstr_write,
 		&data
 	};
