Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision b1f36e3cd6479914de8e2dc0bc820a9d75ddfaff)
+++ uspace/lib/c/generic/async.c	(revision 503ffceaab0f4c54907677d3399c3ed1363e507f)
@@ -1341,5 +1341,5 @@
 	
 	/* Kernel notification */
-	if ((callid & IPC_CALLID_NOTIFICATION)) {
+	if (call->flags & IPC_CALLID_NOTIFICATION) {
 		fibril_t *fibril = (fibril_t *) __tcb_get()->fibril_data;
 		unsigned oldsw = fibril->switches;
@@ -1495,5 +1495,5 @@
 		}
 		
-		if (callid & IPC_CALLID_ANSWERED)
+		if (call.flags & IPC_CALLID_ANSWERED)
 			continue;
 		
Index: uspace/lib/c/generic/ipc.c
===================================================================
--- uspace/lib/c/generic/ipc.c	(revision b1f36e3cd6479914de8e2dc0bc820a9d75ddfaff)
+++ uspace/lib/c/generic/ipc.c	(revision 503ffceaab0f4c54907677d3399c3ed1363e507f)
@@ -259,8 +259,5 @@
  * @param flags Flags passed to SYS_IPC_WAIT (blocking, nonblocking).
  *
- * @return Hash of the call. Note that certain bits have special
- *         meaning: IPC_CALLID_ANSWERED is set in an answer
- *         and IPC_CALLID_NOTIFICATION is used for notifications.
- *
+ * @return Hash of the call.
  */
 ipc_callid_t ipc_wait_cycle(ipc_call_t *call, sysarg_t usec,
@@ -271,5 +268,5 @@
 	
 	/* Handle received answers */
-	if (callid & IPC_CALLID_ANSWERED)
+	if (callid && (call->flags & IPC_CALLID_ANSWERED))
 		handle_answer(callid, call);
 	
@@ -301,5 +298,5 @@
 	do {
 		callid = ipc_wait_cycle(call, usec, SYNCH_FLAGS_NONE);
-	} while (callid & IPC_CALLID_ANSWERED);
+	} while (callid && (call->flags & IPC_CALLID_ANSWERED));
 	
 	return callid;
@@ -322,5 +319,5 @@
 		callid = ipc_wait_cycle(call, SYNCH_NO_TIMEOUT,
 		    SYNCH_FLAGS_NON_BLOCKING);
-	} while (callid & IPC_CALLID_ANSWERED);
+	} while (callid && (call->flags & IPC_CALLID_ANSWERED));
 	
 	return callid;
Index: uspace/lib/c/include/ipc/common.h
===================================================================
--- uspace/lib/c/include/ipc/common.h	(revision b1f36e3cd6479914de8e2dc0bc820a9d75ddfaff)
+++ uspace/lib/c/include/ipc/common.h	(revision 503ffceaab0f4c54907677d3399c3ed1363e507f)
@@ -49,4 +49,5 @@
 	task_id_t in_task_id;
 	sysarg_t in_phone_hash;
+	unsigned flags;
 	struct async_call *label;
 } ipc_call_t;
