Index: uspace/lib/libc/generic/loader.c
===================================================================
--- uspace/lib/libc/generic/loader.c	(revision 54b2e7466e73fdf2325536108c991394e0642b7e)
+++ uspace/lib/libc/generic/loader.c	(revision e500785d7af1692b70a55d90f5ddfc57c4d58cc8)
@@ -35,4 +35,5 @@
 #include <ipc/ipc.h>
 #include <ipc/loader.h>
+#include <ipc/services.h>
 #include <libc.h>
 #include <task.h>
@@ -51,23 +52,17 @@
  *		de-allocated using free() after use).
  */
-loader_t *loader_spawn(const char *name)
-{
-	int phone_id, rc;
+int loader_spawn(const char *name)
+{
+	return __SYSCALL2(SYS_PROGRAM_SPAWN_LOADER,
+	    (sysarg_t) name, strlen(name));
+}
+
+loader_t *loader_connect(void)
+{
 	loader_t *ldr;
-
-	/*
-	 * Ask kernel to spawn a new loader task.
-	 */
-	rc = __SYSCALL3(SYS_PROGRAM_SPAWN_LOADER, (sysarg_t) &phone_id,
-		(sysarg_t) name, strlen(name));
-	if (rc != 0)
-		return NULL;
-
-	/*
-	 * Say hello so that the loader knows the incoming connection's
-	 * phone hash.
-	 */
-	rc = async_req_0_0(phone_id, LOADER_HELLO);
-	if (rc != EOK)
+	int phone_id;
+
+	phone_id = ipc_connect_me_to(PHONE_NS, SERVICE_LOAD, 0, 0);
+	if (phone_id < 0)
 		return NULL;
 
@@ -77,5 +72,5 @@
 
 	ldr->phone_id = phone_id;
-	return ldr;
+	return ldr;	
 }
 
Index: uspace/lib/libc/generic/task.c
===================================================================
--- uspace/lib/libc/generic/task.c	(revision 54b2e7466e73fdf2325536108c991394e0642b7e)
+++ uspace/lib/libc/generic/task.c	(revision e500785d7af1692b70a55d90f5ddfc57c4d58cc8)
@@ -64,6 +64,6 @@
 	int rc;
 
-	/* Spawn a program loader. */	
-	ldr = loader_spawn(path);
+	/* Connect to a program loader. */
+	ldr = loader_connect();
 	if (ldr == NULL)
 		return 0;
@@ -90,5 +90,4 @@
 
 	/* Run it. */
-	/* Load the program. */
 	rc = loader_run(ldr);
 	if (rc != EOK)
Index: uspace/lib/libc/include/ipc/services.h
===================================================================
--- uspace/lib/libc/include/ipc/services.h	(revision 54b2e7466e73fdf2325536108c991394e0642b7e)
+++ uspace/lib/libc/include/ipc/services.h	(revision e500785d7af1692b70a55d90f5ddfc57c4d58cc8)
@@ -39,5 +39,6 @@
 
 typedef enum {
-	SERVICE_PCI = 1,
+	SERVICE_LOAD = 1,
+	SERVICE_PCI,
 	SERVICE_KEYBOARD,
 	SERVICE_VIDEO,
Index: uspace/lib/libc/include/loader/loader.h
===================================================================
--- uspace/lib/libc/include/loader/loader.h	(revision 54b2e7466e73fdf2325536108c991394e0642b7e)
+++ uspace/lib/libc/include/loader/loader.h	(revision e500785d7af1692b70a55d90f5ddfc57c4d58cc8)
@@ -45,5 +45,6 @@
 } loader_t;
 
-extern loader_t *loader_spawn(const char *name);
+extern int loader_spawn(const char *);
+extern loader_t *loader_connect(void);
 extern int loader_get_task_id(loader_t *, task_id_t *);
 extern int loader_set_pathname(loader_t *, const char *);
