Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision 86e3d629aeb218db438dde76e8de2e9f7642e46f)
+++ kernel/generic/include/proc/thread.h	(revision 7faabb7f6879c7279c1423c847dfaedf930cff0f)
@@ -260,5 +260,6 @@
 
 /* Thread syscall prototypes. */
-extern unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name, thread_id_t *uspace_thread_id);
+extern unative_t sys_thread_create(uspace_arg_t *uspace_uarg,
+    char *uspace_name, size_t name_len, thread_id_t *uspace_thread_id);
 extern unative_t sys_thread_exit(int uspace_status);
 extern unative_t sys_thread_get_id(thread_id_t *uspace_thread_id);
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 86e3d629aeb218db438dde76e8de2e9f7642e46f)
+++ kernel/generic/src/proc/thread.c	(revision 7faabb7f6879c7279c1423c847dfaedf930cff0f)
@@ -709,5 +709,5 @@
  */
 unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name,
-    thread_id_t *uspace_thread_id)
+    size_t name_len, thread_id_t *uspace_thread_id)
 {
 	thread_t *t;
@@ -716,7 +716,12 @@
 	int rc;
 
-	rc = copy_from_uspace(namebuf, uspace_name, THREAD_NAME_BUFLEN);
+	if (name_len >= THREAD_NAME_BUFLEN)
+		name_len = THREAD_NAME_BUFLEN - 1;
+
+	rc = copy_from_uspace(namebuf, uspace_name, name_len);
 	if (rc != 0)
 		return (unative_t) rc;
+
+	namebuf[name_len] = '\0';
 
 	/*
Index: uspace/lib/libc/generic/thread.c
===================================================================
--- uspace/lib/libc/generic/thread.c	(revision 86e3d629aeb218db438dde76e8de2e9f7642e46f)
+++ uspace/lib/libc/generic/thread.c	(revision 7faabb7f6879c7279c1423c847dfaedf930cff0f)
@@ -109,6 +109,6 @@
 	uarg->uspace_uarg = uarg;
 	
-	rc = __SYSCALL3(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name,
-	    (sysarg_t) tid);
+	rc = __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name,
+	    (sysarg_t) strlen(name), (sysarg_t) tid);
 	
 	if (rc) {
