diff --git a/axelrod/strategies/finite_state_machines.py b/axelrod/strategies/finite_state_machines.py
index defc4770..1c231d43 100644
--- a/axelrod/strategies/finite_state_machines.py
+++ b/axelrod/strategies/finite_state_machines.py
@@ -54,6 +54,7 @@ class FSMPlayer(Player):
             initial_state = 1
             initial_action = C
         Player.__init__(self)
+        self.initial_state = initial_state
         self.initial_action = initial_action
         self.fsm = SimpleFSM(transitions, initial_state)
 
@@ -67,6 +68,10 @@ class FSMPlayer(Player):
             self.state = self.fsm.state
             return action
 
+    def reset(self):
+        Player.reset(self)
+        self.fsm.state = self.initial_state
+
 
 class Fortress3(FSMPlayer):
     """Finite state machine player specified in DOI:10.1109/CEC.2006.1688322.

Finite state machine players don't reset properly
```
>>> import axelrod as axl
>>> tft = axl.TitForTat()
>>> predator = axl.Predator()
>>> predator.fsm.state
1
>>> m = axl.Match((tft, predator), 2)
>>> m.play()
[('C', 'C'), ('C', 'D')]
>>> predator.fsm.state
 2
>>> predator.reset()
>>> predator.fsm.state
2
```

Stumbled on this working on #636 (writing a hypothesis strategy that contrite TfT reduces to TfT in 0 noise) so the above is reduced from seeing that when playing the same match again we get a different output:

```
>>> m = axl.Match((tft, predator), 2)
>>> m.play()
[('C', 'C'), ('C', 'C')]
```

Am going to work on a fix now and include a hypothesis test that checks that random deterministic matches give the same outcomes.
diff --git a/axelrod/tests/integration/test_matches.py b/axelrod/tests/integration/test_matches.py
new file mode 100644
index 00000000..b6241145
--- /dev/null
+++ b/axelrod/tests/integration/test_matches.py
@@ -0,0 +1,25 @@
+"""Tests for some expected match behaviours"""
+import unittest
+import axelrod
+
+from hypothesis import given
+from hypothesis.strategies import integers
+from axelrod.tests.property import strategy_lists
+
+C, D = axelrod.Actions.C, axelrod.Actions.D
+
+deterministic_strategies = [s for s in axelrod.ordinary_strategies
+                            if not s().classifier['stochastic']]  # Well behaved strategies
+
+class TestMatchOutcomes(unittest.TestCase):
+
+    @given(strategies=strategy_lists(strategies=deterministic_strategies,
+                                     min_size=2, max_size=2),
+           turns=integers(min_value=1, max_value=20))
+    def test_outcome_repeats(self, strategies, turns):
+        """A test that if we repeat 3 matches with deterministic and well
+        behaved strategies then we get the same result"""
+        players = [s() for s in strategies]
+        matches = [axelrod.Match(players, turns) for _ in range(3)]
+        self.assertEqual(matches[0].play(), matches[1].play())
+        self.assertEqual(matches[1].play(), matches[2].play())
diff --git a/axelrod/tests/unit/test_finite_state_machines.py b/axelrod/tests/unit/test_finite_state_machines.py
index 043834a1..d8147a59 100644
--- a/axelrod/tests/unit/test_finite_state_machines.py
+++ b/axelrod/tests/unit/test_finite_state_machines.py
@@ -111,6 +111,12 @@ class TestFSMPlayer(TestPlayer):
         fsm = player.fsm
         self.assertTrue(check_state_transitions(fsm.state_transitions))
 
+    def test_reset_initial_state(self):
+        player = self.player()
+        player.fsm.state = -1
+        player.reset()
+        self.assertFalse(player.fsm.state == -1)
+
 
 class TestFortress3(TestFSMPlayer):
 

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==25.3.0
-e git+https://github.com/Axelrod-Python/Axelrod.git@89651f45910f4b41a79c58358d9f5beca4197fc1#egg=Axelrod
coverage==7.8.0
cycler==0.12.1
exceptiongroup==1.2.2
hypothesis==6.130.5
iniconfig==2.1.0
kiwisolver==1.4.7
matplotlib==3.3.4
numpy==2.0.2
packaging==24.2
pillow==11.1.0
pluggy==1.5.0
pyparsing==2.1.1
pytest==8.3.5
pytest-cov==6.0.0
python-dateutil==2.9.0.post0
six==1.17.0
sortedcontainers==2.4.0
tomli==2.2.1
tqdm==3.4.0

name: Axelrod
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==25.3.0
      - coverage==7.8.0
      - cycler==0.12.1
      - exceptiongroup==1.2.2
      - hypothesis==6.130.5
      - iniconfig==2.1.0
      - kiwisolver==1.4.7
      - matplotlib==3.3.4
      - numpy==2.0.2
      - packaging==24.2
      - pillow==11.1.0
      - pluggy==1.5.0
      - pyparsing==2.1.1
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - python-dateutil==2.9.0.post0
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tomli==2.2.1
      - tqdm==3.4.0
prefix: /opt/conda/envs/Axelrod

axelrod/tests/integration/test_matches.py::TestMatchOutcomes::test_outcome_repeats axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_reset_initial_state axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_reset_initial_state
axelrod/tests/unit/test_finite_state_machines.py::TestPlayer::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestPlayer::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestPlayer::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestPlayer::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestPlayer::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayers::test_cooperator axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayers::test_defector axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayers::test_malformed_tables axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayers::test_tft axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayers::test_wsls axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestFSMPlayer::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestFortress3::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestFortress4::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestPredator::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestRaider::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestRipoff::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB1::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestSolutionB5::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_clone axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_initialisation axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_match_attributes axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_repr axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_reset axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_strategy axelrod/tests/unit/test_finite_state_machines.py::TestThumper::test_transitions axelrod/tests/unit/test_finite_state_machines.py::TestFortress3vsFortress3::test_rounds axelrod/tests/unit/test_finite_state_machines.py::TestFortress3vsTitForTat::test_rounds axelrod/tests/unit/test_finite_state_machines.py::TestFortress3vsCooperator::test_rounds axelrod/tests/unit/test_finite_state_machines.py::TestFortress4vsFortress4::test_rounds axelrod/tests/unit/test_finite_state_machines.py::TestFortress4vsTitForTat::test_rounds axelrod/tests/unit/test_finite_state_machines.py::TestFortress4vsCooperator::test_rounds
axelrod/strategies/finite_state_machines.py
axelrod/strategies/finite_state_machines.py