diff --git a/crates/core/component/stake/src/component/validator_handler/validator_manager.rs b/crates/core/component/stake/src/component/validator_handler/validator_manager.rs
index a7d9c27692..8731cd1115 100644
--- a/crates/core/component/stake/src/component/validator_handler/validator_manager.rs
+++ b/crates/core/component/stake/src/component/validator_handler/validator_manager.rs
@@ -109,12 +109,14 @@ pub trait ValidatorManager: StateWrite {
                 // the staking component.
                 tracing::debug!(identity_key = ?identity_key, "validator has reached minimum stake threshold to be considered inactive");
                 self.add_consensus_set_index(identity_key);
+                self.put(validator_state_path, Inactive);
             }
             (Inactive, Defined) => {
                 // The validator has fallen below the minimum threshold to be
                 // part of the "greater" consensus set.
                 tracing::debug!(identity_key = ?identity_key, "validator has fallen below minimum stake threshold to be considered inactive");
                 self.remove_consensus_set_index(identity_key);
+                self.put(validator_state_path, Defined);
             }
             (Inactive, Active) => {
                 let power = self.get_validator_power(identity_key).await;
@@ -156,10 +158,10 @@ pub trait ValidatorManager: StateWrite {
                     },
                 );
 
-                self.put(validator_state_path, new_state);
-
                 metrics::gauge!(metrics::MISSED_BLOCKS, "identity_key" => identity_key.to_string())
                     .increment(0.0);
+
+                self.put(validator_state_path, new_state);
             }
             (Jailed, Inactive) => {
                 // After getting jailed, a validator can be released from jail when its operator