Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision e8039a869ee74ce2d6837e91b5331acd3a5a541d)
+++ kernel/generic/include/ipc/ipc.h	(revision 32e464341d723c37183606ae150329e6b126d5a9)
@@ -143,5 +143,8 @@
 	/** Data passed from/to userspace. */
 	ipc_data_t data;
-	
+
+	/** Method as it was sent in the request. */
+	sysarg_t request_method;
+
 	/** Buffer for IPC_M_DATA_WRITE and IPC_M_DATA_READ. */
 	uint8_t *buffer;
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision e8039a869ee74ce2d6837e91b5331acd3a5a541d)
+++ kernel/generic/src/ipc/sysipc.c	(revision 32e464341d723c37183606ae150329e6b126d5a9)
@@ -198,5 +198,5 @@
 	
 
-	sysipc_ops_t *ops = sysipc_ops_get(IPC_GET_IMETHOD(*olddata));
+	sysipc_ops_t *ops = sysipc_ops_get(answer->request_method);
 	if (ops->answer_preprocess)
 		rc = ops->answer_preprocess(answer, olddata);
@@ -219,5 +219,7 @@
 	int rc = EOK;
 
-	sysipc_ops_t *ops = sysipc_ops_get(IPC_GET_IMETHOD(call->data));
+	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);
@@ -262,4 +264,8 @@
 		call->buffer = NULL;
 	}
+
+	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
+	if (ops->answer_process)
+		(void) ops->answer_process(call);
 }
 
@@ -278,5 +284,5 @@
 	int rc = EOK;
 
-	sysipc_ops_t *ops = sysipc_ops_get(IPC_GET_IMETHOD(call->data));
+	sysipc_ops_t *ops = sysipc_ops_get(call->request_method);
 	if (ops->request_process)
 		rc = ops->request_process(call, box);
