Index: uspace/srv/taskman/event.c
===================================================================
--- uspace/srv/taskman/event.c	(revision 2aaccd3307dcc5f0d64d0bf382939871466c33b9)
+++ uspace/srv/taskman/event.c	(revision 780c8ce2b4c584af1b1e84434bc2d7079a4ae6df)
@@ -189,5 +189,6 @@
 }
 
-void wait_for_task(task_id_t id, int flags, ipc_callid_t callid, ipc_call_t *call)
+void wait_for_task(task_id_t id, int flags, ipc_callid_t callid,
+     task_id_t waiter_id)
 {
 	assert(!(flags & TASK_WAIT_BOTH) ||
@@ -214,5 +215,4 @@
 	 * wait.
 	 */
-	task_id_t waiter_id = call->in_task_id;
 	fibril_rwlock_write_lock(&pending_wait_lock);
 	pending_wait_t *pr = NULL;
@@ -264,11 +264,10 @@
 
 
-int task_set_retval(ipc_call_t *call)
+int task_set_retval(task_id_t sender, int retval, bool wait_for_exit)
 {
 	int rc = EOK;
-	task_id_t id = call->in_task_id;
 	
 	fibril_rwlock_write_lock(&task_hash_table_lock);
-	task_t *t = task_get_by_id(id);
+	task_t *t = task_get_by_id(sender);
 
 	if ((t == NULL) || (t->exit != TASK_EXIT_RUNNING)) {
@@ -277,6 +276,6 @@
 	}
 	
-	t->retval = IPC_GET_ARG1(*call);
-	t->retval_type = IPC_GET_ARG2(*call) ? RVAL_SET_EXIT : RVAL_SET;
+	t->retval = retval;
+	t->retval_type = wait_for_exit ? RVAL_SET_EXIT : RVAL_SET;
 	
 	event_notify(t);
Index: uspace/srv/taskman/event.h
===================================================================
--- uspace/srv/taskman/event.h	(revision 2aaccd3307dcc5f0d64d0bf382939871466c33b9)
+++ uspace/srv/taskman/event.h	(revision 780c8ce2b4c584af1b1e84434bc2d7079a4ae6df)
@@ -41,9 +41,7 @@
 extern int event_init(void);
 
-
-// TODO unify this API for all call/connection handlers
 extern int event_register_listener(task_id_t, async_sess_t *);
-extern void wait_for_task(task_id_t, int, ipc_callid_t, ipc_call_t *);
-extern int task_set_retval(ipc_call_t *);
+extern void wait_for_task(task_id_t, int, ipc_callid_t, task_id_t);
+extern int task_set_retval(task_id_t, int, bool);
 
 extern void task_terminated(task_id_t, exit_reason_t);
Index: uspace/srv/taskman/main.c
===================================================================
--- uspace/srv/taskman/main.c	(revision 2aaccd3307dcc5f0d64d0bf382939871466c33b9)
+++ uspace/srv/taskman/main.c	(revision 780c8ce2b4c584af1b1e84434bc2d7079a4ae6df)
@@ -27,4 +27,14 @@
  */
 
+/**
+ * Locking order:
+ * - task_hash_table_lock (task.c),
+ * - pending_wait_lock (event.c),
+ * - listeners_lock (event.c).
+ *
+ * @addtogroup taskman
+ * @{
+ */
+
 #include <adt/prodcons.h>
 #include <assert.h>
@@ -113,6 +123,7 @@
 	    MERGE_LOUP32(IPC_GET_ARG1(*icall), IPC_GET_ARG2(*icall));
 	int flags = IPC_GET_ARG3(*icall);
-
-	wait_for_task(id, flags, iid, icall);
+	task_id_t waiter_id = icall->in_task_id;
+
+	wait_for_task(id, flags, iid, waiter_id);
 }
 
@@ -120,5 +131,9 @@
 {
 	printf("%s:%i from %llu\n", __func__, __LINE__, icall->in_task_id);
-	int rc = task_set_retval(icall);
+	task_id_t sender = icall->in_task_id;
+	int retval = IPC_GET_ARG1(*icall);
+	bool wait_for_exit = IPC_GET_ARG2(*icall);
+
+	int rc = task_set_retval(sender, retval, wait_for_exit);
 	async_answer_0(iid, rc);
 }
@@ -265,6 +280,4 @@
 }
 
-/** Build hard coded configuration */
-
 
 int main(int argc, char *argv[])
@@ -313,2 +326,6 @@
 	return 0;
 }
+
+/**
+ * @}
+ */
Index: uspace/srv/taskman/task.c
===================================================================
--- uspace/srv/taskman/task.c	(revision 2aaccd3307dcc5f0d64d0bf382939871466c33b9)
+++ uspace/srv/taskman/task.c	(revision 780c8ce2b4c584af1b1e84434bc2d7079a4ae6df)
@@ -27,14 +27,4 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * locking order: (TODO move to main?)
- * - task_hash_table_lock,
- * - pending_wait_lock.
- * - listeners_lock
- *
- * @addtogroup taskman
- * @{
  */
 
