diff --git a/changelog.md b/changelog.md
index faca0cb8cdd822c47ee9db529a8339eca2d21bab..8a4da1f11c78ba21da8e249250000ce68cac736e 100644
--- a/changelog.md
+++ b/changelog.md
@@ -10,6 +10,7 @@ Changes since Flatland 2.0.0
 ### Changes in rail generator and `RailEnv`
 - renaming of `distance_maps` into `distance_map`
 - by default the reset method of RailEnv is not called in the constructor of RailEnv anymore (compliance for OpenAI Gym). Therefore the reset method needs to be called after the creation of a RailEnv object
+- renaming of parameters RailEnv.reset(): from `regen_rail` to `regenerate_rail`, from `replace_agents` to `regenerate_schedule`
 
 ### Changes in schedule generation
 - return value of schedule generator has changed to the named tuple `Schedule`. From the point of view of a consumer, nothing has changed, this is just a type hint which is introduced where the attributes of `Schedule` have names.
diff --git a/docs/specifications/railway.md b/docs/specifications/railway.md
index e1ee77f498cf9f030830aad048c0742acb2d9da1..35b2835da2b26fc779d4b0d23614806655be1416 100644
--- a/docs/specifications/railway.md
+++ b/docs/specifications/railway.md
@@ -430,7 +430,7 @@ The environment's `reset` takes care of applying the two generators:
         self.rail_generator: RailGenerator = rail_generator
         self.schedule_generator: ScheduleGenerator = schedule_generator
 
-    def reset(self, regen_rail=True, replace_agents=True):
+    def reset(self, regenerate_rail=True, regenerate_schedule=True):
         rail, optionals = self.rail_generator(self.width, self.height, self.get_num_agents(), self.num_resets)
 
         ...
diff --git a/docs/tutorials/05_multispeed.md b/docs/tutorials/05_multispeed.md
index cc45c65edfeab62d62596444a66b926ca8c3d6f6..faf97c26b886631f058b34a9b98e2ded1f1e4472 100644
--- a/docs/tutorials/05_multispeed.md
+++ b/docs/tutorials/05_multispeed.md
@@ -114,7 +114,7 @@ The environment's `reset` takes care of applying the two generators:
         self.rail_generator: RailGenerator = rail_generator
         self.schedule_generator: ScheduleGenerator = schedule_generator
 
-    def reset(self, regen_rail=True, replace_agents=True):
+    def reset(self, regenerate_rail=True, regenerate_schedule=True):
         rail, optionals = self.rail_generator(self.width, self.height, self.get_num_agents(), self.num_resets)
 
         ...
diff --git a/flatland/envs/rail_env.py b/flatland/envs/rail_env.py
index 1dc24affd461ce585bceb6083df4feffe74c9b46..70312ecb31d0acf9e5fea13c022745aa77e52511 100644
--- a/flatland/envs/rail_env.py
+++ b/flatland/envs/rail_env.py
@@ -275,17 +275,37 @@ class RailEnv(Environment):
         alpha = 2
         return int(timedelay_factor * alpha * (width + height + ratio_nr_agents_to_nr_cities))
 
-    def reset(self, regen_rail=True, replace_agents=True, activate_agents=False, random_seed=None):
-        """ if regen_rail then regenerate the rails.
-            if replace_agents then regenerate the agents static.
-            Relies on the rail_generator returning agent_static lists (pos, dir, target)
+    def reset(self, regenerate_rail: bool = True, regenerate_schedule: bool = True, activate_agents: bool = False,
+              random_seed: bool = None) -> (Dict, Dict):
+        """
+        reset(regenerate_rail, regenerate_schedule, activate_agents, random_seed)
+
+        The method resets the rail environment
+
+        Parameters
+        ----------
+        regenerate_rail : bool, optional
+            regenerate the rails
+        regenerate_schedule : bool, optional
+            regenerate the schedule and the static agents
+        activate_agents : bool, optional
+            activate the agents
+        random_seed : bool, optional
+            random seed for environment
+
+        Returns
+        -------
+        observation_dict: Dict
+            Dictionary with an observation for each agent
+        info_dict: Dict with agent specific information
+
         """
 
         if random_seed:
             self._seed(random_seed)
 
         optionals = {}
-        if regen_rail or self.rail is None:
+        if regenerate_rail or self.rail is None:
             rail, optionals = self.rail_generator(self.width, self.height, self.get_num_agents(), self.num_resets)
 
             self.rail = rail
@@ -299,7 +319,9 @@ class RailEnv(Environment):
         if optionals and 'distance_map' in optionals:
             self.distance_map.set(optionals['distance_map'])
 
-        if replace_agents:
+        # todo change self.agents_static[0] with the refactoring for agents_static -> issue nr. 185
+        # https://gitlab.aicrowd.com/flatland/flatland/issues/185
+        if regenerate_schedule or self.agents_static[0] is None:
             agents_hints = None
             if optionals and 'agents_hints' in optionals:
                 agents_hints = optionals['agents_hints']
@@ -347,7 +369,7 @@ class RailEnv(Environment):
         self.obs_builder.reset()
         self.distance_map.reset(self.agents, self.rail)
 
-        info_dict = {
+        info_dict: Dict = {
             'action_required': {
                 i: (agent.status == RailAgentStatus.READY_TO_DEPART or (
                     agent.status == RailAgentStatus.ACTIVE and agent.speed_data['position_fraction'] == 0.0))
@@ -359,7 +381,8 @@ class RailEnv(Environment):
             'status': {i: agent.status for i, agent in enumerate(self.agents)}
         }
         # Return the new observation vectors for each agent
-        return self._get_observations(), info_dict
+        observation_dict: Dict = self._get_observations()
+        return observation_dict, info_dict
 
     def _agent_malfunction(self, i_agent) -> bool:
         """
diff --git a/flatland/evaluators/client.py b/flatland/evaluators/client.py
index 9322b6a8530cd3c77c246a2e74e99a8e2bc91ab9..ded1dc26ae43cb9d2da9e391a6c7e20f9767e9cd 100644
--- a/flatland/evaluators/client.py
+++ b/flatland/evaluators/client.py
@@ -195,7 +195,7 @@ class FlatlandRemoteClient(object):
                 "to point to the location of the Tests folder ? \n"
                 "We are currently looking at `{}` for the tests".format(self.test_envs_root)
             )
-        
+
         if self.verbose:
             print("Current env path : ", test_env_file_path)
         self.current_env_path = test_env_file_path
@@ -208,8 +208,8 @@ class FlatlandRemoteClient(object):
         )
 
         local_observation, info = self.env.reset(
-                                regen_rail=False,
-                                replace_agents=False,
+                                regenerate_rail=False,
+                                regenerate_schedule=False,
                                 activate_agents=False,
                                 random_seed=random_seed
                             )
diff --git a/flatland/evaluators/service.py b/flatland/evaluators/service.py
index 5c978d2939a1760e6644fd8f59689f6c8d3c19fc..0a4241e805554864b1efc5b23e40234d306a715f 100644
--- a/flatland/evaluators/service.py
+++ b/flatland/evaluators/service.py
@@ -353,8 +353,8 @@ class FlatlandRemoteEvaluationService:
             self.current_step = 0
 
             _observation, _info = self.env.reset(
-                                regen_rail=False,
-                                replace_agents=False,
+                                regenerate_rail=False,
+                                regenerate_schedule=False,
                                 activate_agents=False,
                                 random_seed=RANDOM_SEED
                                 )
diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py
index e5d55bb51241307d0bf9251eb20ea36faac479ba..f8c9afd0358d42c2829dc9b7c1fd7f3ad5198a3e 100644
--- a/flatland/utils/editor.py
+++ b/flatland/utils/editor.py
@@ -323,7 +323,7 @@ class Controller(object):
         self.log("Reset - nAgents:", self.view.regen_n_agents.value)
         self.log("Reset - size:", self.model.regen_size_width)
         self.log("Reset - size:", self.model.regen_size_height)
-        self.model.reset(replace_agents=self.view.replace_agents.value,
+        self.model.reset(regenerate_schedule=self.view.replace_agents.value,
                          nAgents=self.view.regen_n_agents.value)
 
     def rotate_agent(self, event):
@@ -611,7 +611,7 @@ class EditorModel(object):
         self.env.rail.grid[cell_row_col[0], cell_row_col[1]] = 0
         self.redraw()
 
-    def reset(self, replace_agents=False, nAgents=0):
+    def reset(self, regenerate_schedule=False, nAgents=0):
         self.regenerate("complex", nAgents=nAgents)
         self.redraw()
 
@@ -676,7 +676,7 @@ class EditorModel(object):
                                obs_builder_object=TreeObsForRailEnv(max_depth=2))
         else:
             self.env = env
-        self.env.reset(regen_rail=True)
+        self.env.reset(regenerate_rail=True)
         self.fix_env()
         self.set_env(self.env)
         self.view.new_env()
diff --git a/tests/test_flatland_envs_rail_env.py b/tests/test_flatland_envs_rail_env.py
index 066de27f39639b3438ccb0ab191ffbbc6bf41218..dc4c78f9a6796d8eef3cfbeb4c54409f14406415 100644
--- a/tests/test_flatland_envs_rail_env.py
+++ b/tests/test_flatland_envs_rail_env.py
@@ -9,9 +9,9 @@ from flatland.envs.agent_utils import EnvAgentStatic
 from flatland.envs.observations import GlobalObsForRailEnv, TreeObsForRailEnv
 from flatland.envs.predictions import ShortestPathPredictorForRailEnv
 from flatland.envs.rail_env import RailEnv
-from flatland.envs.rail_generators import complex_rail_generator
+from flatland.envs.rail_generators import complex_rail_generator, rail_from_file
 from flatland.envs.rail_generators import rail_from_grid_transition_map
-from flatland.envs.schedule_generators import random_schedule_generator, complex_schedule_generator
+from flatland.envs.schedule_generators import random_schedule_generator, complex_schedule_generator, schedule_from_file
 from flatland.utils.simple_rail import make_simple_rail
 
 """Tests for `flatland` package."""
@@ -84,7 +84,6 @@ def test_rail_environment_single_agent():
                        schedule_generator=random_schedule_generator(),
                        number_of_agents=1,
                        obs_builder_object=GlobalObsForRailEnv())
-    rail_env.reset()
 
     for _ in range(200):
         _ = rail_env.reset(False, False, True)
@@ -229,3 +228,66 @@ def test_get_entry_directions():
 
     # nowhere
     _assert((0, 0), [False, False, False, False])
+
+def test_rail_env_reset():
+    file_name = "test_rail_env_reset.pkl"
+
+    # Test to save and load file.
+
+    rail, rail_map = make_simple_rail()
+
+    env = RailEnv(width=rail_map.shape[1],
+                  height=rail_map.shape[0],
+                  rail_generator=rail_from_grid_transition_map(rail),
+                  schedule_generator=random_schedule_generator(),
+                  number_of_agents=3,
+                  obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
+                  )
+    env.reset()
+    env.save(file_name)
+    dist_map_shape = np.shape(env.distance_map.get())
+    # initialize agents_static
+    rails_initial = env.rail.grid
+    agents_initial = env.agents
+
+    env2 = RailEnv(width=1,
+                  height=1,
+                  rail_generator=rail_from_file(file_name),
+                  schedule_generator=schedule_from_file(file_name),
+                  number_of_agents=1,
+                  obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
+                  )
+    env2.reset(False, False, False)
+    rails_loaded = env2.rail.grid
+    agents_loaded = env2.agents
+
+    assert np.all(np.array_equal(rails_initial, rails_loaded))
+    assert agents_initial == agents_loaded
+
+    env3 = RailEnv(width=1,
+                  height=1,
+                  rail_generator=rail_from_file(file_name),
+                  schedule_generator=schedule_from_file(file_name),
+                  number_of_agents=1,
+                  obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
+                  )
+    env3.reset(False, True, False)
+    rails_loaded = env3.rail.grid
+    agents_loaded = env3.agents
+
+    assert np.all(np.array_equal(rails_initial, rails_loaded))
+    assert agents_initial == agents_loaded
+
+    env4 = RailEnv(width=1,
+                  height=1,
+                  rail_generator=rail_from_file(file_name),
+                  schedule_generator=schedule_from_file(file_name),
+                  number_of_agents=1,
+                  obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
+                  )
+    env4.reset(True, False, False)
+    rails_loaded = env4.rail.grid
+    agents_loaded = env4.agents
+
+    assert np.all(np.array_equal(rails_initial, rails_loaded))
+    assert agents_initial == agents_loaded
diff --git a/tests/test_flatland_envs_sparse_rail_generator.py b/tests/test_flatland_envs_sparse_rail_generator.py
index 6222cc2776d0e3741e894c61a95026bc6233e2a8..a1d0fb17ffbf48f77dbad5d7a01acc20e56e30f6 100644
--- a/tests/test_flatland_envs_sparse_rail_generator.py
+++ b/tests/test_flatland_envs_sparse_rail_generator.py
@@ -25,7 +25,6 @@ def test_sparse_rail_generator():
                   number_of_agents=10,
                   obs_builder_object=GlobalObsForRailEnv()
                   )
-    env.reset()
     env.reset(False, False, True)
     # for r in range(env.height):
     #    for c in range (env.width):
@@ -1345,7 +1344,6 @@ def test_rail_env_action_required_info():
                                 number_of_agents=10,
                                 obs_builder_object=GlobalObsForRailEnv(),
                                 remove_agents_at_target=False)
-    env_always_action.reset()
     np.random.seed(0)
     random.seed(0)
     env_only_if_action_required = RailEnv(width=50,
@@ -1361,7 +1359,6 @@ def test_rail_env_action_required_info():
                                           number_of_agents=10,
                                           obs_builder_object=GlobalObsForRailEnv(),
                                           remove_agents_at_target=False)
-    env_only_if_action_required.reset()
     env_renderer = RenderTool(env_always_action, gl="PILSVG", )
 
     env_always_action.reset(False, False, True)
@@ -1432,7 +1429,6 @@ def test_rail_env_malfunction_speed_info():
                   number_of_agents=10,
                   obs_builder_object=GlobalObsForRailEnv(),
                   stochastic_data=stochastic_data)
-    env.reset()
     env.reset(False, False, True)
 
     env_renderer = RenderTool(env, gl="PILSVG", )
diff --git a/tests/test_flatland_malfunction.py b/tests/test_flatland_malfunction.py
index ca8cfcf502fc1411636a6f000edca6633d7289a3..d9fa74ed364aed87ba936f74c39b0e4ab31771c0 100644
--- a/tests/test_flatland_malfunction.py
+++ b/tests/test_flatland_malfunction.py
@@ -81,7 +81,6 @@ def test_malfunction_process():
                   stochastic_data=stochastic_data,  # Malfunction data generator
                   obs_builder_object=SingleAgentNavigationObs()
                   )
-    env.reset()
     # reset to initialize agents_static
     obs, info = env.reset(False, False, True, random_seed=10)
 
@@ -197,7 +196,6 @@ def test_malfunction_before_entry():
                   random_seed=1,
                   stochastic_data=stochastic_data,  # Malfunction data generator
                   )
-    env.reset()
     # reset to initialize agents_static
     env.reset(False, False, False, random_seed=10)
     env.agents[0].target = (0, 0)
@@ -256,8 +254,6 @@ def test_initial_malfunction():
                   stochastic_data=stochastic_data,  # Malfunction data generator
                   obs_builder_object=SingleAgentNavigationObs()
                   )
-    env.reset()
-
     # reset to initialize agents_static
     env.reset(False, False, True, random_seed=10)
     print(env.agents[0].malfunction_data)
diff --git a/tests/tests_generators.py b/tests/test_generators.py
similarity index 97%
rename from tests/tests_generators.py
rename to tests/test_generators.py
index 9bfe3a47d0871cbfbbabb4e35eac0bd6ecaaedf0..1e69223daebd24c52137e12eed9dc43d188a9bbd 100644
--- a/tests/tests_generators.py
+++ b/tests/test_generators.py
@@ -25,6 +25,7 @@ def test_empty_rail_generator():
                   number_of_agents=n_agents,
                   rail_generator=empty_rail_generator()
                   )
+    env.reset()
     # Check the dimensions
     assert env.rail.grid.shape == (y_dim, x_dim)
     # Check that no grid was generated
@@ -45,6 +46,7 @@ def test_random_rail_generator():
                   number_of_agents=n_agents,
                   rail_generator=random_rail_generator()
                   )
+    env.reset()
     assert env.rail.grid.shape == (y_dim, x_dim)
     assert env.get_num_agents() == n_agents
 
@@ -63,6 +65,7 @@ def test_complex_rail_generator():
                   rail_generator=complex_rail_generator(nr_start_goal=n_start, nr_extra=0, min_dist=min_dist),
                   schedule_generator=complex_schedule_generator()
                   )
+    env.reset()
     assert env.get_num_agents() == 2
     assert env.rail.grid.shape == (y_dim, x_dim)
 
@@ -75,6 +78,7 @@ def test_complex_rail_generator():
                   rail_generator=complex_rail_generator(nr_start_goal=n_start, nr_extra=0, min_dist=min_dist),
                   schedule_generator=complex_schedule_generator()
                   )
+    env.reset()
     assert env.get_num_agents() == 0
     assert env.rail.grid.shape == (y_dim, x_dim)
 
@@ -89,6 +93,7 @@ def test_complex_rail_generator():
                   rail_generator=complex_rail_generator(nr_start_goal=n_start, nr_extra=0, min_dist=min_dist),
                   schedule_generator=complex_schedule_generator()
                   )
+    env.reset()
     assert env.get_num_agents() == n_agents
     assert env.rail.grid.shape == (y_dim, x_dim)
 
@@ -129,6 +134,7 @@ def tests_rail_from_file():
                   number_of_agents=3,
                   obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
                   )
+    env.reset()
     env.save(file_name)
     dist_map_shape = np.shape(env.distance_map.get())
     # initialize agents_static
@@ -142,6 +148,7 @@ def tests_rail_from_file():
                   number_of_agents=1,
                   obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv()),
                   )
+    env.reset()
     rails_loaded = env.rail.grid
     agents_loaded = env.agents
 
@@ -163,7 +170,7 @@ def tests_rail_from_file():
                    number_of_agents=3,
                    obs_builder_object=GlobalObsForRailEnv(),
                    )
-
+    env2.reset()
     env2.save(file_name_2)
 
     # initialize agents_static
@@ -177,7 +184,7 @@ def tests_rail_from_file():
                    number_of_agents=1,
                    obs_builder_object=GlobalObsForRailEnv(),
                    )
-
+    env2.reset()
     rails_loaded_2 = env2.rail.grid
     agents_loaded_2 = env2.agents
 
@@ -194,7 +201,7 @@ def tests_rail_from_file():
                    number_of_agents=1,
                    obs_builder_object=GlobalObsForRailEnv(),
                    )
-
+    env3.reset()
     rails_loaded_3 = env3.rail.grid
     agents_loaded_3 = env3.agents
 
@@ -212,7 +219,7 @@ def tests_rail_from_file():
                    number_of_agents=1,
                    obs_builder_object=TreeObsForRailEnv(max_depth=2),
                    )
-
+    env4.reset()
     rails_loaded_4 = env4.rail.grid
     agents_loaded_4 = env4.agents
 
diff --git a/tests/test_multi_speed.py b/tests/test_multi_speed.py
index 676cace09b398bfdc849e4e6678e0f155465b388..243ea078d0e920aeaab912f81553e17a5f37b1c1 100644
--- a/tests/test_multi_speed.py
+++ b/tests/test_multi_speed.py
@@ -55,7 +55,6 @@ def test_multi_speed_init():
                                                         seed=1),
                   schedule_generator=complex_schedule_generator(),
                   number_of_agents=5)
-    env.reset()
     # Initialize the agent with the parameters corresponding to the environment and observation_builder
     agent = RandomAgent(218, 4)
 
diff --git a/tests/test_random_seeding.py b/tests/test_random_seeding.py
index 4ffae761e427a8c147fae5941b922997ea2ea77b..a1981a9a0d2ed80b98f8d1e1fc8a49e14624afae 100644
--- a/tests/test_random_seeding.py
+++ b/tests/test_random_seeding.py
@@ -20,7 +20,6 @@ def test_random_seeding():
                       schedule_generator=random_schedule_generator(seed=12),
                       number_of_agents=10
                       )
-        env.reset()
         env.reset(True, True, False, random_seed=1)
 
         env.agents[0].target = (0, 0)
@@ -60,7 +59,6 @@ def test_seeding_and_observations():
                   number_of_agents=10,
                   obs_builder_object=GlobalObsForRailEnv()
                   )
-    env.reset()
     # Tree Observation
     env2 = RailEnv(width=25,
                    height=30,
@@ -69,7 +67,6 @@ def test_seeding_and_observations():
                    number_of_agents=10,
                    obs_builder_object=TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictorForRailEnv())
                    )
-    env2.reset()
 
     env.reset(False, False, False, random_seed=12)
     env2.reset(False, False, False, random_seed=12)
@@ -129,7 +126,6 @@ def test_seeding_and_malfunction():
                       obs_builder_object=GlobalObsForRailEnv(),
                       stochastic_data=stochastic_data,  # Malfunction data generator
                       )
-        env.reset()
 
         # Tree Observation
         env2 = RailEnv(width=25,
@@ -140,7 +136,6 @@ def test_seeding_and_malfunction():
                        obs_builder_object=GlobalObsForRailEnv(),
                        stochastic_data=stochastic_data,  # Malfunction data generator
                        )
-        env2.reset()
 
         env.reset(True, False, True, random_seed=tests)
         env2.reset(True, False, True, random_seed=tests)