diff --git a/src/box/box.cc b/src/box/box.cc
index bca73ed9a5782c37cd478035022876935a9a435a..08264608e009e166dc43120956ef0968435219ba 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -242,7 +242,7 @@ box_leave_local_standby_mode(void *data __attribute__((unused)))
 	/*
 	 * notify engines about end of recovery.
 	*/
-	engine_end_recover();
+	engine_end_recovery();
 
 	stat_cleanup(stat_base, IPROTO_TYPE_STAT_MAX);
 	box_set_wal_mode(cfg_gets("wal_mode"));
diff --git a/src/box/engine.cc b/src/box/engine.cc
index 793bbc92d6ae3b0ca1f215768154bef10f4fc4f5..8d3c945825316491031ba32e1734c5316b72cc9e 100644
--- a/src/box/engine.cc
+++ b/src/box/engine.cc
@@ -56,9 +56,6 @@ void EngineFactory::commit(struct txn*)
 void EngineFactory::rollback(struct txn*)
 {}
 
-void EngineFactory::recoveryEvent(enum engine_recovery_event)
-{}
-
 Engine::Engine(EngineFactory *f)
 	:factory(f)
 {
@@ -101,7 +98,7 @@ engine_begin_recover_snapshot(int64_t snapshot_lsn)
 	/* recover engine snapshot */
 	EngineFactory *f;
 	engine_foreach(f) {
-		f->set_snapshot_lsn(snapshot_lsn);
+		f->begin_recover_snapshot(snapshot_lsn);
 	}
 }
 
@@ -127,13 +124,13 @@ engine_end_recover_snapshot()
 	 */
 	EngineFactory *f;
 	engine_foreach(f) {
-		f->recoveryEvent(END_RECOVERY_SNAPSHOT);
+		f->end_recover_snapshot();
 	}
 	space_foreach(do_one_recover_step, NULL);
 }
 
 void
-engine_end_recover()
+engine_end_recovery()
 {
 	/*
 	 * For all new spaces created after recovery is complete,
@@ -141,7 +138,7 @@ engine_end_recover()
 	 */
 	EngineFactory *f;
 	engine_foreach(f) {
-		f->recoveryEvent(END_RECOVERY);
+		f->end_recovery();
 	}
 	space_foreach(do_one_recover_step, NULL);
 }
diff --git a/src/box/engine.h b/src/box/engine.h
index 9acddbc38bb05c965044b93b2c9dd72b6b90474b..1f4e4f6e2a5a709ffa15adc9fe8354d600fcb81e 100644
--- a/src/box/engine.h
+++ b/src/box/engine.h
@@ -66,15 +66,6 @@ enum engine_recovery_state {
 	READY_ALL_KEYS
 };
 
-/**
- * Engine specific recovery events that represents
- * global recovery stage change.
- */
-enum engine_recovery_event {
-	END_RECOVERY_SNAPSHOT,
-	END_RECOVERY
-};
-
 /**
  * Engine specific snapshot event.
  */
@@ -117,8 +108,6 @@ class EngineFactory: public Object {
 	virtual void init();
 	/** Create a new engine instance for a space. */
 	virtual Engine *open() = 0;
-	/* Inform engine about a recovery stage change. */
-	virtual void recoveryEvent(enum engine_recovery_event);
 	/**
 	 * Check a key definition for violation of
 	 * various limits.
@@ -139,8 +128,15 @@ class EngineFactory: public Object {
 	virtual void begin(struct txn*, struct space*);
 	virtual void commit(struct txn*);
 	virtual void rollback(struct txn*);
-	virtual void set_snapshot_lsn(int64_t lsn) = 0;
-
+	/** Recovery */
+	virtual void begin_recover_snapshot(int64_t snapshot_lsn) = 0;
+	/* Inform engine about a recovery stage change. */
+	virtual void end_recover_snapshot() = 0;
+	/**
+	 * Inform the engine about the global recovery
+	 * state change (end of recovery from the binary log).
+	 */
+	virtual void end_recovery() = 0;
 	/**
 	 * Engine snapshotting support.
 	 */
@@ -239,6 +235,6 @@ engine_end_recover_snapshot();
  * Build secondary keys in all spaces.
  */
 void
-engine_end_recover();
+engine_end_recovery();
 
 #endif /* TARANTOOL_BOX_ENGINE_H_INCLUDED */
diff --git a/src/box/memtx_engine.cc b/src/box/memtx_engine.cc
index c2447e0026c0a0f919532e5024a46f38d06c4616..69600f03df23230c4fcd3cb3a54db8d4e170e430 100644
--- a/src/box/memtx_engine.cc
+++ b/src/box/memtx_engine.cc
@@ -80,16 +80,15 @@ MemtxFactory::MemtxFactory()
 }
 
 void
-MemtxFactory::recoveryEvent(enum engine_recovery_event event)
+MemtxFactory::end_recover_snapshot()
 {
-	switch (event) {
-	case END_RECOVERY_SNAPSHOT:
-		recovery.recover = space_build_primary_key;
-		break;
-	case END_RECOVERY:
-		recovery.recover = space_build_all_keys;
-		break;
-	}
+	recovery.recover = space_build_primary_key;
+}
+
+void
+MemtxFactory::end_recovery()
+{
+	recovery.recover = space_build_all_keys;
 }
 
 Engine *MemtxFactory::open()
@@ -214,7 +213,7 @@ MemtxFactory::rollback(struct txn *txn)
 
 /** Called at start to tell memtx to recover to a given LSN. */
 void
-MemtxFactory::set_snapshot_lsn(int64_t /* lsn */)
+MemtxFactory::begin_recover_snapshot(int64_t /* lsn */)
 {
 	/*
 	 * memtx snapshotting supported directly by box.
diff --git a/src/box/memtx_engine.h b/src/box/memtx_engine.h
index 0d9fb3b5d3863548466e8d9ca050572aede32eb7..8a981305defac3f1b9c7d31bf688b114240e01e3 100644
--- a/src/box/memtx_engine.h
+++ b/src/box/memtx_engine.h
@@ -36,9 +36,10 @@ struct MemtxFactory: public EngineFactory {
 	virtual Index *createIndex(struct key_def *key_def);
 	virtual void dropIndex(Index *index);
 	virtual void keydefCheck(struct key_def *key_def);
-	virtual void recoveryEvent(enum engine_recovery_event event);
 	virtual void rollback(struct txn*);
-	virtual void set_snapshot_lsn(int64_t lsn);
+	virtual void begin_recover_snapshot(int64_t lsn);
+	virtual void end_recover_snapshot();
+	virtual void end_recovery();
 	virtual void snapshot(enum engine_snapshot_event, int64_t);
 };
 
diff --git a/src/box/sophia_engine.cc b/src/box/sophia_engine.cc
index 79f8a1cba2d35ccedbe7a7de1b2a522521e06b2b..a5f4bc78749b17e75394a795c34111a1aeeb2d8e 100644
--- a/src/box/sophia_engine.cc
+++ b/src/box/sophia_engine.cc
@@ -145,23 +145,23 @@ SophiaFactory::open()
 }
 
 void
-SophiaFactory::recoveryEvent(enum engine_recovery_event event)
+SophiaFactory::end_recover_snapshot()
 {
-	switch (event) {
-	case END_RECOVERY_SNAPSHOT:
-		recovery.replace = sophia_replace_recover;
-		recovery.recover = sophia_recovery_end_snapshot;
-		break;
-	case END_RECOVERY:
-		/* complete two-phase recovery */
-		int rc = sp_open(env);
-		if (rc == -1)
-			sophia_raise(env);
-		recovery.state   = READY_NO_KEYS;
-		recovery.replace = sophia_replace;
-		recovery.recover = space_noop;
-		break;
-	}
+	recovery.replace = sophia_replace_recover;
+	recovery.recover = sophia_recovery_end_snapshot;
+}
+
+
+void
+SophiaFactory::end_recovery()
+{
+	/* complete two-phase recovery */
+	int rc = sp_open(env);
+	if (rc == -1)
+		sophia_raise(env);
+	recovery.state   = READY_NO_KEYS;
+	recovery.replace = sophia_replace;
+	recovery.recover = space_noop;
 }
 
 Index*
@@ -392,7 +392,7 @@ sophia_snapshot_delete(void *env, int64_t lsn)
 }
 
 void
-SophiaFactory::set_snapshot_lsn(int64_t lsn)
+SophiaFactory::begin_recover_snapshot(int64_t lsn)
 {
 	sophia_snapshot_recover(env, lsn);
 }
diff --git a/src/box/sophia_engine.h b/src/box/sophia_engine.h
index 2b3cac646b9f957dcee860b31d68850fb9b0a70a..3b287829ac2bd06ff05e1e3a6c231bb2a2c54776 100644
--- a/src/box/sophia_engine.h
+++ b/src/box/sophia_engine.h
@@ -39,8 +39,9 @@ struct SophiaFactory: public EngineFactory {
 	virtual void begin(struct txn*, struct space*);
 	virtual void commit(struct txn*);
 	virtual void rollback(struct txn*);
-	virtual void recoveryEvent(enum engine_recovery_event);
-	virtual void set_snapshot_lsn(int64_t);
+	virtual void begin_recover_snapshot(int64_t);
+	virtual void end_recover_snapshot();
+	virtual void end_recovery();
 	virtual void snapshot(enum engine_snapshot_event, int64_t);
 	void *env;
 	void *tx;