diff --git a/src/main.rs b/src/main.rs
index 5304d3e87175ecbf9dc11cbb77d01df625cafa8a..906ab92bac4f10cba09421d114e6c67200585bab 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -792,7 +792,7 @@ fn start_boot(args: &args::Run) {
 
         let mut hs = raft::HardState::default();
         hs.set_commit(init_entries.len() as _);
-        hs.set_term(1);
+        hs.set_term(traft::INIT_RAFT_TERM);
         storage.raft.persist_hard_state(&hs).unwrap();
         Ok(())
     })
diff --git a/src/traft/mod.rs b/src/traft/mod.rs
index 2edf448c3bbd2f9eb05c93dfbaf07d050aee359e..9a69aa0be47666e4037c10c620e722c0bcc37785 100644
--- a/src/traft/mod.rs
+++ b/src/traft/mod.rs
@@ -41,6 +41,8 @@ pub type RaftTerm = u64;
 pub type RaftIndex = u64;
 pub type ReplicasetId = String;
 
+pub const INIT_RAFT_TERM: RaftTerm = 1;
+
 ////////////////////////////////////////////////////////////////////////////////
 /// Unique id of a cluster instance.
 ///
diff --git a/src/traft/node.rs b/src/traft/node.rs
index b8408531bb381daa8471cd1087a6cde7a5f2077f..8ef2854653cad2f3100dec3bde08fe83eb598704 100644
--- a/src/traft/node.rs
+++ b/src/traft/node.rs
@@ -104,6 +104,8 @@ pub struct Status {
     pub id: RaftId,
     /// `raft_id` of the leader instance
     pub leader_id: Option<RaftId>,
+    /// Current term number
+    pub term: RaftTerm,
     /// Current raft state
     pub raft_state: RaftState,
 }
@@ -143,6 +145,7 @@ impl Node {
         let status = Rc::new(Cell::new(Status {
             id: raft_id,
             leader_id: None,
+            term: traft::INIT_RAFT_TERM,
             raft_state: RaftState::Follower,
         }));
 
@@ -748,6 +751,10 @@ impl NodeImpl {
             // Raft HardState changed, and we need to persist it.
             if let Some(hs) = ready.hs() {
                 self.storage.raft.persist_hard_state(hs).unwrap();
+
+                let mut s = status.get();
+                s.term = hs.term;
+                status.set(s);
             }
 
             Ok(())
@@ -1006,7 +1013,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) {
 
         let leader_id = status.get().id;
         let peers = storage.peers.all_peers().unwrap();
-        let term = storage.raft.term().unwrap().unwrap_or(0);
+        let term = status.get().term;
         let cluster_id = storage.raft.cluster_id().unwrap().unwrap();
         let node = global().expect("must be initialized");
 
diff --git a/test/conftest.py b/test/conftest.py
index ac2320391ceaaaacd705d7c6f30d782d091cd4e7..b526c0f4bd7a40e9211f8749d576182426891467 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -159,6 +159,7 @@ def normalize_net_box_result(func):
 class RaftStatus:
     id: int
     raft_state: str
+    term: int
     leader_id: int | None = None