diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp
index b13c77149975ac211a8e0f2f19794cb02248c434..235eab368dccfd2c41dde312a6f24264388a7813 100644
--- a/src/language/PugsParser.cpp
+++ b/src/language/PugsParser.cpp
@@ -81,6 +81,8 @@ parser(const std::string& filename)
     ExecutionPolicy exec_all;
     root_node->execute(exec_all);
     std::cout << *(root_node->m_symbol_table) << '\n';
+
+    root_node->m_symbol_table->clearValues();
   };
 
   if (not SignalManager::pauseOnError()) {
@@ -103,5 +105,5 @@ parser(const std::string& filename)
     read_input input(filename);
     parse_and_execute(input);
   }
-  std::cout << "Parsed: " << filename << '\n';
+  std::cout << "Executed successfuly: " << filename << '\n';
 }
diff --git a/src/language/node_processor/ASTNodeListProcessor.hpp b/src/language/node_processor/ASTNodeListProcessor.hpp
index be0e786ac5a98b564399efee177957325fcd6005..df29d82de3cf317aa02ddb3f49838ec0a0325c0e 100644
--- a/src/language/node_processor/ASTNodeListProcessor.hpp
+++ b/src/language/node_processor/ASTNodeListProcessor.hpp
@@ -17,6 +17,9 @@ class ASTNodeListProcessor final : public INodeProcessor
       child->execute(exec_policy);
     }
 
+    if (not(m_node.is_root() or m_node.is_type<language::for_statement_block>()))
+      m_node.m_symbol_table->clearValues();
+
     return {};
   }
 
diff --git a/src/language/node_processor/DoWhileProcessor.hpp b/src/language/node_processor/DoWhileProcessor.hpp
index a8240cf34a822a768bfd28f2861005062e386235..5b03b769ffe3e376c5e8bddafa91db5d01e2f59f 100644
--- a/src/language/node_processor/DoWhileProcessor.hpp
+++ b/src/language/node_processor/DoWhileProcessor.hpp
@@ -37,6 +37,8 @@ class DoWhileProcessor final : public INodeProcessor
         },
         m_node.children[1]->execute(exec_policy)));
     } while (continuation_test);
+
+    m_node.children[0]->m_symbol_table->clearValues();
     return {};
   }
 
diff --git a/src/language/node_processor/ForProcessor.hpp b/src/language/node_processor/ForProcessor.hpp
index 83c2f8ceed2d2038bff2696e8fc6bc422a15cce8..8680aaf7ded0f7fabbc345682a9a32c772a44f08 100644
--- a/src/language/node_processor/ForProcessor.hpp
+++ b/src/language/node_processor/ForProcessor.hpp
@@ -38,6 +38,8 @@ class ForProcessor final : public INodeProcessor
 
       m_node.children[2]->execute(exec_policy);
     }
+
+    m_node.m_symbol_table->clearValues();
     return {};
   }
 
diff --git a/src/language/node_processor/IfProcessor.hpp b/src/language/node_processor/IfProcessor.hpp
index c1af1b99c5b7913fcabfa9633421813270c6ff6b..1a76e3068dcb6bd29f4e4e250dc3d6cc1f9f6d41 100644
--- a/src/language/node_processor/IfProcessor.hpp
+++ b/src/language/node_processor/IfProcessor.hpp
@@ -26,14 +26,21 @@ class IfProcessor final : public INodeProcessor
     if (is_true) {
       Assert(m_node.children[1] != nullptr);
       m_node.children[1]->execute(exec_policy);
+      if (m_node.children[1]->m_symbol_table != m_node.m_symbol_table)
+        m_node.children[1]->m_symbol_table->clearValues();
+
     } else {
       if (m_node.children.size() == 3) {
         // else statement
         Assert(m_node.children[2] != nullptr);
         m_node.children[2]->execute(exec_policy);
+        if (m_node.children[2]->m_symbol_table != m_node.m_symbol_table)
+          m_node.children[2]->m_symbol_table->clearValues();
       }
     }
 
+    if (m_node.children[0]->m_symbol_table != m_node.m_symbol_table)
+      m_node.children[0]->m_symbol_table->clearValues();
     return {};
   }
 
diff --git a/src/language/node_processor/WhileProcessor.hpp b/src/language/node_processor/WhileProcessor.hpp
index b0f27a8a5deeea459138ab7d68176841aa9c7f56..20b0ac985ae43bfaf3f9b165f9a346aa82a9f3cb 100644
--- a/src/language/node_processor/WhileProcessor.hpp
+++ b/src/language/node_processor/WhileProcessor.hpp
@@ -36,6 +36,7 @@ class WhileProcessor final : public INodeProcessor
       }
     }
 
+    m_node.children[1]->m_symbol_table->clearValues();
     return {};
   }
 
diff --git a/src/language/utils/SymbolTable.hpp b/src/language/utils/SymbolTable.hpp
index 246749dabde8bbbda683415d0b6afd75d7baba64..3eba77ec9c495a50183acda709abf030cbfc522b 100644
--- a/src/language/utils/SymbolTable.hpp
+++ b/src/language/utils/SymbolTable.hpp
@@ -263,6 +263,14 @@ class SymbolTable
     return os;
   }
 
+  void
+  clearValues()
+  {
+    for (auto& symbol : m_symbol_list) {
+      symbol.attributes().value() = DataVariant{};
+    }
+  }
+
   auto
   find(const std::string& symbol, const TAO_PEGTL_NAMESPACE::position& use_position)
   {
diff --git a/src/mesh/SynchronizerManager.cpp b/src/mesh/SynchronizerManager.cpp
index 8e2346c793053bd4e8799978542eda2d6e554dc7..b1301bd88a341cae40c348e1239f673636f5b818 100644
--- a/src/mesh/SynchronizerManager.cpp
+++ b/src/mesh/SynchronizerManager.cpp
@@ -5,14 +5,6 @@
 
 SynchronizerManager* SynchronizerManager::m_instance{nullptr};
 
-SynchronizerManager::~SynchronizerManager()
-{
-  if (m_connectivity_synchronizer_map.size() > 0) {
-    std::cerr << __FILE__ << ':' << __LINE__ << ": warning: some connectivities are still registered\n";
-    ;
-  }
-}
-
 void
 SynchronizerManager::create()
 {
@@ -24,6 +16,16 @@ void
 SynchronizerManager::destroy()
 {
   Assert(m_instance != nullptr, "SynchronizerManager was not created!");
+
+  if (m_instance->m_connectivity_synchronizer_map.size() > 0) {
+    std::stringstream error;
+    error << ": some connectivities are still registered\n";
+    for (const auto& i_connectivity_synchronizer : m_instance->m_connectivity_synchronizer_map) {
+      error << " - connectivity " << rang::fgB::magenta << i_connectivity_synchronizer.first << rang::style::reset
+            << '\n';
+    }
+    throw UnexpectedError(error.str());
+  }
   delete m_instance;
   m_instance = nullptr;
 }
diff --git a/src/mesh/SynchronizerManager.hpp b/src/mesh/SynchronizerManager.hpp
index e0e4519c1dd339cd7c67a5dbbeac4f49bf120a7c..79cb3db0a3473bdbe9f88d4d20836a835aca9260 100644
--- a/src/mesh/SynchronizerManager.hpp
+++ b/src/mesh/SynchronizerManager.hpp
@@ -18,10 +18,10 @@ class SynchronizerManager
   static SynchronizerManager* m_instance;
 
   SynchronizerManager(const SynchronizerManager&) = delete;
-  SynchronizerManager(SynchronizerManager&)       = delete;
+  SynchronizerManager(SynchronizerManager&&)      = delete;
 
-  SynchronizerManager() = default;
-  ~SynchronizerManager();
+  SynchronizerManager()  = default;
+  ~SynchronizerManager() = default;
 
  public:
   static void create();