diff --git a/safekeeper/src/safekeeper.rs b/safekeeper/src/safekeeper.rs
index 0edac04b97..886cac869d 100644
--- a/safekeeper/src/safekeeper.rs
+++ b/safekeeper/src/safekeeper.rs
@@ -279,7 +279,7 @@ pub struct VoteResponse {
* Proposer -> Acceptor message announcing proposer is elected and communicating
* term history to it.
*/
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct ProposerElected {
pub generation: Generation, // membership conf generation
pub term: Term,
@@ -1013,6 +1013,9 @@ where
self.state.finish_change(&state).await?;
}
+ // Switch into conf given by proposer conf if it is higher.
+ self.state.membership_switch(msg.mconf.clone()).await?;
+
let apg = AcceptorGreeting {
node_id: self.node_id,
mconf: self.state.mconf.clone(),
@@ -1030,16 +1033,18 @@ where
&mut self,
msg: &VoteRequest,
) -> Result