Index: generic/src/syscall/syscall.c
===================================================================
--- generic/src/syscall/syscall.c	(revision 5f62ef99a9c5aa3020510303c82ab8fcbfa0b83b)
+++ generic/src/syscall/syscall.c	(revision 8e0eb6329d476f643af8adc7546d4f1d1b8d77e3)
@@ -98,5 +98,6 @@
 
 /** Synchronous IPC call allowing to send whole message */
-static __native sys_ipc_call_sync(__native phoneid, __native *data)
+static __native sys_ipc_call_sync(__native phoneid, __native *question, 
+				  __native *reply)
 {
 	call_t call;
@@ -109,9 +110,9 @@
 
 	ipc_call_init(&call);
-	copy_from_uspace(&call.data, data, sizeof(call.data));
+	copy_from_uspace(&call.data, question, sizeof(call.data));
 	
 	ipc_call_sync(phone, &call);
 
-	copy_to_uspace(data, &call.data, sizeof(call.data));
+	copy_to_uspace(reply, &call.data, sizeof(call.data));
 
 	return 0;
@@ -185,6 +186,6 @@
 
 /** Send IPC answer */
-static __native sys_ipc_answer(__native callid, __native retval, __native arg1,
-			       __native arg2)
+static __native sys_ipc_answer_fast(__native callid, __native retval, 
+				    __native arg1, __native arg2)
 {
 	call_t *call;
@@ -203,4 +204,19 @@
 }
 
+/** Send IPC answer */
+static __native sys_ipc_answer(__native callid, __native *data)
+{
+	call_t *call;
+
+	/* Check that the user is not sending us answer callid */
+	ASSERT(! (callid & 1));
+	/* TODO: Check that the callid is in the dispatch table */
+	call = (call_t *) callid;
+	copy_from_uspace(&call->data, data, sizeof(call->data));
+	ipc_answer(&TASK->answerbox, call);
+
+	return 0;
+}
+
 /** Wait for incoming ipc call or answer
  *
@@ -209,5 +225,6 @@
  * @return Callid, if callid & 1, then the call is answer
  */
-static __native sys_ipc_wait_for_call(__native *calldata, __native flags)
+static __native sys_ipc_wait_for_call(__native *calldata, task_id_t *taskid,
+				      __native flags)
 {
 	call_t *call;
@@ -223,4 +240,5 @@
 		return ((__native)call) | IPC_CALLID_ANSWERED;
 	}
+	copy_to_uspace(taskid, (void *)&TASK->taskid, sizeof(TASK->taskid));
 	return (__native)call;
 }
@@ -239,4 +257,5 @@
 	sys_ipc_call_async_fast,
 	sys_ipc_call_async,
+	sys_ipc_answer_fast,
 	sys_ipc_answer,
 	sys_ipc_wait_for_call
