diff --git a/src/main/resources/templates/gluon/reinforcement/environment/Environment.ftl b/src/main/resources/templates/gluon/reinforcement/environment/Environment.ftl
index 2744dec07f3a756c08a74eeddefb699214e6c94d..0bb1adb93d0e7911f8ef96c180c9e9976c039d83 100644
--- a/src/main/resources/templates/gluon/reinforcement/environment/Environment.ftl
+++ b/src/main/resources/templates/gluon/reinforcement/environment/Environment.ftl
@@ -113,6 +113,7 @@ class RosEnvironment(Environment):
         reward_topic='reward'):
         super(RosEnvironment, self).__init__()
         self.__timeout_in_s = timeout_in_s
+        self.__in_reset = False
         self.__waiting_for_state_update = False
         self.__waiting_for_terminal_update = False
         self.__last_received_state = 0
@@ -149,13 +150,18 @@ class RosEnvironment(Environment):
         time.sleep(2)
 
     def reset(self):
+        self.__in_reset = True
         time.sleep(0.5)
         reset_message = Bool()
         reset_message.data = True
         self.__waiting_for_state_update = True
+        self.__waiting_for_terminal_update = False
+        self.__waiting_for_reward_update = False
         self.__reset_publisher.publish(reset_message)
+        self.__wait_for_new_state(self.__reset_publisher, reset_message)
         while self.__last_received_terminal:
-            self.__wait_for_new_state(self.__reset_publisher, reset_message)
+            pass
+        self.__in_reset = False
         return self.__last_received_state
 
     def step(self, action):