Index: uspace/srv/console/console.c
===================================================================
--- uspace/srv/console/console.c	(revision 05641a9edbf1f7a46db1517a8e99aa0ffa7bdd5d)
+++ uspace/srv/console/console.c	(revision 7ce3cb23f444724ec768a4973b4707c2e29b3d54)
@@ -104,5 +104,5 @@
 static char cwrite_buf[CWRITE_BUF_SIZE];
 
-static void fb_putchar(char c, int row, int col);
+static void fb_putchar(wchar_t c, int row, int col);
 
 
@@ -252,5 +252,5 @@
 
 /** Print a character to the active VC with buffering. */
-static void fb_putchar(char c, int row, int col)
+static void fb_putchar(wchar_t c, int row, int col)
 {
 	async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col);
@@ -258,10 +258,10 @@
 
 /** Process a character from the client (TTY emulation). */
-static void write_char(int console, char key)
+static void write_char(int console, wchar_t ch)
 {
 	bool flush_cursor = false;
 	screenbuffer_t *scr = &(connections[console].screenbuffer);
 
-	switch (key) {
+	switch (ch) {
 	case '\n':
 		fb_pending_flush();
@@ -288,5 +288,5 @@
 			cell_mark_changed(scr->position_y, scr->position_x);
 
-		screenbuffer_putchar(scr, key);
+		screenbuffer_putchar(scr, ch);
 		scr->position_x++;
 	}
Index: uspace/srv/console/screenbuffer.c
===================================================================
--- uspace/srv/console/screenbuffer.c	(revision 05641a9edbf1f7a46db1517a8e99aa0ffa7bdd5d)
+++ uspace/srv/console/screenbuffer.c	(revision 7ce3cb23f444724ec768a4973b4707c2e29b3d54)
@@ -44,11 +44,11 @@
  * @param c	stored character
  */
-void screenbuffer_putchar(screenbuffer_t *scr, char c) 
+void screenbuffer_putchar(screenbuffer_t *scr, wchar_t ch)
 {
 	keyfield_t *field;
-	
+
 	field = get_field_at(scr, scr->position_x, scr->position_y);
 
-	field->character = c;
+	field->character = ch;
 	field->attrs = scr->attrs;
 }
Index: uspace/srv/console/screenbuffer.h
===================================================================
--- uspace/srv/console/screenbuffer.h	(revision 05641a9edbf1f7a46db1517a8e99aa0ffa7bdd5d)
+++ uspace/srv/console/screenbuffer.h	(revision 7ce3cb23f444724ec768a4973b4707c2e29b3d54)
@@ -37,4 +37,5 @@
 
 #include <stdint.h>
+#include <sys/types.h>
 
 #define DEFAULT_FOREGROUND 0x0	/**< default console foreground color */
@@ -71,5 +72,5 @@
 /** One field on screen. It contain one character and its attributes. */
 typedef struct {
-	char character;			/**< Character itself */
+	wchar_t character;		/**< Character itself */
 	attrs_t attrs;			/**< Character`s attributes */
 } keyfield_t;
@@ -92,5 +93,5 @@
  * @return	keyfield structure with character and its attributes on x,y
  */
-static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) 
+static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y)
 {
 	return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x;
@@ -117,5 +118,5 @@
 
 
-void screenbuffer_putchar(screenbuffer_t *scr, char c);
+void screenbuffer_putchar(screenbuffer_t *scr, wchar_t c);
 screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y);
 
Index: uspace/srv/fb/fb.c
===================================================================
--- uspace/srv/fb/fb.c	(revision 05641a9edbf1f7a46db1517a8e99aa0ffa7bdd5d)
+++ uspace/srv/fb/fb.c	(revision 7ce3cb23f444724ec768a4973b4707c2e29b3d54)
@@ -98,5 +98,5 @@
 /** Backbuffer character cell. */
 typedef struct {
-	uint8_t glyph;
+	uint32_t glyph;
 	uint32_t fg_color;
 	uint32_t bg_color;
@@ -195,7 +195,7 @@
 
 static void draw_glyph_aligned(unsigned int x, unsigned int y, bool cursor,
-    uint8_t *glyphs, uint8_t glyph, uint32_t fg_color, uint32_t bg_color);
+    uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color);
 static void draw_glyph_fallback(unsigned int x, unsigned int y, bool cursor,
-    uint8_t *glyphs, uint8_t glyph, uint32_t fg_color, uint32_t bg_color);
+    uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color);
 
 static void draw_vp_glyph(viewport_t *vport, bool cursor, unsigned int col,
@@ -660,5 +660,5 @@
  */
 static void draw_glyph_aligned(unsigned int x, unsigned int y, bool cursor,
-    uint8_t *glyphs, uint8_t glyph, uint32_t fg_color, uint32_t bg_color)
+    uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color)
 {
 	unsigned int i, yd;
@@ -667,4 +667,8 @@
 	unsigned long mask;
 	unsigned int ww, d_add;
+
+	/* Check glyph range. */
+	if (glyph >= FONT_GLYPHS)
+		return;
 
 	/*
@@ -679,5 +683,4 @@
 	}
 
-
 	/* Pointer to the current position in the mask. */
 	maskp = (unsigned long *) &glyphs[GLYPH_POS(glyph, 0, cursor)];
@@ -721,5 +724,5 @@
  */
 void draw_glyph_fallback(unsigned int x, unsigned int y, bool cursor,
-    uint8_t *glyphs, uint8_t glyph, uint32_t fg_color, uint32_t bg_color)
+    uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color)
 {
 	unsigned int i, j, yd;
@@ -728,4 +731,8 @@
 	unsigned int d_add;
 	uint8_t b;
+
+	/* Check glyph range. */
+	if (glyph >= FONT_GLYPHS)
+		return;
 
 	/* Pre-render 1x the foreground and background color pixels. */
@@ -780,5 +787,5 @@
 	unsigned int y = vport->y + ROW2Y(row);
 
-	uint8_t glyph;
+	uint32_t glyph;
 	uint32_t fg_color;
 	uint32_t bg_color;
@@ -837,5 +844,5 @@
  *
  */
-static void draw_char(viewport_t *vport, uint8_t c, unsigned int col, unsigned int row)
+static void draw_char(viewport_t *vport, wchar_t c, unsigned int col, unsigned int row)
 {
 	bb_cell_t *bbp;
@@ -847,5 +854,5 @@
 
 	bbp = &vport->backbuf[BB_POS(vport, col, row)];
-	bbp->glyph = c;
+	bbp->glyph = (uint32_t) c;
 	bbp->fg_color = vport->attr.fg_color;
 	bbp->bg_color = vport->attr.bg_color;
@@ -890,5 +897,5 @@
 
 			bbp = &vport->backbuf[BB_POS(vport, col, row)];
-			uint8_t glyph = bbp->glyph;
+			uint32_t glyph = bbp->glyph;
 
 			a = &data[j * w + i].attrs;
@@ -1511,5 +1518,5 @@
 		unsigned int i;
 		int scroll;
-		uint8_t glyph;
+		uint32_t glyph;
 		unsigned int row, col;
 		
Index: uspace/srv/fb/serial_console.c
===================================================================
--- uspace/srv/fb/serial_console.c	(revision 05641a9edbf1f7a46db1517a8e99aa0ffa7bdd5d)
+++ uspace/srv/fb/serial_console.c	(revision 7ce3cb23f444724ec768a4973b4707c2e29b3d54)
@@ -103,4 +103,9 @@
 }
 
+void serial_putchar(wchar_t ch)
+{
+	(*putc_function)(ch);
+}
+
 void serial_goto(const unsigned int row, const unsigned int col)
 {
@@ -257,5 +262,5 @@
 			if (!attrs_same(*a0, *a1))
 				serial_set_attrs(a1);
-			(*putc_function)(field->character);
+			serial_putchar(field->character);
 			a0 = a1;
 		}
@@ -277,5 +282,5 @@
 	size_t intersize = 0;
 
-	char c;
+	wchar_t c;
 	int col, row, w, h;
 	int fgcolor;
@@ -344,5 +349,5 @@
 			lastcol = col + 1;
 			lastrow = row;
-			(*putc_function)(c);
+			serial_putchar(c);
 			retval = 0;
 			break;
