Index: uspace/libc/generic/io/printf_core.c
===================================================================
--- uspace/libc/generic/io/printf_core.c	(revision de33dab3d6e266b32bfcf983b683fc6d18b2ac72)
+++ uspace/libc/generic/io/printf_core.c	(revision e41455d32a4ca3fd7af54e8ee9e03514294c7153)
@@ -41,5 +41,4 @@
 #include <ctype.h>
 #include <string.h>
-#include <async.h>	/* for pseudo thread serialization */
 
 #define __PRINTF_FLAG_PREFIX		0x00000001	/**< show prefixes 0x or 0*/
@@ -444,7 +443,4 @@
 	int width, precision;
 	uint64_t flags;
-	
-	/* Don't let other pseudo threads interfere. */
-	async_serialize_start();
 	
 	counter = 0;
@@ -679,8 +675,6 @@
 	}
 	
-	async_serialize_end();
 	return counter;
 minus_out:
-	async_serialize_end();
 	return -counter;
 }
Index: uspace/libc/generic/io/vprintf.c
===================================================================
--- uspace/libc/generic/io/vprintf.c	(revision de33dab3d6e266b32bfcf983b683fc6d18b2ac72)
+++ uspace/libc/generic/io/vprintf.c	(revision e41455d32a4ca3fd7af54e8ee9e03514294c7153)
@@ -37,4 +37,8 @@
 #include <unistd.h>
 #include <io/printf_core.h>
+#include <futex.h>
+#include <async.h>
+
+static atomic_t printf_futex = FUTEX_INITIALIZER;
 
 static int vprintf_write(const char *str, size_t count, void *unused)
@@ -50,8 +54,20 @@
 int vprintf(const char *fmt, va_list ap)
 {
-	struct printf_spec ps = {(int(*)(void *, size_t, void *)) vprintf_write, NULL};
-	
+	struct printf_spec ps = {
+		(int (*)(void *, size_t, void *)) vprintf_write,
+		 NULL
+	};
+	/*
+	 * Prevent other threads to execute printf_core()
+	 */
+	futex_down(&printf_futex);
+	/*
+	 * Prevent other pseudo threads of the same thread
+	 * to execute printf_core()
+	 */
+	async_serialize_start();
 	int ret = printf_core(fmt, &ps, ap);
-	
+	async_serialize_end();
+	futex_up(&printf_futex);
 	return ret;
 }
