Index: kernel/generic/include/ipc/sysipc_ops.h
===================================================================
--- kernel/generic/include/ipc/sysipc_ops.h	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/include/ipc/sysipc_ops.h	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -37,4 +37,15 @@
 
 #include <ipc/ipc.h>
+
+#define SYSIPC_OP(op, call, ...) \
+	({ \
+		int rc = EOK; \
+		\
+		sysipc_ops_t *ops; \
+		ops = sysipc_ops_get((call)->request_method); \
+		if (ops->op) \
+			rc = ops->op((call), ##__VA_ARGS__); \
+		rc; \
+	})
 
 /**
@@ -95,5 +106,5 @@
 	 * Invoked on:		all forgotten calls
 	 */	
-	void (* request_forget)(call_t *);
+	int (* request_forget)(call_t *);
 
 	/**
@@ -116,5 +127,5 @@
 	 * Invoked on:		all forgotten calls
 	 */
-	void (* answer_cleanup)(call_t *, ipc_data_t *);
+	int (* answer_cleanup)(call_t *, ipc_data_t *);
 
 	/**
@@ -143,7 +154,7 @@
 
 extern int null_request_preprocess(call_t *, phone_t *);
-extern void null_request_forget(call_t *);
+extern int null_request_forget(call_t *);
 extern int null_request_process(call_t *, answerbox_t *);
-extern void null_answer_cleanup(call_t *, ipc_data_t *);
+extern int null_answer_cleanup(call_t *, ipc_data_t *);
 extern int null_answer_preprocess(call_t *, ipc_data_t *);
 extern int null_answer_process(call_t *);
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/ipc.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -513,11 +513,6 @@
 		irq_spinlock_unlock(&box->lock, true);
 
-		if (lst == &box->calls) {
-			sysipc_ops_t *ops;
-
-			ops = sysipc_ops_get(call->request_method);
-			if (ops->request_process)
-				(void) ops->request_process(call, box);
-		}
+		if (lst == &box->calls)
+			SYSIPC_OP(request_process, call, box);
 
 		ipc_data_t old = call->data;
@@ -645,7 +640,5 @@
 	atomic_dec(&call->caller_phone->active_calls);
 
-	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
-	if (ops->request_forget)
-		ops->request_forget(call);
+	SYSIPC_OP(request_forget, call);
 
 	ipc_call_release(call);
@@ -716,7 +709,5 @@
 	ASSERT(call->flags & (IPC_CALL_ANSWERED | IPC_CALL_NOTIF));
 
-	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
-	if (ops->answer_process)
-		ops->answer_process(call);
+	SYSIPC_OP(answer_process, call);
 
 	ipc_call_free(call);
Index: kernel/generic/src/ipc/ops/clnestab.c
===================================================================
--- kernel/generic/src/ipc/ops/clnestab.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/ops/clnestab.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -45,5 +45,5 @@
 }
 
-static void answer_cleanup(call_t *answer, ipc_data_t *olddata)
+static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
 {
 	phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata);
@@ -57,4 +57,6 @@
 	}
 	mutex_unlock(&phone->lock);
+
+	return EOK;
 }
 
Index: kernel/generic/src/ipc/ops/conctmeto.c
===================================================================
--- kernel/generic/src/ipc/ops/conctmeto.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/ops/conctmeto.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -54,7 +54,8 @@
 }
 
-static void request_forget(call_t *call)
+static int request_forget(call_t *call)
 {
 	phone_dealloc(call->priv);
+	return EOK;
 }
 
Index: kernel/generic/src/ipc/ops/concttome.c
===================================================================
--- kernel/generic/src/ipc/ops/concttome.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/ops/concttome.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -49,5 +49,5 @@
 }
 
-static void answer_cleanup(call_t *answer, ipc_data_t *olddata)
+static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
 {
 	int phoneid = (int) IPC_GET_ARG5(*olddata);
@@ -55,4 +55,6 @@
 	if (phoneid >= 0)
 		phone_dealloc(phoneid);
+
+	return EOK;
 }
 
Index: kernel/generic/src/ipc/ops/connclone.c
===================================================================
--- kernel/generic/src/ipc/ops/connclone.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/ops/connclone.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -97,5 +97,5 @@
 }
 
-static void answer_cleanup(call_t *answer, ipc_data_t *olddata)
+static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
 {
 	int phoneid = (int) IPC_GET_ARG1(*olddata);
@@ -116,4 +116,6 @@
 	}
 	mutex_unlock(&phone->lock);
+
+	return EOK;
 }
 
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/sysipc.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -161,5 +161,4 @@
 {
 	int rc = EOK;
-	sysipc_ops_t *ops;
 
 	spinlock_lock(&answer->forget_lock);
@@ -170,8 +169,5 @@
 		spinlock_unlock(&answer->forget_lock);
 
-		ops = sysipc_ops_get(answer->request_method);
-		if (ops->answer_cleanup)
-			ops->answer_cleanup(answer, olddata);
-
+		SYSIPC_OP(answer_cleanup, answer, olddata);
 		return rc;
 	} else {
@@ -213,9 +209,5 @@
 		return rc;
 
-	ops = sysipc_ops_get(answer->request_method);
-	if (ops->answer_preprocess)
-		rc = ops->answer_preprocess(answer, olddata);
-	
-	return rc;
+	return SYSIPC_OP(answer_preprocess, answer, olddata);
 }
 
@@ -230,13 +222,6 @@
 static int request_preprocess(call_t *call, phone_t *phone)
 {
-	int rc = EOK;
-
 	call->request_method = IPC_GET_IMETHOD(call->data);
-
-	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
-	if (ops->request_preprocess)
-		rc = ops->request_preprocess(call, phone);
-	
-	return rc;
+	return SYSIPC_OP(request_preprocess, call, phone);
 }
 
@@ -256,7 +241,5 @@
 		IPC_SET_RETVAL(call->data, EFORWARD);
 	
-	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
-	if (ops->answer_process)
-		(void) ops->answer_process(call);
+	SYSIPC_OP(answer_process, call);
 }
 
@@ -273,11 +256,5 @@
 static int process_request(answerbox_t *box, call_t *call)
 {
-	int rc = EOK;
-
-	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
-	if (ops->request_process)
-		rc = ops->request_process(call, box);
-	
-	return rc;
+	return SYSIPC_OP(request_process, call, box);
 }
 
Index: kernel/generic/src/ipc/sysipc_ops.c
===================================================================
--- kernel/generic/src/ipc/sysipc_ops.c	(revision 716185dfa29c1943ab5649d9b18ed10a7570fbe7)
+++ kernel/generic/src/ipc/sysipc_ops.c	(revision edb0a333c9779b0144668ae2411c63d9f4d4654b)
@@ -76,6 +76,7 @@
 }
 
-void null_request_forget(call_t *call)
+int null_request_forget(call_t *call)
 {
+	return EOK;
 }
 
@@ -85,6 +86,7 @@
 }
 
-void null_answer_cleanup(call_t *call, ipc_data_t *data)
+int null_answer_cleanup(call_t *call, ipc_data_t *data)
 {
+	return EOK;
 }
 
