Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 0a981e3d27256fe3be6edc65ac0c3c3f0e696ffa)
+++ uspace/lib/c/generic/async.c	(revision f570cdfc2c9877b22611b228e97f7e7201d6e74b)
@@ -1674,5 +1674,5 @@
 	
 	ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4, msg,
-	    reply_received, true);
+	    reply_received);
 	
 	return (aid_t) msg;
@@ -1712,5 +1712,5 @@
 	
 	ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4, arg5,
-	    msg, reply_received, true);
+	    msg, reply_received);
 	
 	return (aid_t) msg;
@@ -2001,5 +2001,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_0(exch->phone, imethod, NULL, NULL, true);
+		ipc_call_async_0(exch->phone, imethod, NULL, NULL);
 }
 
@@ -2007,5 +2007,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_1(exch->phone, imethod, arg1, NULL, NULL, true);
+		ipc_call_async_1(exch->phone, imethod, arg1, NULL, NULL);
 }
 
@@ -2014,6 +2014,5 @@
 {
 	if (exch != NULL)
-		ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL, NULL,
-		    true);
+		ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL, NULL);
 }
 
@@ -2023,5 +2022,5 @@
 	if (exch != NULL)
 		ipc_call_async_3(exch->phone, imethod, arg1, arg2, arg3, NULL,
-		    NULL, true);
+		    NULL);
 }
 
@@ -2031,5 +2030,5 @@
 	if (exch != NULL)
 		ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4,
-		    NULL, NULL, true);
+		    NULL, NULL);
 }
 
@@ -2039,5 +2038,5 @@
 	if (exch != NULL)
 		ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4,
-		    arg5, NULL, NULL, true);
+		    arg5, NULL, NULL);
 }
 
@@ -2162,5 +2161,5 @@
 	
 	ipc_call_async_0(exch->phone, IPC_M_CLONE_ESTABLISH, msg,
-	    reply_received, true);
+	    reply_received);
 	
 	sysarg_t rc;
@@ -2211,5 +2210,5 @@
 	
 	ipc_call_async_4(phone, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, arg4,
-	    msg, reply_received, true);
+	    msg, reply_received);
 	
 	sysarg_t rc;
Index: uspace/lib/c/generic/ipc.c
===================================================================
--- uspace/lib/c/generic/ipc.c	(revision 0a981e3d27256fe3be6edc65ac0c3c3f0e696ffa)
+++ uspace/lib/c/generic/ipc.c	(revision f570cdfc2c9877b22611b228e97f7e7201d6e74b)
@@ -127,10 +127,7 @@
  * @param phoneid     Phone handle through which the call was made.
  * @param call        Structure returned by ipc_prepare_async().
- * @param can_preempt If true, the current fibril can be preempted
- *                    in this call.
- *
  */
 static inline void ipc_finish_async(ipc_callid_t callid, int phoneid,
-    async_call_t *call, bool can_preempt)
+    async_call_t *call)
 {
 	if (!call) {
@@ -159,12 +156,7 @@
 		list_append(&call->list, &queued_calls);
 		
-		if (can_preempt) {
-			call->fid = fibril_get_id();
-			fibril_switch(FIBRIL_TO_MANAGER);
-			/* Async futex unlocked by previous call */
-		} else {
-			call->fid = 0;
-			futex_up(&async_futex);
-		}
+		call->fid = fibril_get_id();
+		fibril_switch(FIBRIL_TO_MANAGER);
+		/* Async futex unlocked by previous call */
 		
 		return;
@@ -197,12 +189,8 @@
  * @param private     Argument to be passed to the answer/error callback.
  * @param callback    Answer or error callback.
- * @param can_preempt If true, the current fibril will be preempted in
- *                    case the kernel temporarily refuses to accept more
- *                    asynchronous calls.
- *
  */
 void ipc_call_async_fast(int phoneid, sysarg_t imethod, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, void *private,
-    ipc_async_callback_t callback, bool can_preempt)
+    ipc_async_callback_t callback)
 {
 	async_call_t *call = NULL;
@@ -246,5 +234,5 @@
 	}
 	
-	ipc_finish_async(callid, phoneid, call, can_preempt);
+	ipc_finish_async(callid, phoneid, call);
 }
 
@@ -266,12 +254,8 @@
  * @param private     Argument to be passed to the answer/error callback.
  * @param callback    Answer or error callback.
- * @param can_preempt If true, the current fibril will be preempted in
- *                    case the kernel temporarily refuses to accept more
- *                    asynchronous calls.
- *
  */
 void ipc_call_async_slow(int phoneid, sysarg_t imethod, sysarg_t arg1,
     sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, void *private,
-    ipc_async_callback_t callback, bool can_preempt)
+    ipc_async_callback_t callback)
 {
 	async_call_t *call = ipc_prepare_async(private, callback);
@@ -295,5 +279,5 @@
 	    ipc_call_async_internal(phoneid, &call->u.msg.data);
 	
-	ipc_finish_async(callid, phoneid, call, can_preempt);
+	ipc_finish_async(callid, phoneid, call);
 }
 
@@ -375,6 +359,6 @@
 		futex_up(&async_futex);
 		
-		if (call->fid)
-			fibril_add_ready(call->fid);
+		assert(call->fid);
+		fibril_add_ready(call->fid);
 		
 		if (callid == (ipc_callid_t) IPC_CALLRET_FATAL) {
Index: uspace/lib/c/include/ipc/ipc.h
===================================================================
--- uspace/lib/c/include/ipc/ipc.h	(revision 0a981e3d27256fe3be6edc65ac0c3c3f0e696ffa)
+++ uspace/lib/c/include/ipc/ipc.h	(revision f570cdfc2c9877b22611b228e97f7e7201d6e74b)
@@ -89,32 +89,29 @@
  */
 
-#define ipc_call_async_0(phoneid, method, private, callback, can_preempt) \
+#define ipc_call_async_0(phoneid, method, private, callback) \
 	ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \
-	    (callback), (can_preempt))
-#define ipc_call_async_1(phoneid, method, arg1, private, callback, \
-    can_preempt) \
+	    (callback))
+#define ipc_call_async_1(phoneid, method, arg1, private, callback) \
 	ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \
-	    (callback), (can_preempt))
-#define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback, \
-    can_preempt) \
+	    (callback))
+#define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback) \
 	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), 0, 0, \
-	    (private), (callback), (can_preempt))
-#define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback, \
-    can_preempt) \
+	    (private), (callback))
+#define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback) \
 	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \
-	    (private), (callback), (can_preempt))
+	    (private), (callback))
 #define ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, private, \
-    callback, can_preempt) \
+    callback) \
 	ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), \
-	    (arg4), (private), (callback), (can_preempt))
+	    (arg4), (private), (callback))
 #define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \
-    private, callback, can_preempt) \
+    private, callback) \
 	ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \
-	    (arg4), (arg5), (private), (callback), (can_preempt))
+	    (arg4), (arg5), (private), (callback))
 
 extern void ipc_call_async_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
-    sysarg_t, void *, ipc_async_callback_t, bool);
+    sysarg_t, void *, ipc_async_callback_t);
 extern void ipc_call_async_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
-    sysarg_t, sysarg_t, void *, ipc_async_callback_t, bool);
+    sysarg_t, sysarg_t, void *, ipc_async_callback_t);
 
 extern int ipc_hangup(int);
