Index: uspace/lib/c/generic/task.c
===================================================================
--- uspace/lib/c/generic/task.c	(revision 32efd865176bfa9c946bb85353ec87e270ab1dda)
+++ uspace/lib/c/generic/task.c	(revision 9fd39d673bc4186b3b529c4847750f207764ede4)
@@ -39,4 +39,5 @@
 #include <errno.h>
 #include <loader/loader.h>
+#include <stdarg.h>
 #include <str.h>
 #include <ipc/ns.h>
@@ -68,27 +69,25 @@
  *
  * This is really just a convenience wrapper over the more complicated
- * loader API.
- *
- * @param path Pathname of the binary to execute.
- * @param argv Command-line arguments.
- * @param err  If not NULL, the error value is stored here.
- *
- * @return ID of the newly created task or zero on error.
- *
- */
-task_id_t task_spawn(const char *path, const char *const args[], int *err)
-{
+ * loader API. Arguments are passed as a null-terminated array of strings.
+ *
+ * @param id 	If not NULL, the ID of the task is stored here on success.
+ * @param path	Pathname of the binary to execute.
+ * @param argv	Command-line arguments.
+ *
+ * @return	Zero on success or negative error code.
+ */
+int task_spawnv(task_id_t *id, const char *path, const char *const args[])
+{
+	loader_t *ldr;
+	task_id_t task_id;
+	int rc;
+
 	/* Connect to a program loader. */
-	loader_t *ldr = loader_connect();
-	if (ldr == NULL) {
-		if (err != NULL)
-			*err = EREFUSED;
-		
-		return 0;
-	}
+	ldr = loader_connect();
+	if (ldr == NULL)
+		return EREFUSED;
 	
 	/* Get task ID. */
-	task_id_t task_id;
-	int rc = loader_get_task_id(ldr, &task_id);
+	rc = loader_get_task_id(ldr, &task_id);
 	if (rc != EOK)
 		goto error;
@@ -149,8 +148,8 @@
 	free(ldr);
 	
-	if (err != NULL)
-		*err = EOK;
-	
-	return task_id;
+	if (id != NULL)
+		*id = task_id;
+	
+	return EOK;
 	
 error:
@@ -158,9 +157,54 @@
 	loader_abort(ldr);
 	free(ldr);
-	
-	if (err != NULL)
-		*err = rc;
-	
-	return 0;
+	return rc;
+}
+
+/** Create a new task by running an executable from the filesystem.
+ *
+ * This is really just a convenience wrapper over the more complicated
+ * loader API. Arguments are passed as a null-terminated list of arguments.
+ *
+ * @param id 	If not NULL, the ID of the task is stored here on success.
+ * @param path	Pathname of the binary to execute.
+ * @param ...	Command-line arguments.
+ *
+ * @return	Zero on success or negative error code.
+ */
+int task_spawnl(task_id_t *task_id, const char *path, ...)
+{
+	va_list ap;
+	int rc, cnt;
+	const char *arg;
+	const char **arglist;
+
+	/* Count the number of arguments. */
+	cnt = 0;
+	va_start(ap, path);
+	do {
+		arg = va_arg(ap, const char *);
+		cnt++;
+	} while (arg != NULL);
+	va_end(ap);
+
+	/* Allocate argument list. */
+	arglist = malloc(cnt * sizeof(const char *));
+	if (arglist == NULL)
+		return ENOMEM;
+
+	/* Fill in arguments. */
+	cnt = 0;
+	va_start(ap, path);
+	do {
+		arg = va_arg(ap, const char *);
+		arglist[cnt++] = arg;
+	} while (arg != NULL);
+	va_end(ap);
+
+	/* Spawn task. */
+	rc = task_spawnv(task_id, path, arglist);
+
+	/* Free argument list. */
+	free(arglist);
+	return rc;
 }
 
Index: uspace/lib/c/include/task.h
===================================================================
--- uspace/lib/c/include/task.h	(revision 32efd865176bfa9c946bb85353ec87e270ab1dda)
+++ uspace/lib/c/include/task.h	(revision 9fd39d673bc4186b3b529c4847750f207764ede4)
@@ -48,4 +48,7 @@
 extern int task_set_name(const char *);
 extern task_id_t task_spawn(const char *, const char *const[], int *);
+extern int task_spawnv(task_id_t *, const char *path, const char *const []);
+extern int task_spawnl(task_id_t *, const char *path, ...);
+
 extern int task_wait(task_id_t id, task_exit_t *, int *);
 extern int task_retval(int);
Index: uspace/lib/net/adt/module_map.c
===================================================================
--- uspace/lib/net/adt/module_map.c	(revision 32efd865176bfa9c946bb85353ec87e270ab1dda)
+++ uspace/lib/net/adt/module_map.c	(revision 9fd39d673bc4186b3b529c4847750f207764ede4)
@@ -132,12 +132,12 @@
 task_id_t spawn(const char *fname)
 {
-	const char *argv[2];
-	task_id_t res;
+	task_id_t id;
+	int rc;
 	
-	argv[0] = fname;
-	argv[1] = NULL;
-	res = task_spawn(fname, argv, NULL);
+	rc = task_spawnl(&id, fname, fname, NULL);
+	if (rc != EOK)
+		return 0;
 	
-	return res;
+	return id;
 }
 
