Index: uspace/lib/libc/generic/loader.c
===================================================================
--- uspace/lib/libc/generic/loader.c	(revision a68ba8b4e70346f73648316241955d35c5197c35)
+++ uspace/lib/libc/generic/loader.c	(revision 76dd25b7f1290f21230e4d3c41919e84f05bb9d8)
@@ -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 a68ba8b4e70346f73648316241955d35c5197c35)
+++ uspace/lib/libc/generic/task.c	(revision 76dd25b7f1290f21230e4d3c41919e84f05bb9d8)
@@ -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)
