diff --git a/src/box/engine.cc b/src/box/engine.cc
index 88d3aaabaec471fa2000c21f08d7556142758f95..e2fafcd7d054adfd83f3a14c67c157a5dfcec509 100644
--- a/src/box/engine.cc
+++ b/src/box/engine.cc
@@ -96,18 +96,6 @@ engine_find(const char *name)
 	tnt_raise(LoggedError, ER_NO_SUCH_ENGINE, name);
 }
 
-EngineFactory *
-engine_find_id(uint32_t id)
-{
-	EngineFactory *e;
-	rlist_foreach_entry(e, &engines, link) {
-		if (e->id == id)
-			return e;
-	}
-	assert(0);
-	return NULL;
-}
-
 /** Call a visitor function on every registered engine. */
 void engine_foreach(void (*func)(EngineFactory *engine, void *udata),
                     void *udata)
diff --git a/src/box/engine.h b/src/box/engine.h
index affabcd79660be46c3017f48d1ca8eadd1a16c38..a8a0773eaa459f122a0cb835ba70b3403866071a 100644
--- a/src/box/engine.h
+++ b/src/box/engine.h
@@ -179,9 +179,6 @@ void engine_foreach(void (*func)(EngineFactory *engine, void *udata),
 /** Find engine factory by name. */
 EngineFactory *engine_find(const char *name);
 
-/** Find engine factory by id. */
-EngineFactory *engine_find_id(uint32_t);
-
 /** Shutdown all engine factories. */
 void engine_shutdown();
 
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index 2361194ad5765fd5b72c0b0a14b6b50ad8c4e3c2..80e7a2aa56f62f8ebce7b164ee56af467b2df2fc 100644
--- a/src/box/lua/load_cfg.lua
+++ b/src/box/lua/load_cfg.lua
@@ -25,12 +25,12 @@ local wrapper_cfg = {
 }
 
 local default_sophia_cfg = {
-	memory_limit   = 0,
-	threads        = 5,
-	node_size      = 134217728,
-	node_page_size = 131072,
-	node_branch_wm = 10485760,
-	node_merge_wm  = 1
+    memory_limit   = 0,
+    threads        = 5,
+    node_size      = 134217728,
+    node_page_size = 131072,
+    node_branch_wm = 10485760,
+    node_merge_wm  = 1
 }
 
 -- all available options
@@ -43,7 +43,7 @@ local default_cfg = {
     snap_dir            = ".",
     wal_dir             = ".",
     sophia_dir          = './sophia',
-    sophia_options      = default_sophia_cfg,
+    sophia              = default_sophia_cfg,
     logger              = nil,
     logger_nonblock     = true,
     log_level           = 5,
@@ -79,7 +79,7 @@ local template = {
     snap_dir            = 'string',
     wal_dir             = 'string',
     sophia_dir          = 'string',
-    sophia_options      = 'table',
+    sophia              = 'table',
     logger              = 'string',
     logger_nonblock     = 'boolean',
     log_level           = 'number',
diff --git a/src/box/request.cc b/src/box/request.cc
index 5cf0bb9ed49c6c9e6129762b9c133ac81e015eaf..008a848cc6c9cd6c00768ec63ea238ab406516b6 100644
--- a/src/box/request.cc
+++ b/src/box/request.cc
@@ -51,9 +51,8 @@ dup_replace_mode(uint32_t op)
 static void
 execute_replace(struct request *request, struct port *port)
 {
-	struct txn *txn = txn_begin_stmt(request);
 	struct space *space = space_cache_find(request->space_id);
-	txn_engine_begin_stmt(txn, space);
+	struct txn *txn = txn_begin_stmt(request, space);
 
 	access_check_space(space, PRIV_W);
 	struct tuple *new_tuple = tuple_new(space->format, request->tuple,
@@ -69,9 +68,8 @@ execute_replace(struct request *request, struct port *port)
 static void
 execute_update(struct request *request, struct port *port)
 {
-	struct txn *txn = txn_begin_stmt(request);
 	struct space *space = space_cache_find(request->space_id);
-	txn_engine_begin_stmt(txn, space);
+	struct txn *txn = txn_begin_stmt(request, space);
 
 	access_check_space(space, PRIV_W);
 	Index *pk = index_find(space, 0);
@@ -102,9 +100,8 @@ execute_update(struct request *request, struct port *port)
 static void
 execute_delete(struct request *request, struct port *port)
 {
-	struct txn *txn = txn_begin_stmt(request);
 	struct space *space = space_cache_find(request->space_id);
-	txn_engine_begin_stmt(txn, space);
+	struct txn *txn = txn_begin_stmt(request, space);
 
 	access_check_space(space, PRIV_W);
 
diff --git a/src/box/sophia_index.cc b/src/box/sophia_index.cc
index 5e022e34da932ba939affe866b9c76a33536b672..c0a401590b77ad58df5b3bd6cd6d6379ceeab359 100644
--- a/src/box/sophia_index.cc
+++ b/src/box/sophia_index.cc
@@ -151,27 +151,27 @@ sophia_configure(struct space *space, struct key_def *key_def)
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".threads",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.threads"));
+	sp_set(c, name, cfg_gets("sophia.threads"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".memory_limit",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.memory_limit"));
+	sp_set(c, name, cfg_gets("sophia.memory_limit"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_size",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.node_size"));
+	sp_set(c, name, cfg_gets("sophia.node_size"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_page_size",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.node_page_size"));
+	sp_set(c, name, cfg_gets("sophia.node_page_size"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_branch_wm",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.node_branch_wm"));
+	sp_set(c, name, cfg_gets("sophia.node_branch_wm"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_merge_wm",
 	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia_options.node_merge_wm"));
+	sp_set(c, name, cfg_gets("sophia.node_merge_wm"));
 
 	snprintf(name, sizeof(name), "db.%" PRIu32 ".commit_lsn",
 	         key_def->space_id);
diff --git a/src/box/txn.cc b/src/box/txn.cc
index 25ade4a04c4b25a8e595c2d75495e10e9723ef63..4124db0e2b71b8cb3a49d481b7a7538d900c7cda 100644
--- a/src/box/txn.cc
+++ b/src/box/txn.cc
@@ -145,23 +145,11 @@ txn_begin(bool autocommit)
 		rlist_nil, txn_on_yield_or_stop, NULL, NULL
 	};
 	txn->autocommit = autocommit;
-	txn->engine = 0;
 	fiber_set_txn(fiber(), txn);
 	return txn;
 }
 
-struct txn *
-txn_begin_stmt(struct request *request)
-{
-	struct txn *txn = in_txn();
-	if (txn == NULL)
-		txn = txn_begin(true);
-	struct txn_stmt *stmt = txn_stmt_new(txn);
-	txn_add_redo(stmt, request);
-	return txn;
-}
-
-void
+static void
 txn_engine_begin_stmt(struct txn *txn, struct space *space)
 {
 	assert(txn->n_stmts >= 1);
@@ -174,9 +162,10 @@ txn_engine_begin_stmt(struct txn *txn, struct space *space)
 	 */
 	EngineFactory *factory = space->engine->factory;
 	if (txn->n_stmts == 1) {
+		/* First statement. */
 		txn->engine = factory;
 		if (txn->autocommit == false) {
-			if (! engine_transactional(txn->engine->flags))
+			if (! engine_transactional(factory->flags))
 				tnt_raise(ClientError, ER_UNSUPPORTED,
 				          space->def.engine_name, "transactions");
 		}
@@ -188,6 +177,18 @@ txn_engine_begin_stmt(struct txn *txn, struct space *space)
 	factory->begin_stmt(txn, space);
 }
 
+struct txn *
+txn_begin_stmt(struct request *request, struct space *space)
+{
+	struct txn *txn = in_txn();
+	if (txn == NULL)
+		txn = txn_begin(true);
+	struct txn_stmt *stmt = txn_stmt_new(txn);
+	txn_add_redo(stmt, request);
+	txn_engine_begin_stmt(txn, space);
+	return txn;
+}
+
 void
 txn_commit_stmt(struct txn *txn, struct port *port)
 {
@@ -260,7 +261,7 @@ txn_finish(struct txn *txn)
  * Void all effects of the statement, but
  * keep it in the list - to maintain
  * limit on the number of statements in a
- * trasnaction.
+ * transaction.
  */
 void
 txn_rollback_stmt()
diff --git a/src/box/txn.h b/src/box/txn.h
index 6477374ac8f468575308879473aa20e3e9b7d6b1..7786c4bc32f1d30649b01f8071fbd5249180bdf8 100644
--- a/src/box/txn.h
+++ b/src/box/txn.h
@@ -85,10 +85,7 @@ in_txn()
  * start a new transaction with autocommit = true.
  */
 struct txn *
-txn_begin_stmt(struct request *request);
-
-void
-txn_engine_begin_stmt(struct txn *txn, struct space *space);
+txn_begin_stmt(struct request *request, struct space *space);
 
 /**
  * End a statement. In autocommit mode, end
diff --git a/test/app/float_value.result b/test/app/float_value.result
index c3cfdb6c80f7d36870ddc5f0a736d81db0f93c16..1fb8840bcdb58351ebd29952c2f9e06e0a3b9129 100644
--- a/test/app/float_value.result
+++ b/test/app/float_value.result
@@ -5,21 +5,21 @@ box.cfg
 4	rows_per_wal:50
 5	background:false
 6	logger:tarantool.log
-7	slab_alloc_arena:0.1
-8	log_level:5
-9	listen:3313
-10	logger_nonblock:true
-11	snap_dir:.
-12	coredump:false
-13	sophia_dir:./sophia
-14	wal_mode:write
+7	readahead:16320
+8	listen:3313
+9	logger_nonblock:true
+10	snap_dir:.
+11	coredump:false
+12	sophia_dir:./sophia
+13	wal_mode:write
+14	snapshot_period:0
 15	panic_on_snap_error:true
 16	panic_on_wal_error:false
-17	too_long_threshold:0.01
-18	slab_alloc_minimal:64
-19	wal_dir:.
-20	readahead:16320
-21	snapshot_period:0
+17	log_level:5
+18	wal_dir:.
+19	slab_alloc_minimal:64
+20	too_long_threshold:0.01
+21	slab_alloc_arena:0.1
 22	wal_dir_rescan_delay:0.1
 ------------------------------------------------------
 Check that too_long_threshold = 0.01
diff --git a/test/app/init_script.result b/test/app/init_script.result
index 321c3db21f233e79288fe4232befc003a183ddfa..abe6766933c451135cbdc287a94c3e7955be1c18 100644
--- a/test/app/init_script.result
+++ b/test/app/init_script.result
@@ -6,23 +6,23 @@ box.cfg
 1	snapshot_count:6
 2	pid_file:box.pid
 3	slab_alloc_factor:2
-4	rows_per_wal:500000
+4	slab_alloc_minimal:64
 5	background:false
 6	logger:tarantool.log
-7	slab_alloc_arena:0.1
-8	log_level:5
-9	listen:3314
-10	logger_nonblock:true
-11	snap_dir:.
-12	coredump:false
-13	sophia_dir:./sophia
-14	wal_mode:write
+7	readahead:16320
+8	listen:3314
+9	logger_nonblock:true
+10	snap_dir:.
+11	coredump:false
+12	sophia_dir:./sophia
+13	wal_mode:write
+14	slab_alloc_arena:0.1
 15	panic_on_snap_error:true
 16	panic_on_wal_error:false
-17	too_long_threshold:0.5
-18	slab_alloc_minimal:64
+17	log_level:5
+18	rows_per_wal:500000
 19	wal_dir:.
-20	readahead:16320
+20	too_long_threshold:0.5
 21	snapshot_period:0
 22	wal_dir_rescan_delay:0.1
 --
diff --git a/test/box/admin.result b/test/box/admin.result
index 3208964bc6e622906ab1a035d68f5edf9217972b..a4a7d2ab0d204cf27d77d2ea50432159d2d86340 100644
--- a/test/box/admin.result
+++ b/test/box/admin.result
@@ -21,23 +21,30 @@ box.cfg
 - snapshot_count: 6
   too_long_threshold: 0.5
   slab_alloc_factor: 2
-  rows_per_wal: 50
+  slab_alloc_minimal: 64
   background: false
-  slab_alloc_arena: 0.1
-  log_level: 5
+  readahead: 16320
+  sophia:
+    node_page_size: 131072
+    memory_limit: 0
+    node_merge_wm: 1
+    threads: 5
+    node_size: 134217728
+    node_branch_wm: 10485760
   listen: <uri>
   logger_nonblock: true
   snap_dir: .
   coredump: false
   sophia_dir: ./sophia
   wal_mode: write
+  snapshot_period: 0
   panic_on_snap_error: true
   panic_on_wal_error: false
-  pid_file: tarantool.pid
-  slab_alloc_minimal: 64
+  log_level: 5
   wal_dir: .
-  readahead: 16320
-  snapshot_period: 0
+  pid_file: tarantool.pid
+  rows_per_wal: 50
+  slab_alloc_arena: 0.1
   wal_dir_rescan_delay: 0.1
 ...
 space:insert{1, 'tuple'}
diff --git a/test/box/cfg.result b/test/box/cfg.result
index ce03624ce7eb195407970d5ee360c6645df88888..ed75b2fb4395062ce21fd58f7701974a6c965afe 100644
--- a/test/box/cfg.result
+++ b/test/box/cfg.result
@@ -2,7 +2,7 @@
 --# push filter 'admin: .*' to 'admin: <uri>'
 box.cfg.nosuchoption = 1
 ---
-- error: '[string "-- load_cfg.lua - internal file..."]:202: Attempt to modify a read-only
+- error: '[string "-- load_cfg.lua - internal file..."]:213: Attempt to modify a read-only
     table'
 ...
 t = {} for k,v in pairs(box.cfg) do if type(v) ~= 'table' and type(v) ~= 'function' then table.insert(t, k..': '..tostring(v)) end end
@@ -13,23 +13,23 @@ t
 - - 'snapshot_count: 6'
   - 'too_long_threshold: 0.5'
   - 'slab_alloc_factor: 2'
-  - 'rows_per_wal: 50'
+  - 'slab_alloc_minimal: 64'
   - 'background: false'
-  - 'slab_alloc_arena: 0.1'
-  - 'log_level: 5'
+  - 'readahead: 16320'
   - 'primary: <uri>
   - 'logger_nonblock: true'
   - 'snap_dir: .'
   - 'coredump: false'
   - 'sophia_dir: ./sophia'
   - 'wal_mode: write'
+  - 'snapshot_period: 0'
   - 'panic_on_snap_error: true'
   - 'panic_on_wal_error: false'
-  - 'pid_file: tarantool.pid'
-  - 'slab_alloc_minimal: 64'
+  - 'log_level: 5'
   - 'wal_dir: .'
-  - 'readahead: 16320'
-  - 'snapshot_period: 0'
+  - 'pid_file: tarantool.pid'
+  - 'rows_per_wal: 50'
+  - 'slab_alloc_arena: 0.1'
   - 'wal_dir_rescan_delay: 0.1'
 ...
 -- must be read-only
@@ -44,45 +44,45 @@ t
 - - 'snapshot_count: 6'
   - 'too_long_threshold: 0.5'
   - 'slab_alloc_factor: 2'
-  - 'rows_per_wal: 50'
+  - 'slab_alloc_minimal: 64'
   - 'background: false'
-  - 'slab_alloc_arena: 0.1'
-  - 'log_level: 5'
+  - 'readahead: 16320'
   - 'primary: <uri>
   - 'logger_nonblock: true'
   - 'snap_dir: .'
   - 'coredump: false'
   - 'sophia_dir: ./sophia'
   - 'wal_mode: write'
+  - 'snapshot_period: 0'
   - 'panic_on_snap_error: true'
   - 'panic_on_wal_error: false'
-  - 'pid_file: tarantool.pid'
-  - 'slab_alloc_minimal: 64'
+  - 'log_level: 5'
   - 'wal_dir: .'
-  - 'readahead: 16320'
-  - 'snapshot_period: 0'
+  - 'pid_file: tarantool.pid'
+  - 'rows_per_wal: 50'
+  - 'slab_alloc_arena: 0.1'
   - 'wal_dir_rescan_delay: 0.1'
 ...
 -- check that cfg with unexpected parameter fails.
 box.cfg{sherlock = 'holmes'}
 ---
-- error: '[string "-- load_cfg.lua - internal file..."]:122: Error: cfg parameter
+- error: '[string "-- load_cfg.lua - internal file..."]:133: Error: cfg parameter
     ''sherlock'' is unexpected'
 ...
 -- check that cfg with unexpected type of parameter failes
 box.cfg{listen = {}}
 ---
-- error: '[string "-- load_cfg.lua - internal file..."]:137: Error: cfg parameter
+- error: '[string "-- load_cfg.lua - internal file..."]:148: Error: cfg parameter
     ''listen'' should be one of types: string, number'
 ...
 box.cfg{wal_dir = 0}
 ---
-- error: '[string "-- load_cfg.lua - internal file..."]:131: Error: cfg parameter
+- error: '[string "-- load_cfg.lua - internal file..."]:142: Error: cfg parameter
     ''wal_dir'' should be of type string'
 ...
 box.cfg{coredump = 'true'}
 ---
-- error: '[string "-- load_cfg.lua - internal file..."]:131: Error: cfg parameter
+- error: '[string "-- load_cfg.lua - internal file..."]:142: Error: cfg parameter
     ''coredump'' should be of type boolean'
 ...
 --# clear filter
diff --git a/test/box/info.result b/test/box/info.result
index 1d16a79083f05db0f50d3dfee0b0caf5509d3029..9225000bd21894e1cdf27e628e9dad45099817f5 100644
--- a/test/box/info.result
+++ b/test/box/info.result
@@ -82,6 +82,7 @@ t
   - recovery_last_update
   - server
   - snapshot_pid
+  - sophia
   - status
   - uptime
   - vclock
diff --git a/test/sophia/box.lua b/test/sophia/box.lua
index 93877d95414d7ad7ec0b524cbc00b33e7065c1ba..1b615c7c7f4a616422e76a75e7f5b5c037b0d7d3 100644
--- a/test/sophia/box.lua
+++ b/test/sophia/box.lua
@@ -1,7 +1,7 @@
 #!/usr/bin/env tarantool
 os = require('os')
 
-local sophia_options = {
+local sophia = {
 	memory_limit   = 0,
 	threads        = 3, -- test case
 	node_size      = 134217728,
@@ -16,7 +16,7 @@ box.cfg{
     pid_file         = "tarantool.pid",
     rows_per_wal     = 50,
     sophia_dir       = "sophia_test",
-    sophia_options   = sophia_options
+    sophia   = sophia
 }
 
 require('console').listen(os.getenv('ADMIN'))
diff --git a/test/sophia/options.result b/test/sophia/options.result
index 5720db35ce711be698cc57d65da7b30cb6963628..17b0b155d32dd000103c5ea31c2b287f594ca6cd 100644
--- a/test/sophia/options.result
+++ b/test/sophia/options.result
@@ -1,7 +1,7 @@
 sophia_rmdir()
 ---
 ...
-box.cfg.sophia_options
+box.cfg.sophia
 ---
 - node_page_size: 131072
   memory_limit: 0
@@ -10,7 +10,7 @@ box.cfg.sophia_options
   node_size: 134217728
   node_branch_wm: 10485760
 ...
-box.cfg.sophia_options.threads = 3
+box.cfg.sophia.threads = 3
 ---
 ...
 sophia_rmdir()
diff --git a/test/sophia/options.test.lua b/test/sophia/options.test.lua
index 91895ca613764da8354c7d7fa81a99a1d317c3a3..b2ee4139094d6098aff706b3d8dcfa1060483ceb 100644
--- a/test/sophia/options.test.lua
+++ b/test/sophia/options.test.lua
@@ -1,7 +1,7 @@
 
 sophia_rmdir()
 
-box.cfg.sophia_options
-box.cfg.sophia_options.threads = 3
+box.cfg.sophia
+box.cfg.sophia.threads = 3
 
 sophia_rmdir()