diff --git a/src/box/engine_sophia.cc b/src/box/engine_sophia.cc
index b69e0d8fedd8a76a5c788a2219202ecfba8dcf08..db4655752c05e9591952ca0d0dfc1922512fc094 100644
--- a/src/box/engine_sophia.cc
+++ b/src/box/engine_sophia.cc
@@ -124,6 +124,16 @@ SophiaFactory::init()
 	env = sp_env();
 	if (env == NULL)
 		panic("failed to create sophia environment");
+	void *c = sp_ctl(env);
+	sp_set(c, "sophia.path", cfg_gets("sophia_dir"));
+	sp_set(c, "scheduler.threads", cfg_gets("sophia.threads"));
+	sp_set(c, "memory.limit", cfg_gets("sophia.memory_limit"));
+	sp_set(c, "compaction.node_size", cfg_gets("sophia.node_size"));
+	sp_set(c, "compaction.node_branch_wm", cfg_gets("sophia.node_branch_wm"));
+	sp_set(c, "compaction.node_compact_wm", cfg_gets("sophia.node_compact_wm"));
+	sp_set(c, "log.enable", "0");
+	sp_set(c, "log.two_phase_recover", "1");
+	sp_set(c, "log.commit_lsn", "1");
 	int rc = sp_open(env);
 	if (rc == -1)
 		sophia_raise(env);
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index 80e7a2aa56f62f8ebce7b164ee56af467b2df2fc..029acb276f773ac486e2f163bc63fbdf0a41aca3 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_compact_wm = 1
 }
 
 -- all available options
diff --git a/src/box/sophia_index.cc b/src/box/sophia_index.cc
index c0a401590b77ad58df5b3bd6cd6d6379ceeab359..8ec12ac13511bfbc2edb63fa6d4a2178e8811e2f 100644
--- a/src/box/sophia_index.cc
+++ b/src/box/sophia_index.cc
@@ -129,66 +129,16 @@ sophia_configure(struct space *space, struct key_def *key_def)
 		(SophiaFactory*)space->engine->factory;
 	void *env = factory->env;
 	void *c = sp_ctl(env);
-
-	const char *sophia_dir = cfg_gets("sophia_dir");
-	mkdir(sophia_dir, 0755);
-
-	const char *on = "1";
-	char path[PATH_MAX];
 	char name[128];
-	snprintf(path, sizeof(path), "%s/%" PRIu32,
-	         sophia_dir, key_def->space_id);
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".dir",
-	         key_def->space_id);
-	sp_set(c, name, path);
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".cmp",
+	snprintf(name, sizeof(name), "db.%" PRIu32, key_def->space_id);
+	sp_set(c, name);
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.cmp",
 	         key_def->space_id);
 	sp_set(c, name, sophia_index_compare);
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".cmp_arg",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.cmp_arg",
 	         key_def->space_id);
 	sp_set(c, name, key_def);
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".threads",
-	         key_def->space_id);
-	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.memory_limit"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_size",
-	         key_def->space_id);
-	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.node_page_size"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_branch_wm",
-	         key_def->space_id);
-	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.node_merge_wm"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".commit_lsn",
-	         key_def->space_id);
-	sp_set(c, name, on);
-
-	engine_recovery *r = &space->engine->recovery;
-	if (r->recover != space_noop) {
-		/* start two-phase recovery for a space:
-		 * a. created after snapshot recovery
-		 * b. created during log recovery
-		*/
-		snprintf(name, sizeof(name), "db.%" PRIu32 ".two_phase_recover",
-				 key_def->space_id);
-		sp_set(c, name, on);
-	}
-	snprintf(name, sizeof(name), "db.%" PRIu32,
-	         key_def->space_id);
+	snprintf(name, sizeof(name), "db.%" PRIu32, key_def->space_id);
 	void *db = sp_get(c, name);
 	if (db == NULL)
 		sophia_raise(env);
@@ -205,9 +155,21 @@ SophiaIndex::SophiaIndex(struct key_def *key_def_arg __attribute__((unused)))
 	db = sophia_configure(space, key_def);
 	if (db == NULL)
 		sophia_raise(env);
+	/* start two-phase recovery for a space:
+	 * a. created after snapshot recovery
+	 * b. created during log recovery
+	*/
 	int rc = sp_open(db);
 	if (rc == -1)
 		sophia_raise(env);
+	/* auto-complete any space created
+	 * after recovery */
+	engine_recovery *r = &factory->recovery;
+	if (r->recover == space_noop) {
+		rc = sp_open(db);
+		if (rc == -1)
+			sophia_raise(env);
+	}
 	tuple_format_ref(space->format, 1);
 }
 
@@ -270,7 +232,7 @@ SophiaIndex::size() const
 {
 	void *c = sp_ctl(env);
 	char name[128];
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".profiler.index_count",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.count",
 	         key_def->space_id);
 	void *o = sp_get(c, name);
 	if (o == NULL)
@@ -285,7 +247,7 @@ SophiaIndex::memsize() const
 {
 	void *c = sp_ctl(env);
 	char name[128];
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".profiler.index_memory_used",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.memory_used",
 	         key_def->space_id);
 	void *o = sp_get(c, name);
 	if (o == NULL)
diff --git a/test/sophia/box.lua b/test/sophia/box.lua
index 1b615c7c7f4a616422e76a75e7f5b5c037b0d7d3..4fb8af9dfefc937c4b466150b186a5987683505f 100644
--- a/test/sophia/box.lua
+++ b/test/sophia/box.lua
@@ -1,33 +1,35 @@
 #!/usr/bin/env tarantool
 os = require('os')
 
+function sophia_printdir()
+	f = io.popen("ls -1 sophia_test")
+	ls = f:read("*all")
+	unused = f:close()
+	return ls
+end
+
+function sophia_rmdir(dir)
+	os.execute("rm -rf sophia_test")
+end
+
+sophia_rmdir()
+
 local sophia = {
-	memory_limit   = 0,
-	threads        = 3, -- test case
-	node_size      = 134217728,
-	node_page_size = 131072,
-	node_branch_wm = 10485760,
-    node_merge_wm  = 1
+	memory_limit    = 0,
+	threads         = 3, -- test case
+	node_size       = 134217728,
+	node_page_size  = 131072,
+	node_branch_wm  = 10485760,
+	node_compact_wm = 1
 }
 
-box.cfg{
+box.cfg {
     listen           = os.getenv("LISTEN"),
     slab_alloc_arena = 0.1,
     pid_file         = "tarantool.pid",
     rows_per_wal     = 50,
     sophia_dir       = "sophia_test",
-    sophia   = sophia
+    sophia           = sophia
 }
 
 require('console').listen(os.getenv('ADMIN'))
-
-function sophia_printdir()
-	f = io.popen("ls -1 sophia_test")
-	ls = f:read("*all")
-	unused = f:close()
-	return ls
-end
-
-function sophia_rmdir(dir)
-	os.execute("rm -rf sophia_test")
-end
diff --git a/test/sophia/crud.result b/test/sophia/crud.result
index 4ebfdc36ff12cccb294848e0d1c5481e2c8abec3..548a312a5ee65233f69274ddbd5d1b9644038d79 100644
--- a/test/sophia/crud.result
+++ b/test/sophia/crud.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- insert
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 ---
@@ -1172,7 +1169,3 @@ index_random_test(space, 'primary')
 space:drop()
 ---
 ...
---
-sophia_rmdir()
----
-...
diff --git a/test/sophia/crud.test.lua b/test/sophia/crud.test.lua
index 39109a25e48094d52724d325c6ebf47b1c0a8c2f..fea140c1aecf7857ff59579b42c6858066a1c4ed 100644
--- a/test/sophia/crud.test.lua
+++ b/test/sophia/crud.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- insert
 
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
@@ -49,7 +47,3 @@ dofile('index_random_test.lua')
 index_random_test(space, 'primary')
 
 space:drop()
-
---
-
-sophia_rmdir()
diff --git a/test/sophia/dml.result b/test/sophia/dml.result
index b2a433a2571623120f6daedbbeb28d52ff0fcc1f..10ce0b15df4f81cad172509f06bbb3d889346707 100644
--- a/test/sophia/dml.result
+++ b/test/sophia/dml.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- space create/drop
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
 ---
@@ -166,6 +163,3 @@ primary:len()
 space:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/dml.test.lua b/test/sophia/dml.test.lua
index ebd6ce8f64b14953e547ec2bdb6b49d56ad6b80e..6f5531674d61d1676627f0e0fac990a50e58ea6e 100644
--- a/test/sophia/dml.test.lua
+++ b/test/sophia/dml.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- space create/drop
 
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
@@ -67,5 +65,3 @@ space:insert({14})
 space:insert({15})
 primary:len()
 space:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/gh.result b/test/sophia/gh.result
index f1a3315a7e5423f2c984bae76eb253541200c479..45d9befc9f2e0487f9cdc1d24aeb611a652cf1dd 100644
--- a/test/sophia/gh.result
+++ b/test/sophia/gh.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- gh-283: Sophia: hang after three creates and drops
 s = box.schema.create_space('space0', {id = 33, engine='sophia'})
 ---
@@ -150,6 +147,3 @@ box.space['name_of_space']:select{'a'}
 s:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/gh.test.lua b/test/sophia/gh.test.lua
index 239385dc2dcf4ee224785952fc719cb0c82efc65..01763075f1905afb6ec9a0602580f7cf667b932d 100644
--- a/test/sophia/gh.test.lua
+++ b/test/sophia/gh.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- gh-283: Sophia: hang after three creates and drops
 
 s = box.schema.create_space('space0', {id = 33, engine='sophia'})
@@ -61,5 +59,3 @@ box.space['name_of_space']:select{'a'}
 box.space['name_of_space']:truncate()
 box.space['name_of_space']:select{'a'}
 s:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/info.result b/test/sophia/info.result
index 24c4379dfcc1f872f931f11fb1130cc530ce802c..b8a3baaa1ff6bf8db2e6009d55a1d1bc88753be4 100644
--- a/test/sophia/info.result
+++ b/test/sophia/info.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 box.info().sophia['sophia.version']
 ---
 - '1.2'
@@ -14,13 +11,10 @@ index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 for key = 1, 10 do space:insert({key}) end
 ---
 ...
-box.info().sophia['db.100.profiler.index_count']
+box.info().sophia['db.100.index.count']
 ---
 - '10'
 ...
 space:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/info.test.lua b/test/sophia/info.test.lua
index d287afa0e451c93b226df563805c15e27f30e0d8..c1c7958aeaa38a45cdb5878e9a86f32ff96f3ee9 100644
--- a/test/sophia/info.test.lua
+++ b/test/sophia/info.test.lua
@@ -1,6 +1,3 @@
-
-sophia_rmdir()
-
 box.info().sophia['sophia.version']
 
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
@@ -8,8 +5,6 @@ index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 
 for key = 1, 10 do space:insert({key}) end
 
-box.info().sophia['db.100.profiler.index_count']
+box.info().sophia['db.100.index.count']
 
 space:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/options.result b/test/sophia/options.result
index 17b0b155d32dd000103c5ea31c2b287f594ca6cd..364bf947b954cfc9ebac0eb4b1cea4b307470310 100644
--- a/test/sophia/options.result
+++ b/test/sophia/options.result
@@ -1,11 +1,8 @@
-sophia_rmdir()
----
-...
 box.cfg.sophia
 ---
 - node_page_size: 131072
   memory_limit: 0
-  node_merge_wm: 1
+  node_compact_wm: 1
   threads: 3
   node_size: 134217728
   node_branch_wm: 10485760
@@ -13,6 +10,3 @@ box.cfg.sophia
 box.cfg.sophia.threads = 3
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/options.test.lua b/test/sophia/options.test.lua
index b2ee4139094d6098aff706b3d8dcfa1060483ceb..29ec8612ed8b606334f058f37bbdeb3dbb2c8434 100644
--- a/test/sophia/options.test.lua
+++ b/test/sophia/options.test.lua
@@ -1,7 +1,3 @@
 
-sophia_rmdir()
-
 box.cfg.sophia
 box.cfg.sophia.threads = 3
-
-sophia_rmdir()
diff --git a/test/sophia/recover.result b/test/sophia/recover.result
index f162a5564482678cc81f37a577fafe153222d831..0a57cc5854c043e7b60589919f5c755f032b659a 100644
--- a/test/sophia/recover.result
+++ b/test/sophia/recover.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- snapshot
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
 ---
@@ -25,6 +22,3 @@ box.snapshot()
 ---
 - ok
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/recover.test.lua b/test/sophia/recover.test.lua
index a62d2172d1b95d3f41221d51bd19d070eee185bd..c8814c2f45798c411e392bf75e54bd64149a11fa 100644
--- a/test/sophia/recover.test.lua
+++ b/test/sophia/recover.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- snapshot
 
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
@@ -9,5 +7,3 @@ sophia_printdir()
 box.snapshot()
 space:drop()
 box.snapshot()
-
-sophia_rmdir()
diff --git a/test/sophia/transaction.result b/test/sophia/transaction.result
index b92ce261e22895eb3bd74406cf57ad8b56ff1daf..e3b464156750c3cbd7ed664843cf9bff3f20d145 100644
--- a/test/sophia/transaction.result
+++ b/test/sophia/transaction.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 ---
 ...
@@ -143,6 +140,3 @@ space:drop()
 ---
 ...
 --
-sophia_rmdir()
----
-...
diff --git a/test/sophia/transaction.test.lua b/test/sophia/transaction.test.lua
index b4f7d088fa455186cad5d4d92964ac96473064bb..c3b176a0c217115415548d4df95d6b66dedb9e12 100644
--- a/test/sophia/transaction.test.lua
+++ b/test/sophia/transaction.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 
@@ -56,5 +54,3 @@ space_tmp:drop()
 space:drop()
 
 --
-
-sophia_rmdir()
diff --git a/third_party/sophia b/third_party/sophia
index 3009d85f61c9d3a3b834d37f0a92eada6a3d68ff..f8c64b4dcd0967470f94a15b010751ba614b271a 160000
--- a/third_party/sophia
+++ b/third_party/sophia
@@ -1 +1 @@
-Subproject commit 3009d85f61c9d3a3b834d37f0a92eada6a3d68ff
+Subproject commit f8c64b4dcd0967470f94a15b010751ba614b271a