Index: uspace/lib/c/generic/async/client.c
===================================================================
--- uspace/lib/c/generic/async/client.c	(revision 914c69344bd47cd9bdd70ec10555f3ab28b3c5ab)
+++ uspace/lib/c/generic/async/client.c	(revision 2eadda9562ba40a94f02c6d055a17a045521838d)
@@ -241,12 +241,13 @@
  *
  */
-static void reply_received(void *arg, errno_t retval, ipc_call_t *data)
-{
-	assert(arg);
+void async_reply_received(ipc_call_t *data)
+{
+	amsg_t *msg = data->label;
+	if (!msg)
+		return;
 
 	futex_lock(&async_futex);
 
-	amsg_t *msg = (amsg_t *) arg;
-	msg->retval = retval;
+	msg->retval = IPC_GET_RETVAL(*data);
 
 	/* Copy data after futex_down, just in case the call was detached */
@@ -302,6 +303,10 @@
 	msg->wdata.active = true;
 
-	ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4, msg,
-	    reply_received);
+	errno_t rc = ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3,
+	    arg4, msg);
+	if (rc != EOK) {
+		msg->retval = rc;
+		msg->done = true;
+	}
 
 	return (aid_t) msg;
@@ -340,6 +345,10 @@
 	msg->wdata.active = true;
 
-	ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4, arg5,
-	    msg, reply_received);
+	errno_t rc = ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3,
+	    arg4, arg5, msg);
+	if (rc != EOK) {
+		msg->retval = rc;
+		msg->done = true;
+	}
 
 	return (aid_t) msg;
@@ -653,5 +662,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_0(exch->phone, imethod, NULL, NULL);
+		ipc_call_async_0(exch->phone, imethod, NULL);
 }
 
@@ -659,5 +668,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_1(exch->phone, imethod, arg1, NULL, NULL);
+		ipc_call_async_1(exch->phone, imethod, arg1, NULL);
 }
 
@@ -666,5 +675,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL, NULL);
+		ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL);
 }
 
@@ -673,6 +682,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_3(exch->phone, imethod, arg1, arg2, arg3, NULL,
-		    NULL);
+		ipc_call_async_3(exch->phone, imethod, arg1, arg2, arg3, NULL);
 }
 
@@ -682,5 +690,5 @@
 	if (exch != NULL)
 		ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4,
-		    NULL, NULL);
+		    NULL);
 }
 
@@ -690,5 +698,5 @@
 	if (exch != NULL)
 		ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4,
-		    arg5, NULL, NULL);
+		    arg5, NULL);
 }
 
@@ -710,8 +718,11 @@
 	msg->wdata.active = true;
 
-	ipc_call_async_4(phone, IPC_M_CONNECT_ME_TO, (sysarg_t) iface, arg2,
-	    arg3, flags, msg, reply_received);
-
-	errno_t rc;
+	errno_t rc = ipc_call_async_4(phone, IPC_M_CONNECT_ME_TO,
+	    (sysarg_t) iface, arg2, arg3, flags, msg);
+	if (rc != EOK) {
+		msg->retval = rc;
+		msg->done = true;
+	}
+
 	async_wait_for((aid_t) msg, &rc);
 
