Index: kernel/arch/ia64/src/cpu/cpu.c
===================================================================
--- kernel/arch/ia64/src/cpu/cpu.c	(revision 84afc7bf42bf4b5e22750a7f377f4bfc31636630)
+++ kernel/arch/ia64/src/cpu/cpu.c	(revision b60c582d0cf4f0476a720c8e05bd742fbffc87ce)
@@ -56,5 +56,5 @@
 	*((uint64_t *) &vendor[0 * sizeof(uint64_t)]) = CPU->arch.cpuid0;
 	*((uint64_t *) &vendor[1 * sizeof(uint64_t)]) = CPU->arch.cpuid1;
-	vendor[sizeof(vendor) - 1] = '\0';
+	vendor[sizeof(vendor) - 1] = 0;
 	
 	switch(m->arch.cpuid3.family) {
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 84afc7bf42bf4b5e22750a7f377f4bfc31636630)
+++ kernel/arch/ia64/src/ia64.c	(revision b60c582d0cf4f0476a720c8e05bd742fbffc87ce)
@@ -88,5 +88,5 @@
 		    VRN_MASK;
 		init.tasks[i].size = bootinfo->taskmap.tasks[i].size;
-		strncpy(init.tasks[i].name, bootinfo->taskmap.tasks[i].name,
+		str_ncpy(init.tasks[i].name, bootinfo->taskmap.tasks[i].name,
 			CONFIG_TASK_NAME_BUFLEN);
 	}
Index: kernel/arch/ia64/src/interrupt.c
===================================================================
--- kernel/arch/ia64/src/interrupt.c	(revision 84afc7bf42bf4b5e22750a7f377f4bfc31636630)
+++ kernel/arch/ia64/src/interrupt.c	(revision b60c582d0cf4f0476a720c8e05bd742fbffc87ce)
@@ -55,4 +55,5 @@
 #include <mm/tlb.h>
 #include <symtab.h>
+#include <putchar.h>
 
 #define VECTORS_64_BUNDLE	20
Index: kernel/arch/ia64/src/ski/ski.c
===================================================================
--- kernel/arch/ia64/src/ski/ski.c	(revision 84afc7bf42bf4b5e22750a7f377f4bfc31636630)
+++ kernel/arch/ia64/src/ski/ski.c	(revision b60c582d0cf4f0476a720c8e05bd742fbffc87ce)
@@ -42,4 +42,5 @@
 #include <arch/asm.h>
 #include <arch/drivers/kbd.h>
+#include <string.h>
 #include <arch.h>
 
@@ -49,4 +50,16 @@
 static bool kbd_disabled;
 
+static void ski_do_putchar(const wchar_t ch)
+{
+	asm volatile (
+		"mov r15 = %[cmd]\n"
+		"mov r32 = %[ch]\n"   /* r32 is in0 */
+		"break 0x80000\n"  /* modifies r8 */
+		:
+		: [cmd] "i" (SKI_PUTCHAR), [ch] "r" (ch)
+		: "r15", "in0", "r8"
+	);
+}
+
 /** Display character on debug console
  *
@@ -57,18 +70,14 @@
  * @param ch Character to be printed.
  */
-static void ski_putchar(outdev_t *d, const char ch, bool silent)
+static void ski_putchar(outdev_t *d, const wchar_t ch, bool silent)
 {
 	if (!silent) {
-		asm volatile (
-			"mov r15 = %0\n"
-			"mov r32 = %1\n"   /* r32 is in0 */
-			"break 0x80000\n"  /* modifies r8 */
-			:
-			: "i" (SKI_PUTCHAR), "r" (ch)
-			: "r15", "in0", "r8"
-		);
-		
-		if (ch == '\n')
-			ski_putchar(d, '\r', false);
+		if (ascii_check(ch)) {
+			if (ch == '\n')
+				ski_do_putchar('\r');
+			
+			ski_do_putchar(ch);
+		} else
+			ski_do_putchar(invalch);
 	}
 }
