Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 0143f72c707fa87b2fc54b5d49db469471b06c40)
+++ uspace/srv/ns/ns.c	(revision 7114d836ff84c10f98376e50246b4d5e34146131)
@@ -171,4 +171,7 @@
 			wait_for_task(id, &call, callid);
 			continue;
+		case NS_RETVAL:
+			retval = ns_task_retval(&call);
+			break;
 		default:
 			retval = ENOENT;
Index: uspace/srv/ns/task.c
===================================================================
--- uspace/srv/ns/task.c	(revision 0143f72c707fa87b2fc54b5d49db469471b06c40)
+++ uspace/srv/ns/task.c	(revision 7114d836ff84c10f98376e50246b4d5e34146131)
@@ -64,4 +64,5 @@
 	link_t link;
 	task_id_t id;    /**< Task ID. */
+	int retval;
 	bool destroyed;
 } hashed_task_t;
@@ -174,5 +175,5 @@
 		
 		if (!(pr->callid & IPC_CALLID_NOTIFICATION))
-			ipc_answer_0(pr->callid, EOK);
+			ipc_answer_1(pr->callid, EOK, ht->retval);
 		
 		hash_table_remove(&task_hash_table, keys, 2);
@@ -222,4 +223,5 @@
 		ht->id = id;
 		ht->destroyed = (et == TASK_CREATE) ? false : true;
+		ht->retval = -1;
 		hash_table_insert(&task_hash_table, keys, &ht->link);
 	} else {
@@ -262,5 +264,27 @@
 out:
 	if (!(callid & IPC_CALLID_NOTIFICATION))
-		ipc_answer_0(callid, retval);
+		ipc_answer_1(callid, retval, ht->retval);
+}
+
+int ns_task_retval(ipc_call_t *call)
+{
+	task_id_t id;
+	unsigned long keys[2];
+
+	id = MERGE_LOUP32(IPC_GET_ARG1(*call), IPC_GET_ARG2(*call));
+
+	keys[0] = LOWER32(id);
+	keys[1] = UPPER32(id);
+	
+	link_t *link = hash_table_find(&task_hash_table, keys);
+	hashed_task_t *ht = (link != NULL) ?
+	    hash_table_get_instance(link, hashed_task_t, link) : NULL;
+	
+	if ((ht == NULL) || ht->destroyed)
+		return EINVAL;
+
+	ht->retval = IPC_GET_ARG3(*call);
+
+	return EOK;
 }
 
Index: uspace/srv/ns/task.h
===================================================================
--- uspace/srv/ns/task.h	(revision 0143f72c707fa87b2fc54b5d49db469471b06c40)
+++ uspace/srv/ns/task.h	(revision 7114d836ff84c10f98376e50246b4d5e34146131)
@@ -43,4 +43,6 @@
 extern void wait_for_task(task_id_t id, ipc_call_t *call, ipc_callid_t callid);
 
+extern int ns_task_retval(ipc_call_t *call);
+
 #endif
 
