diff --git a/src/box/box.cc b/src/box/box.cc
index 7fa92e0af027a3486fd0dee2c2de8cc227283e44..2371de06a21e51ad775f5a83f266b73c555ff723 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -52,13 +52,11 @@
 #include "cfg.h"
 #include "iobuf.h"
 
-static void process_ro(struct port *port, struct request *request);
-static void process_rw(struct port *port, struct request *request);
+static void process_ro(struct request *request, struct port *port);
 box_process_func box_process = process_ro;
 
 struct recovery_state *recovery;
 
-int stat_base;
 int snapshot_pid = 0; /* snapshot processes pid */
 
 static void
@@ -74,24 +72,11 @@ struct request_replace_body {
 } __attribute__((packed));
 
 static void
-process_rw(struct port *port, struct request *request)
-{
-	try {
-		stat_collect(stat_base, request->type, 1);
-		request_execute(request, port);
-		port_eof(port);
-	} catch (Exception *e) {
-		txn_rollback_stmt();
-		throw;
-	}
-}
-
-static void
-process_ro(struct port *port, struct request *request)
+process_ro(struct request *request, struct port *port)
 {
 	if (!iproto_type_is_select(request->type))
 		tnt_raise(LoggedError, ER_READONLY);
-	return process_rw(port, request);
+	return process_rw(request, port);
 }
 
 void
@@ -118,7 +103,7 @@ recover_row(struct recovery_state *r, void *param, struct xrow_header *row)
 	request_decode(&request, (const char *) row->body[0].iov_base,
 		row->body[0].iov_len);
 	request.header = row;
-	process_rw(&null_port, &request);
+	process_rw(&request, &null_port);
 }
 
 /* {{{ configuration bindings */
@@ -299,7 +284,7 @@ boxk(enum iproto_type type, uint32_t space_id, const char *format, ...)
 	assert(data <= buf + sizeof(buf));
 	req.tuple = buf;
 	req.tuple_end = data;
-	process_rw(&null_port, &req);
+	process_rw(&req, &null_port);
 }
 
 /**
diff --git a/src/box/box.h b/src/box/box.h
index bba7df512f8ba9b84d6fdd22fdb1c336e49a9255..4729c99d10ed36f7f5d13affaf51c53b5431b102 100644
--- a/src/box/box.h
+++ b/src/box/box.h
@@ -63,7 +63,7 @@ box_atfork();
  * change when entering/leaving read-only mode
  * (master->slave propagation).
  */
-typedef void (*box_process_func)(struct port *port, struct request *request);
+typedef void (*box_process_func)(struct request *request, struct port *port);
 /** For read-write operations. */
 extern box_process_func box_process;
 
@@ -127,8 +127,6 @@ void box_set_too_long_threshold(double threshold);
 
 extern struct recovery_state *recovery;
 
-extern int stat_base;
-
 #if defined(__cplusplus)
 }
 #endif /* defined(__cplusplus) */
diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index 57084d6853b4af512f808a4bbc606d63be5bca54..814ad86818fe5fb7feafd740cf12a17739138947 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -663,7 +663,7 @@ iproto_process(struct iproto_request *ireq)
 		case IPROTO_DELETE:
 			struct iproto_port port;
 			iproto_port_init(&port, out, ireq->header.sync);
-			box_process((struct port *) &port, &ireq->request);
+			box_process(&ireq->request, (struct port *) &port);
 			break;
 		case IPROTO_CALL:
 			stat_collect(stat_base, ireq->request.type, 1);
diff --git a/src/box/lua/call.cc b/src/box/lua/call.cc
index 7b1da1085f7cc7e45f495808bffaeeae062e2af8..eb661774c1ad8e9c71f2948c7cf36df5dc6cac72 100644
--- a/src/box/lua/call.cc
+++ b/src/box/lua/call.cc
@@ -183,7 +183,7 @@ lbox_process(lua_State *L)
 	struct request request;
 	request_create(&request, op);
 	request_decode(&request, req, sz);
-	box_process(port_lua, &request);
+	box_process(&request, port_lua);
 
 	return 1;
 }
@@ -266,7 +266,7 @@ boxffi_select(struct port *port, uint32_t space_id, uint32_t index_id,
 	request.key_end = key_end;
 
 	try {
-		box_process(port, &request);
+		box_process(&request, port);
 		return 0;
 	} catch (Exception *e) {
 		/* will be hanled by box.error() in Lua */
@@ -284,7 +284,7 @@ lbox_insert(lua_State *L)
 	struct port_lua port;
 	lbox_request_create(&request, L, IPROTO_INSERT, -1, 2);
 	port_lua_create(&port, L);
-	box_process((struct port *) &port, &request);
+	box_process(&request, (struct port *) &port);
 	return lua_gettop(L) - 2;
 }
 
@@ -298,7 +298,7 @@ lbox_replace(lua_State *L)
 	struct port_lua port;
 	lbox_request_create(&request, L, IPROTO_REPLACE, -1, 2);
 	port_lua_create(&port, L);
-	box_process((struct port *) &port, &request);
+	box_process(&request, (struct port *) &port);
 	return lua_gettop(L) - 2;
 }
 
@@ -314,7 +314,7 @@ lbox_update(lua_State *L)
 	request.field_base = 1; /* field ids are one-indexed */
 	port_lua_create(&port, L);
 	/* Ignore index_id for now */
-	box_process((struct port *) &port, &request);
+	box_process(&request, (struct port *) &port);
 	return lua_gettop(L) - 4;
 }
 
@@ -329,7 +329,7 @@ lbox_delete(lua_State *L)
 	lbox_request_create(&request, L, IPROTO_DELETE, 3, -1);
 	port_lua_create(&port, L);
 	/* Ignore index_id for now */
-	box_process((struct port *) &port, &request);
+	box_process(&request, (struct port *) &port);
 	return lua_gettop(L) - 3;
 }
 
diff --git a/src/box/request.cc b/src/box/request.cc
index c8fc74aea53d2b9a15347875d0816bdcd12f1065..8e1cb396fdf597aa1d6271f3e29aa47253065a41 100644
--- a/src/box/request.cc
+++ b/src/box/request.cc
@@ -40,6 +40,9 @@
 #include <scoped_guard.h>
 #include "user_def.h"
 #include "iproto_constants.h"
+#include "stat.h"
+
+int stat_base;
 
 enum dup_replace_mode
 dup_replace_mode(uint32_t op)
@@ -171,17 +174,23 @@ request_create(struct request *request, uint32_t type)
 typedef void (*request_execute_f)(struct request *, struct port *);
 
 void
-request_execute(struct request *request, struct port *port)
+process_rw(struct request *request, struct port *port)
 {
 	assert(iproto_type_is_dml(request->type));
 	static const request_execute_f execute_map[] = {
 		NULL, execute_select, execute_replace, execute_replace,
 		execute_update, execute_delete
 	};
-
 	request_execute_f fun = execute_map[request->type];
 	assert(fun != NULL);
-	fun(request, port);
+	stat_collect(stat_base, request->type, 1);
+	try {
+		fun(request, port);
+		port_eof(port);
+	} catch (Exception *e) {
+		txn_rollback_stmt();
+		throw;
+	}
 }
 
 void
diff --git a/src/box/request.h b/src/box/request.h
index eed53bcb205c2aeadf752689e3a56524be9d0fde..b63f3dd74da04c797e85f2153dd55d09c1fcaab3 100644
--- a/src/box/request.h
+++ b/src/box/request.h
@@ -33,7 +33,7 @@
 
 struct txn;
 struct port;
-
+extern int stat_base;
 
 struct request
 {
@@ -66,7 +66,7 @@ void
 request_create(struct request *request, uint32_t code);
 
 void
-request_execute(struct request *request, struct port *port);
+process_rw(struct request *request, struct port *port);
 
 void
 request_decode(struct request *request, const char *data, uint32_t len);