diff --git a/examples/simple_example_1.py b/examples/simple_example_1.py
new file mode 100644
index 0000000000000000000000000000000000000000..70d2e73a71e676f92c7b11698be90ba93d2331f4
--- /dev/null
+++ b/examples/simple_example_1.py
@@ -0,0 +1,33 @@
+import random
+
+from flatland.envs.generators import random_rail_generator, rail_from_manual_specifications_generator
+from flatland.envs.rail_env import RailEnv
+from flatland.envs.observations import TreeObsForRailEnv
+from flatland.utils.rendertools import RenderTool
+import numpy as np
+
+# Example generate a rail given a manual specification,
+# a map of tuples (cell_type, rotation)
+specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
+         [(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)],
+         [(7, 270), (1, 90), (1, 90), (1, 90), (2, 90), (7, 90)],
+         [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]]
+
+# CURVED RAIL + DEAD-ENDS TEST
+# specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
+#          [(7, 270), (1, 90), (1, 90), (8, 90), (0, 0), (0, 0)],
+#          [(0, 0),   (7, 270),(1, 90), (8, 180), (0, 00), (0, 0)],
+#          [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]]
+
+env = RailEnv(width=6,
+              height=4,
+              rail_generator=rail_from_manual_specifications_generator(specs),
+              number_of_agents=1,
+              obs_builder_object=TreeObsForRailEnv(max_depth=2))
+
+env.reset()
+
+env_renderer = RenderTool(env, gl="QT")
+env_renderer.renderEnv(show=True)
+
+input("Press Enter to continue...")
diff --git a/examples/simple_example_2.py b/examples/simple_example_2.py
new file mode 100644
index 0000000000000000000000000000000000000000..535e9c9e784305a8bf049daa67fa40979b569c79
--- /dev/null
+++ b/examples/simple_example_2.py
@@ -0,0 +1,43 @@
+import random
+
+from flatland.envs.generators import random_rail_generator, rail_from_list_of_saved_GridTransitionMap_generator
+from flatland.envs.rail_env import RailEnv
+from flatland.envs.observations import TreeObsForRailEnv
+from flatland.utils.rendertools import RenderTool
+import numpy as np
+
+random.seed(100)
+np.random.seed(100)
+
+# Relative weights of each cell type to be used by the random rail generators.
+transition_probability = [1.0,  # empty cell - Case 0
+                          1.0,  # Case 1 - straight
+                          1.0,  # Case 2 - simple switch
+                          0.3,  # Case 3 - diamond drossing
+                          0.5,  # Case 4 - single slip
+                          0.5,  # Case 5 - double slip
+                          0.2,  # Case 6 - symmetrical
+                          0.0,  # Case 7 - dead end
+                          0.2,  # Case 8 - turn left
+                          0.2,  # Case 9 - turn right
+                          1.0]  # Case 10 - mirrored switch
+
+# Example generate a random rail
+env = RailEnv(width=10,
+              height=10,
+              rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability),
+              number_of_agents=3,
+              obs_builder_object=TreeObsForRailEnv(max_depth=2))
+
+# env = RailEnv(width=10,
+#               height=10,
+#               rail_generator=rail_from_list_of_saved_GridTransitionMap_generator(['examples/sample_10_10_rail.npy']),
+#               number_of_agents=3,
+#               obs_builder_object=TreeObsForRailEnv(max_depth=2))
+
+env.reset()
+
+env_renderer = RenderTool(env, gl="QT")
+env_renderer.renderEnv(show=True)
+
+input("Press Enter to continue...")
diff --git a/examples/simple_example_3.py b/examples/simple_example_3.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0830ff751d15d425d22fcdc6c38b5ffc68197d5
--- /dev/null
+++ b/examples/simple_example_3.py
@@ -0,0 +1,53 @@
+import random
+
+from flatland.envs.generators import random_rail_generator, random_rail_generator
+from flatland.envs.rail_env import RailEnv
+from flatland.utils.rendertools import RenderTool
+import numpy as np
+
+random.seed(100)
+np.random.seed(100)
+
+env = RailEnv(width=7,
+              height=7,
+              rail_generator=random_rail_generator(),
+              number_of_agents=2)
+
+# Print the distance map of each cell to the target of the first agent
+# for i in range(4):
+#     print(env.obs_builder.distance_map[0, :, :, i])
+
+# Print the observation vector for agent 0
+obs, all_rewards, done, _ = env.step({0: 0})
+for i in range(env.get_num_agents()):
+    env.obs_builder.util_print_obs_subtree(tree=obs[i], num_features_per_node=5)
+
+env_renderer = RenderTool(env, gl="QT")
+env_renderer.renderEnv(show=True)
+
+print("Manual control: s=perform step, q=quit, [agent id] [1-2-3 action] \
+       (turnleft+move, move to front, turnright+move)")
+for step in range(100):
+    cmd = input(">> ")
+    cmds = cmd.split(" ")
+
+    action_dict = {}
+
+    i = 0
+    while i < len(cmds):
+        if cmds[i] == 'q':
+            import sys
+
+            sys.exit()
+        elif cmds[i] == 's':
+            obs, all_rewards, done, _ = env.step(action_dict)
+            action_dict = {}
+            print("Rewards: ", all_rewards, "  [done=", done, "]")
+        else:
+            agent_id = int(cmds[i])
+            action = int(cmds[i + 1])
+            action_dict[agent_id] = action
+            i = i + 1
+        i += 1
+
+    env_renderer.renderEnv(show=True)
diff --git a/examples/temporary_example.py b/examples/temporary_example.py
deleted file mode 100644
index 862369411056d87d411c3e173bd479e9a7e93e01..0000000000000000000000000000000000000000
--- a/examples/temporary_example.py
+++ /dev/null
@@ -1,127 +0,0 @@
-import random
-
-from flatland.envs.generators import random_rail_generator
-from flatland.envs.rail_env import RailEnv
-from flatland.utils.rendertools import RenderTool
-import numpy as np
-
-random.seed(0)
-np.random.seed(0)
-
-transition_probability = [1.0,  # empty cell - Case 0
-                          1.0,  # Case 1 - straight
-                          1.0,  # Case 2 - simple switch
-                          0.3,  # Case 3 - diamond drossing
-                          0.5,  # Case 4 - single slip
-                          0.5,  # Case 5 - double slip
-                          0.2,  # Case 6 - symmetrical
-                          0.0,  # Case 7 - dead end
-                          0.2,  # Case 8 - turn left
-                          0.2,  # Case 9 - turn right
-                          1.0]  # Case 10 - mirrored switch
-
-"""
-# Example generate a random rail
-env = RailEnv(width=20,
-              height=20,
-              rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability),
-              number_of_agents=10)
-
-# env = RailEnv(width=20,
-#               height=20,
-#               rail_generator=rail_from_list_of_saved_GridTransitionMap_generator(['examples/sample_10_10_rail.npy']),
-#               number_of_agents=10)
-
-env.reset()
-
-env_renderer = RenderTool(env)
-env_renderer.renderEnv(show=True)
-"""
-"""
-# Example generate a rail given a manual specification,
-# a map of tuples (cell_type, rotation)
-specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)],
-         [(7, 270), (1, 90), (1, 90), (1, 90), (2, 90), (7, 90)]]
-
-env = RailEnv(width=6,
-              height=2,
-              rail_generator=rail_from_manual_specifications_generator(specs),
-              number_of_agents=1,
-              obs_builder_object=TreeObsForRailEnv(max_depth=2))
-
-handle = env.get_agent_handles()
-env.agents_position[0] = [1, 4]
-env.agents_target[0] = [1, 1]
-env.agents_direction[0] = 1
-# TODO: watch out: if these variables are overridden, the obs_builder object has to be reset, too!
-env.obs_builder.reset()
-"""
-"""
-# INFINITE-LOOP TEST
-specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)],
-         [(7, 270), (1, 90), (1, 90), (2, 270), (2, 0), (0, 0)],
-         [(0, 0), (0, 0), (0, 0), (2, 180), (2, 90), (7, 90)],
-         [(0, 0), (0, 0), (0, 0), (7, 180), (0, 0), (0, 0)]]
-
-# CURVED RAIL + DEAD-ENDS TEST
-specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
-         [(7, 270), (1, 90), (1, 90), (8, 90), (0, 0), (0, 0)],
-         [(0, 0),   (7, 270),(1, 90), (8, 180), (0, 00), (0, 0)]]
-
-env = RailEnv(width=6,
-              height=4,
-              rail_generator=rail_from_manual_specifications_generator(specs),
-              number_of_agents=1,
-              obs_builder_object=TreeObsForRailEnv(max_depth=2))
-
-handle = env.get_agent_handles()
-env.agents_position[0] = [1, 3]
-env.agents_target[0] = [1, 1]
-env.agents_direction[0] = 1
-# TODO: watch out: if these variables are overridden, the obs_builder object has to be reset, too!
-env.obs_builder.reset()
-"""
-env = RailEnv(width=7,
-              height=7,
-              rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability),
-              # rail_generator=complex_rail_generator(nr_start_goal=2),
-              number_of_agents=2)
-
-# Print the distance map of each cell to the target of the first agent
-# for i in range(4):
-#     print(env.obs_builder.distance_map[0, :, :, i])
-
-# Print the observation vector for agent 0
-obs, all_rewards, done, _ = env.step({0: 0})
-for i in range(env.get_num_agents()):
-    env.obs_builder.util_print_obs_subtree(tree=obs[i], num_features_per_node=5)
-
-env_renderer = RenderTool(env, gl="QT")
-env_renderer.renderEnv(show=True)
-
-print("Manual control: s=perform step, q=quit, [agent id] [1-2-3 action] \
-       (turnleft+move, move to front, turnright+move)")
-for step in range(100):
-    cmd = input(">> ")
-    cmds = cmd.split(" ")
-
-    action_dict = {}
-
-    i = 0
-    while i < len(cmds):
-        if cmds[i] == 'q':
-            import sys
-
-            sys.exit()
-        elif cmds[i] == 's':
-            obs, all_rewards, done, _ = env.step(action_dict)
-            action_dict = {}
-            print("Rewards: ", all_rewards, "  [done=", done, "]")
-        else:
-            agent_id = int(cmds[i])
-            action = int(cmds[i + 1])
-            action_dict[agent_id] = action
-            i = i + 1
-        i += 1
-
-    env_renderer.renderEnv(show=True)