diff --git a/raft/raft_paper_test.go b/raft/raft_paper_test.go
index cd5c3e94e..4f7f1255a 100644
--- a/raft/raft_paper_test.go
+++ b/raft/raft_paper_test.go
@@ -757,7 +757,7 @@ func TestLeaderSyncFollowerLog(t *testing.T) {
 		// first node needs the vote from the third node to become the leader.
 		n := newNetwork(lead, follower, nopStepper)
 		n.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup})
-		n.send(pb.Message{From: 3, To: 1, Type: pb.MsgVoteResp, Term: 1})
+		n.send(pb.Message{From: 3, To: 1, Type: pb.MsgVoteResp, Term: term + 1})
 
 		n.send(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{}}})
 
diff --git a/raft/raft_test.go b/raft/raft_test.go
index be79dcf7a..472746376 100644
--- a/raft/raft_test.go
+++ b/raft/raft_test.go
@@ -290,19 +290,21 @@ func TestProgressPaused(t *testing.T) {
 func TestLeaderElection(t *testing.T) {
 	tests := []struct {
 		*network
-		state StateType
+		state   StateType
+		expTerm uint64
 	}{
-		{newNetwork(nil, nil, nil), StateLeader},
-		{newNetwork(nil, nil, nopStepper), StateLeader},
-		{newNetwork(nil, nopStepper, nopStepper), StateCandidate},
-		{newNetwork(nil, nopStepper, nopStepper, nil), StateCandidate},
-		{newNetwork(nil, nopStepper, nopStepper, nil, nil), StateLeader},
+		{newNetwork(nil, nil, nil), StateLeader, 1},
+		{newNetwork(nil, nil, nopStepper), StateLeader, 1},
+		{newNetwork(nil, nopStepper, nopStepper), StateCandidate, 1},
+		{newNetwork(nil, nopStepper, nopStepper, nil), StateCandidate, 1},
+		{newNetwork(nil, nopStepper, nopStepper, nil, nil), StateLeader, 1},
 
-		// three logs further along than 0
-		{newNetwork(nil, ents(1), ents(2), ents(1, 3), nil), StateFollower},
+		// three logs further along than 0, but in the same term so rejections
+		// are returned instead of the votes being ignored.
+		{newNetwork(nil, ents(1), ents(1), ents(1, 1), nil), StateFollower, 1},
 
 		// logs converge
-		{newNetwork(ents(1), nil, ents(2), ents(1), nil), StateLeader},
+		{newNetwork(ents(1), nil, ents(2), ents(1), nil), StateLeader, 2},
 	}
 
 	for i, tt := range tests {
@@ -311,8 +313,8 @@ func TestLeaderElection(t *testing.T) {
 		if sm.state != tt.state {
 			t.Errorf("#%d: state = %s, want %s", i, sm.state, tt.state)
 		}
-		if g := sm.Term; g != 1 {
-			t.Errorf("#%d: term = %d, want %d", i, g, 1)
+		if g := sm.Term; g != tt.expTerm {
+			t.Errorf("#%d: term = %d, want %d", i, g, tt.expTerm)
 		}
 	}
 }
@@ -2585,7 +2587,7 @@ func ents(terms ...uint64) *raft {
 		storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}})
 	}
 	sm := newTestRaft(1, []uint64{}, 5, 1, storage)
-	sm.reset(0)
+	sm.reset(terms[len(terms)-1])
 	return sm
 }
 
@@ -2620,7 +2622,7 @@ func newNetwork(peers ...stateMachine) *network {
 			for i := 0; i < size; i++ {
 				v.prs[peerAddrs[i]] = &Progress{}
 			}
-			v.reset(0)
+			v.reset(v.Term)
 			npeers[id] = v
 		case *blackHole:
 			npeers[id] = v