diff --git a/pyAmakCore/classes/amas.py b/pyAmakCore/classes/amas.py
index 39868c5dfa21c94d3d9f10fb1d29120d8931d323..d24b11510190a8bbb38eae15c38fba0080166e53 100644
--- a/pyAmakCore/classes/amas.py
+++ b/pyAmakCore/classes/amas.py
@@ -30,6 +30,9 @@ class Amas(Schedulable, Loggable):
         Loggable.__init__(self)
         self.__environment: Environment = environment
         self.__agents: List[Agent] = []
+        self.__agent_to_add: List[Agent] = []
+        self.__agent_to_remove: List[Agent] = []
+
         self.__nbrcycle: int = 0
 
         self.__scheduler: Scheduler = Scheduler()
@@ -40,6 +43,11 @@ class Amas(Schedulable, Loggable):
 
         self.on_initial_agents_creation()
 
+        for agent in self.__agent_to_add:
+            if agent not in self.__agents:
+                self.__agents.append(agent)
+        self.__agent_to_add = []
+
         for agent in self.__agents:
             agent.compute_criticality()
 
@@ -52,9 +60,9 @@ class Amas(Schedulable, Loggable):
         """
         add agent in the amas agents list without duplicate
         """
-        if agent in self.__agents:
+        if agent in self.__agents or agent in self.__agent_to_add:
             return
-        self.__agents.append(agent)
+        self.__agent_to_add.append(agent)
 
     def add_agents(self, agents: List[Agent]) -> None:
         """
@@ -67,9 +75,7 @@ class Amas(Schedulable, Loggable):
         """
         remove agent from amas
         """
-        if agent not in self.__agents:
-            return
-        self.__agents.remove(agent)
+        self.__agent_to_remove.append(agent)
 
     def get_environment(self) -> Environment:
         """
@@ -120,6 +126,11 @@ class Amas(Schedulable, Loggable):
         """
         print("Cycle : ", self.__nbrcycle)
 
+        for agent in self.__agent_to_add:
+            if agent not in self.__agents:
+                self.__agents.append(agent)
+        self.__agent_to_add = []
+
         self.on_cycle_begin()
         self.synchronization()
 
@@ -146,6 +157,12 @@ class Amas(Schedulable, Loggable):
         self.synchronization()
 
         self.on_cycle_end()
+
+        for agent in self.__agent_to_remove:
+            if agent in self.__agents:
+                self.__agents.remove(agent)
+        self.__agent_to_remove = []
+
         self.to_csv(self.get_cycle(), self.get_agents())
         self.__nbrcycle += 1
 
diff --git a/pyAmakCore/classes/tools/loggable.py b/pyAmakCore/classes/tools/loggable.py
index a74ba82837f2ee142aa621989c80e10dad95c939..094e4f0ab9ce6789398d85a181a4872de0e8b58b 100644
--- a/pyAmakCore/classes/tools/loggable.py
+++ b/pyAmakCore/classes/tools/loggable.py
@@ -14,6 +14,7 @@ class Loggable:
     def __init__(self):
         self.__do_log = False
         self.__file_path = None
+        self.__ignore_attribute = ["_Agent__amas", "_Agent__environment"]
 
     def to_csv(self, cycle: int, var_list: List['Agent']) -> None:
         """
@@ -22,8 +23,7 @@ class Loggable:
         if not self.__do_log:
             return
 
-        ignore_attribute = ["_Agent__amas", "_Agent__environment"]
-        table = [{**{e: x[e] for e in x if e not in ignore_attribute},
+        table = [{**{e: x[e] for e in x if e not in self.__ignore_attribute},
                   **{'nombre_cycle': cycle}} for x in map(vars, var_list)]
         dataframe = DataFrame(table)
 
@@ -46,3 +46,17 @@ class Loggable:
         specify path to csv
         """
         self.__file_path = path_to_file
+
+    def add_ignore_attribute(self, attribute: str) -> None:
+        """
+        add attribute in ignored attribute
+        """
+        self.__ignore_attribute.append(attribute)
+
+    def remove_ignore_attribute(self, attribute: str) -> None:
+        """
+        remove attribute in ignored attribute
+        """
+        if attribute not in self.__ignore_attribute:
+            return
+        self.__ignore_attribute.remove(attribute)
diff --git a/pyAmakCore/tests/test_amas/test_agent.py b/pyAmakCore/tests/test_amas/test_agent.py
index c5b623ab8c92bb2d62e2af4e93ac6ee2cef01d1d..e43150f67f56a23074c9a934c3f706401a997a83 100644
--- a/pyAmakCore/tests/test_amas/test_agent.py
+++ b/pyAmakCore/tests/test_amas/test_agent.py
@@ -8,6 +8,11 @@ from pyAmakCore.classes.amas import Amas
 from pyAmakCore.classes.environment import Environment
 from pyAmakCore.classes.agent import Agent
 
+class SimplerAmas(Amas):
+
+    def synchronization(self):
+        self._Amas__scheduler.give_amas_token()
+        super().synchronization()
 
 class TestAmasAgents(TestCase):
     """
@@ -33,27 +38,31 @@ class TestAmasAgents(TestCase):
         """
 
         environment = Environment()
-        amas = Amas(environment)
+        amas = SimplerAmas(environment)
 
         agent1 = Agent(amas)
         agent2 = Agent(amas)
         agent3 = Agent(amas)
         # add 1 agent
         amas.add_agent(agent1)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1])
 
         # don't remove previous agent
         amas.add_agent(agent2)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2])
 
         # add agent in good order
         amas.add_agent(agent3)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2, agent3])
 
         # don't add duplicate
         amas.add_agent(agent1)
         amas.add_agent(agent2)
         amas.add_agent(agent3)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2, agent3])
 
     def test_add_agents(self) -> None:
@@ -62,7 +71,7 @@ class TestAmasAgents(TestCase):
         """
 
         environment = Environment()
-        amas = Amas(environment)
+        amas = SimplerAmas(environment)
 
         agent1 = Agent(amas)
         agent2 = Agent(amas)
@@ -71,36 +80,43 @@ class TestAmasAgents(TestCase):
         agent5 = Agent(amas)
 
         amas.add_agents([agent1, agent2, agent3, agent4, agent5])
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2, agent3, agent4, agent5])
 
-        amas = Amas(environment)
+        amas = SimplerAmas(environment)
         amas.add_agents([agent1, agent2])
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2])
 
         amas.add_agents([agent1, agent2, agent4, agent2, agent3])
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent2, agent4, agent3])
 
     def test_remove_agent(self) -> None:
         environment = Environment()
-        amas = Amas(environment)
+        amas = SimplerAmas(environment)
 
         agent1 = Agent(amas)
         agent2 = Agent(amas)
         agent3 = Agent(amas)
 
         amas.remove_agent(agent2)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [])
 
         amas.add_agents([agent1, agent2, agent3])
 
         amas.remove_agent(agent2)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent3])
 
         amas.remove_agent(agent2)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [agent1, agent3])
 
         amas.remove_agent(agent1)
         amas.remove_agent(agent3)
+        amas.cycle()
         self.assertEqual(amas.get_agents(), [])