Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/include/ipc/ipc.h	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -77,7 +77,4 @@
 	waitq_t wq;
 	
-	/** Linkage for the list of task's synchronous answerboxes. */
-	link_t sync_box_link;
-	
 	/** Phones connected to this answerbox. */
 	list_t connected_phones;
@@ -147,5 +144,4 @@
 
 extern int ipc_call(phone_t *, call_t *);
-extern int ipc_call_sync(phone_t *, call_t *);
 extern call_t *ipc_wait_for_call(answerbox_t *, uint32_t, unsigned int);
 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, unsigned int);
Index: kernel/generic/include/ipc/sysipc.h
===================================================================
--- kernel/generic/include/ipc/sysipc.h	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/include/ipc/sysipc.h	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -40,7 +40,4 @@
 #include <typedefs.h>
 
-extern sysarg_t sys_ipc_call_sync_fast(sysarg_t, sysarg_t, sysarg_t,
-    sysarg_t, sysarg_t, ipc_data_t *);
-extern sysarg_t sys_ipc_call_sync_slow(sysarg_t, ipc_data_t *, ipc_data_t *);
 extern sysarg_t sys_ipc_call_async_fast(sysarg_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t);
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/include/proc/task.h	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -94,5 +94,4 @@
 	phone_t phones[IPC_MAX_PHONES];
 	stats_ipc_t ipc_info;   /**< IPC statistics */
-	list_t sync_boxes;      /**< List of synchronous answerboxes. */
 	event_t events[EVENT_TASK_END - EVENT_END];
 	
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/src/ipc/ipc.c	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -120,5 +120,4 @@
 	irq_spinlock_initialize(&box->irq_lock, "ipc.box.irqlock");
 	waitq_initialize(&box->wq);
-	link_initialize(&box->sync_box_link);
 	list_initialize(&box->connected_phones);
 	list_initialize(&box->calls);
@@ -161,47 +160,4 @@
 	phone->state = IPC_PHONE_FREE;
 	atomic_set(&phone->active_calls, 0);
-}
-
-/** Helper function to facilitate synchronous calls.
- *
- * @param phone   Destination kernel phone structure.
- * @param request Call structure with request.
- *
- * @return EOK on success or EINTR if the sleep was interrupted.
- *
- */
-int ipc_call_sync(phone_t *phone, call_t *request)
-{
-	answerbox_t *sync_box = slab_alloc(ipc_answerbox_slab, 0);
-	ipc_answerbox_init(sync_box, TASK);
-	
-	/*
-	 * Put the answerbox on the TASK's list of synchronous answerboxes so
-	 * that it can be cleaned up if the call is interrupted.
-	 */
-	irq_spinlock_lock(&TASK->lock, true);
-	list_append(&sync_box->sync_box_link, &TASK->sync_boxes);
-	irq_spinlock_unlock(&TASK->lock, true);
-	
-	/* We will receive data in a special box. */
-	request->callerbox = sync_box;
-	
-	ipc_call(phone, request);
-	if (!ipc_wait_for_call(sync_box, SYNCH_NO_TIMEOUT,
-	    SYNCH_FLAGS_INTERRUPTIBLE)) {
-		/* The answerbox and the call will be freed by ipc_cleanup(). */
-		return EINTR;
-	}
-	
-	/*
-	 * The answer arrived without interruption so we can remove the
-	 * answerbox from the TASK's list of synchronous answerboxes.
-	 */
-	irq_spinlock_lock(&TASK->lock, true);
-	list_remove(&sync_box->sync_box_link);
-	irq_spinlock_unlock(&TASK->lock, true);
-	
-	slab_free(ipc_answerbox_slab, sync_box);
-	return EOK;
 }
 
@@ -606,18 +562,4 @@
 	ipc_cleanup_call_list(&TASK->answerbox.calls);
 	irq_spinlock_unlock(&TASK->answerbox.lock, true);
-	
-	/* Wait for all answers to interrupted synchronous calls to arrive */
-	ipl_t ipl = interrupts_disable();
-	while (!list_empty(&TASK->sync_boxes)) {
-		answerbox_t *box = list_get_instance(
-		    list_first(&TASK->sync_boxes), answerbox_t, sync_box_link);
-		
-		list_remove(&box->sync_box_link);
-		call_t *call = ipc_wait_for_call(box, SYNCH_NO_TIMEOUT,
-		    SYNCH_FLAGS_NONE);
-		ipc_call_free(call);
-		slab_free(ipc_answerbox_slab, box);
-	}
-	interrupts_restore(ipl);
 	
 	/* Wait for all answers to asynchronous calls to arrive */
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/src/ipc/sysipc.c	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -612,123 +612,4 @@
 		break;
 	}
-	
-	return 0;
-}
-
-/** Make a fast call over IPC, wait for reply and return to user.
- *
- * This function can handle only three arguments of payload, but is faster than
- * the generic function (i.e. sys_ipc_call_sync_slow()).
- *
- * @param phoneid Phone handle for the call.
- * @param imethod Interface and method of the call.
- * @param arg1    Service-defined payload argument.
- * @param arg2    Service-defined payload argument.
- * @param arg3    Service-defined payload argument.
- * @param data    Address of user-space structure where the reply call will
- *                be stored.
- *
- * @return 0 on success.
- * @return ENOENT if there is no such phone handle.
- *
- */
-sysarg_t sys_ipc_call_sync_fast(sysarg_t phoneid, sysarg_t imethod,
-    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_data_t *data)
-{
-	phone_t *phone;
-	if (phone_get(phoneid, &phone) != EOK)
-		return ENOENT;
-	
-	call_t *call = ipc_call_alloc(0);
-	IPC_SET_IMETHOD(call->data, imethod);
-	IPC_SET_ARG1(call->data, arg1);
-	IPC_SET_ARG2(call->data, arg2);
-	IPC_SET_ARG3(call->data, arg3);
-	
-	/*
-	 * To achieve deterministic behavior, zero out arguments that are beyond
-	 * the limits of the fast version.
-	 */
-	IPC_SET_ARG4(call->data, 0);
-	IPC_SET_ARG5(call->data, 0);
-	
-	int res = request_preprocess(call, phone);
-	int rc;
-	
-	if (!res) {
-#ifdef CONFIG_UDEBUG
-		udebug_stoppable_begin();
-#endif
-		rc = ipc_call_sync(phone, call);
-#ifdef CONFIG_UDEBUG
-		udebug_stoppable_end();
-#endif
-		
-		if (rc != EOK) {
-			/* The call will be freed by ipc_cleanup(). */
-			return rc;
-		}
-		
-		process_answer(call);
-	} else
-		IPC_SET_RETVAL(call->data, res);
-	
-	rc = STRUCT_TO_USPACE(&data->args, &call->data.args);
-	ipc_call_free(call);
-	if (rc != 0)
-		return rc;
-	
-	return 0;
-}
-
-/** Make a synchronous IPC call allowing to transmit the entire payload.
- *
- * @param phoneid Phone handle for the call.
- * @param request User-space address of call data with the request.
- * @param reply   User-space address of call data where to store the
- *                answer.
- *
- * @return Zero on success or an error code.
- *
- */
-sysarg_t sys_ipc_call_sync_slow(sysarg_t phoneid, ipc_data_t *request,
-    ipc_data_t *reply)
-{
-	phone_t *phone;
-	if (phone_get(phoneid, &phone) != EOK)
-		return ENOENT;
-	
-	call_t *call = ipc_call_alloc(0);
-	int rc = copy_from_uspace(&call->data.args, &request->args,
-	    sizeof(call->data.args));
-	if (rc != 0) {
-		ipc_call_free(call);
-		return (sysarg_t) rc;
-	}
-	
-	int res = request_preprocess(call, phone);
-	
-	if (!res) {
-#ifdef CONFIG_UDEBUG
-		udebug_stoppable_begin();
-#endif
-		rc = ipc_call_sync(phone, call);
-#ifdef CONFIG_UDEBUG
-		udebug_stoppable_end();
-#endif
-		
-		if (rc != EOK) {
-			/* The call will be freed by ipc_cleanup(). */
-			return rc;
-		}
-		
-		process_answer(call);
-	} else
-		IPC_SET_RETVAL(call->data, res);
-	
-	rc = STRUCT_TO_USPACE(&reply->args, &call->data.args);
-	ipc_call_free(call);
-	if (rc != 0)
-		return rc;
 	
 	return 0;
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/src/proc/task.c	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -156,5 +156,4 @@
 	
 	list_initialize(&task->threads);
-	list_initialize(&task->sync_boxes);
 	
 	ipc_answerbox_init(&task->answerbox, task);
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 1772e6d8daa54fce8e571f38accabed8f8303558)
+++ kernel/generic/src/syscall/syscall.c	(revision c3fe001b5f8a022da41bcea1f44c55176d97ab95)
@@ -151,6 +151,4 @@
 	
 	/* IPC related syscalls. */
-	(syshandler_t) sys_ipc_call_sync_fast,
-	(syshandler_t) sys_ipc_call_sync_slow,
 	(syshandler_t) sys_ipc_call_async_fast,
 	(syshandler_t) sys_ipc_call_async_slow,
