diff --git a/src/box/box.cc b/src/box/box.cc
index e724de3978b0613a08a01563770ba9638e04753a..f055788d904cba44063b45724ee9700228a7ff5e 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -207,7 +207,7 @@ int
 box_wait_ro(bool ro, double timeout)
 {
 	double deadline = ev_monotonic_now(loop()) + timeout;
-	while (is_ro != ro) {
+	while (box_is_ro() != ro) {
 		if (fiber_cond_wait_deadline(&ro_cond, deadline) != 0)
 			return -1;
 		if (fiber_is_cancelled()) {
@@ -225,6 +225,7 @@ box_clear_orphan(void)
 		return; /* nothing to do */
 
 	is_orphan = false;
+	fiber_cond_broadcast(&ro_cond);
 
 	/* Update the title to reflect the new status. */
 	title("running");
diff --git a/test/replication/quorum.result b/test/replication/quorum.result
index f6e60aee936c2b48b6f78ce5363b276bb2a37336..5a294103031208086111ed3c5c75096c22745879 100644
--- a/test/replication/quorum.result
+++ b/test/replication/quorum.result
@@ -32,6 +32,14 @@ box.info.status -- orphan
 ---
 - orphan
 ...
+box.ctl.wait_rw(0.001) -- timeout
+---
+- error: timed out
+...
+box.info.ro -- true
+---
+- true
+...
 box.space.test:replace{100} -- error
 ---
 - error: Can't modify data because this instance is in read-only mode.
@@ -48,6 +56,14 @@ box.info.status -- orphan
 ---
 - orphan
 ...
+box.ctl.wait_rw(0.001) -- timeout
+---
+- error: timed out
+...
+box.info.ro -- true
+---
+- true
+...
 box.space.test:replace{100} -- error
 ---
 - error: Can't modify data because this instance is in read-only mode.
@@ -55,11 +71,12 @@ box.space.test:replace{100} -- error
 box.cfg{replication_connect_quorum = 2}
 ---
 ...
-fiber = require('fiber')
+box.ctl.wait_rw()
 ---
 ...
-while box.info.status == 'orphan' do fiber.sleep(0.001) end
+box.info.ro -- false
 ---
+- false
 ...
 box.info.status -- running
 ---
@@ -70,6 +87,14 @@ box.info.status -- orphan
 ---
 - orphan
 ...
+box.ctl.wait_rw(0.001) -- timeout
+---
+- error: timed out
+...
+box.info.ro -- true
+---
+- true
+...
 box.space.test:replace{100} -- error
 ---
 - error: Can't modify data because this instance is in read-only mode.
@@ -78,11 +103,12 @@ test_run:cmd('start server quorum1')
 ---
 - true
 ...
-fiber = require('fiber')
+box.ctl.wait_rw()
 ---
 ...
-while box.info.status == 'orphan' do fiber.sleep(0.001) end
+box.info.ro -- false
 ---
+- false
 ...
 box.info.status -- running
 ---
@@ -126,6 +152,9 @@ test_run:cmd('stop server quorum1')
 for i = 1, 10 do box.space.test:insert{i} end
 ---
 ...
+fiber = require('fiber')
+---
+...
 fiber.sleep(0.1)
 ---
 ...
diff --git a/test/replication/quorum.test.lua b/test/replication/quorum.test.lua
index 44c98b7b1c20ab6740c6bce24f0947b58bea02ed..192f13695127c6e957c7bdb82d748c1daa9a8c5a 100644
--- a/test/replication/quorum.test.lua
+++ b/test/replication/quorum.test.lua
@@ -20,24 +20,30 @@ test_run:cmd('switch quorum2')
 
 test_run:cmd('restart server quorum2')
 box.info.status -- orphan
+box.ctl.wait_rw(0.001) -- timeout
+box.info.ro -- true
 box.space.test:replace{100} -- error
 box.cfg{replication={}}
 box.info.status -- running
 
 test_run:cmd('restart server quorum2')
 box.info.status -- orphan
+box.ctl.wait_rw(0.001) -- timeout
+box.info.ro -- true
 box.space.test:replace{100} -- error
 box.cfg{replication_connect_quorum = 2}
-fiber = require('fiber')
-while box.info.status == 'orphan' do fiber.sleep(0.001) end
+box.ctl.wait_rw()
+box.info.ro -- false
 box.info.status -- running
 
 test_run:cmd('restart server quorum2')
 box.info.status -- orphan
+box.ctl.wait_rw(0.001) -- timeout
+box.info.ro -- true
 box.space.test:replace{100} -- error
 test_run:cmd('start server quorum1')
-fiber = require('fiber')
-while box.info.status == 'orphan' do fiber.sleep(0.001) end
+box.ctl.wait_rw()
+box.info.ro -- false
 box.info.status -- running
 
 -- Check that the replica follows all masters.
@@ -54,6 +60,7 @@ box.error.injection.set("ERRINJ_RELAY_TIMEOUT", 0.01)
 test_run:cmd('stop server quorum1')
 
 for i = 1, 10 do box.space.test:insert{i} end
+fiber = require('fiber')
 fiber.sleep(0.1)
 
 test_run:cmd('start server quorum1')