diff --git a/core/log_io_remote.m b/core/log_io_remote.m
index 7f78e786abd79c7d74f97d1db6c2c62169445897..1d54f9603f6fb5df4a918d87d0c58df588e3994f 100644
--- a/core/log_io_remote.m
+++ b/core/log_io_remote.m
@@ -177,7 +177,8 @@ default_remote_row_handler(struct recovery_state *r, struct tbuf *row)
 }
 
 void
-recover_follow_remote(struct recovery_state *r, const char *ip_addr, int port)
+recovery_follow_remote(struct recovery_state *r,
+		       const char *ip_addr, int port)
 {
 	char *name;
 	struct fiber *f;
@@ -214,3 +215,11 @@ recover_follow_remote(struct recovery_state *r, const char *ip_addr, int port)
 	fiber_call(f);
 	r->remote_recovery = f;
 }
+
+void
+recovery_stop_remote(struct recovery_state *r)
+{
+	say_info("shutting down the replica");
+	fiber_cancel(r->remote_recovery);
+	r->remote_recovery = NULL;
+}
diff --git a/include/log_io.h b/include/log_io.h
index 44218966cd2cedb457c4b0e966515c184adabe4b..1b3214ac91373499d7408f069120bde5f8637be5 100644
--- a/include/log_io.h
+++ b/include/log_io.h
@@ -169,7 +169,9 @@ void recovery_wait_lsn(struct recovery_state *r, i64 lsn);
 int read_log(const char *filename,
 	     row_handler xlog_handler, row_handler snap_handler, void *state);
 
-void recover_follow_remote(struct recovery_state *r, const char *ip_addr, int port);
+void recovery_follow_remote(struct recovery_state *r,
+			    const char *ip_addr, int port);
+void recovery_stop_remote(struct recovery_state *r);
 
 struct log_io_iter;
 void snapshot_write_row(struct log_io_iter *i, u16 tag, u64 cookie, struct tbuf *row);
diff --git a/mod/box/box.m b/mod/box/box.m
index 5b313c383bca2b70c80f8f69ca89b97ba853ff49..6e6084ed9432d3b10b0e474ee17772a4405c52a5 100644
--- a/mod/box/box.m
+++ b/mod/box/box.m
@@ -1224,26 +1224,6 @@ title(const char *fmt, ...)
 			       cfg.primary_port, cfg.secondary_port, cfg.admin_port);
 }
 
-void
-remote_recovery_start(struct recovery_state *r, const char *ipaddr, int port)
-{
-	say_info("starting the replica");
-
-	recover_follow_remote(r, ipaddr, port);
-
-	snprintf(status, sizeof(status), "replica/%s:%i%s", ipaddr, port,
-		 custom_proc_title);
-	title("replica/%s:%i%s", ipaddr, port, custom_proc_title);
-}
-
-
-void
-remote_recovery_stop(struct recovery_state *r)
-{
-	say_info("shutting down the replica");
-	fiber_cancel(r->remote_recovery);
-	r->remote_recovery = NULL;
-}
 
 static void
 box_enter_master_or_replica_mode(struct tarantool_cfg *conf)
@@ -1253,9 +1233,15 @@ box_enter_master_or_replica_mode(struct tarantool_cfg *conf)
 
 		recovery_wait_lsn(recovery_state, recovery_state->lsn);
 
-		remote_recovery_start(recovery_state,
+		recovery_follow_remote(recovery_state,
 				      conf->wal_feeder_ipaddr,
 				      conf->wal_feeder_port);
+
+		snprintf(status, sizeof(status), "replica/%s:%i%s",
+			 conf->wal_feeder_ipaddr, conf->wal_feeder_port,
+			 custom_proc_title);
+		title("replica/%s:%i%s", conf->wal_feeder_ipaddr,
+		      conf->wal_feeder_port, custom_proc_title);
 	} else {
 		rw_callback = box_process_rw;
 
@@ -1299,7 +1285,12 @@ mod_check_config(struct tarantool_cfg *conf)
 i32
 mod_reload_config(struct tarantool_cfg *old_conf, struct tarantool_cfg *new_conf)
 {
-	if (old_conf->remote_hot_standby != new_conf->remote_hot_standby) {
+	if (old_conf->remote_hot_standby != new_conf->remote_hot_standby ||
+	    (old_conf->remote_hot_standby != 0 &&
+	     (strcmp(old_conf->wal_feeder_ipaddr,
+		     new_conf->wal_feeder_ipaddr) != 0 ||
+	      old_conf->wal_feeder_port != new_conf->wal_feeder_port))) {
+
 		if (recovery_state->finalize != true) {
 			out_warning(0, "Could not propagate %s before local recovery finished",
 				    old_conf->remote_hot_standby == true ? "slave to master" :
@@ -1307,25 +1298,11 @@ mod_reload_config(struct tarantool_cfg *old_conf, struct tarantool_cfg *new_conf
 
 			return -1;
 		}
-	}
-
-	if (old_conf->remote_hot_standby != new_conf->remote_hot_standby) {
-		/* Local recovery must be finalized at this point */
-		assert(recovery_state->finalize == true);
 
 		if (recovery_state->remote_recovery)
-			remote_recovery_stop(recovery_state);
+			recovery_stop_remote(recovery_state);
 
 		box_enter_master_or_replica_mode(new_conf);
-	} else if (old_conf->remote_hot_standby > 0 &&
-		   (strcmp(old_conf->wal_feeder_ipaddr, new_conf->wal_feeder_ipaddr) != 0 ||
-		    old_conf->wal_feeder_port != new_conf->wal_feeder_port)) {
-
-		if (recovery_state->remote_recovery)
-			remote_recovery_stop(recovery_state);
-		remote_recovery_start(recovery_state,
-				      new_conf->wal_feeder_ipaddr,
-				      new_conf->wal_feeder_port);
 	}
 
 	return 0;