Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 4c7257ba8f4ef0df71aab7099fb893bdddff511d)
+++ kernel/generic/include/proc/task.h	(revision bc18d63b733703c3262a3a720f92513621962cff)
@@ -145,4 +145,5 @@
 
 extern unative_t sys_task_get_id(task_id_t *uspace_task_id);
+extern unative_t sys_task_set_name(const char *uspace_name, size_t name_len);
 
 #endif
Index: kernel/generic/include/syscall/syscall.h
===================================================================
--- kernel/generic/include/syscall/syscall.h	(revision 4c7257ba8f4ef0df71aab7099fb893bdddff511d)
+++ kernel/generic/include/syscall/syscall.h	(revision bc18d63b733703c3262a3a720f92513621962cff)
@@ -45,4 +45,5 @@
 	
 	SYS_TASK_GET_ID,
+	SYS_TASK_SET_NAME,
 	SYS_PROGRAM_SPAWN_LOADER,
 	
Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision 4c7257ba8f4ef0df71aab7099fb893bdddff511d)
+++ kernel/generic/src/proc/program.c	(revision bc18d63b733703c3262a3a720f92513621962cff)
@@ -207,6 +207,6 @@
 	/* Cap length of name and copy it from userspace. */
 
-	if (name_len > THREAD_NAME_BUFLEN - 1)
-		name_len = THREAD_NAME_BUFLEN - 1;
+	if (name_len > TASK_NAME_BUFLEN - 1)
+		name_len = TASK_NAME_BUFLEN - 1;
 
 	rc = copy_from_uspace(namebuf, uspace_name, name_len);
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 4c7257ba8f4ef0df71aab7099fb893bdddff511d)
+++ kernel/generic/src/proc/task.c	(revision bc18d63b733703c3262a3a720f92513621962cff)
@@ -250,4 +250,33 @@
 }
 
+/** Syscall for setting the task name.
+ *
+ * The name simplifies identifying the task in the task list.
+ *
+ * @param name	The new name for the task. (typically the same
+ *		as the command used to execute it).
+ *
+ * @return 0 on success or an error code from @ref errno.h.
+ */
+unative_t sys_task_set_name(const char *uspace_name, size_t name_len)
+{
+	int rc;
+	char namebuf[TASK_NAME_BUFLEN];
+
+	/* Cap length of name and copy it from userspace. */
+
+	if (name_len > TASK_NAME_BUFLEN - 1)
+		name_len = TASK_NAME_BUFLEN - 1;
+
+	rc = copy_from_uspace(namebuf, uspace_name, name_len);
+	if (rc != 0)
+		return (unative_t) rc;
+
+	namebuf[name_len] = '\0';
+	strcpy(TASK->name, namebuf);
+
+	return EOK;
+}
+
 /** Find task structure corresponding to task ID.
  *
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 4c7257ba8f4ef0df71aab7099fb893bdddff511d)
+++ kernel/generic/src/syscall/syscall.c	(revision bc18d63b733703c3262a3a720f92513621962cff)
@@ -150,4 +150,5 @@
 	
 	(syshandler_t) sys_task_get_id,
+	(syshandler_t) sys_task_set_name,
 	(syshandler_t) sys_program_spawn_loader,
 	
