diff --git a/product/ERP5/Document/SimulationMovement.py b/product/ERP5/Document/SimulationMovement.py
index 32b390b83cdd4fd5ce9be48348b3744f33b08899..e8f17dd78e0307baea26b21b906bcab6e48ff1ff 100644
--- a/product/ERP5/Document/SimulationMovement.py
+++ b/product/ERP5/Document/SimulationMovement.py
@@ -245,19 +245,18 @@ class SimulationMovement(Movement, PropertyRecordableMixin):
         sort_order='descending'):
       reference = rule.getReference()
       if reference:
-        applicable_rule_dict.setdefault(reference, []).append(rule)
+        applicable_rule_dict.setdefault(reference, rule)
 
     for applied_rule in list(self.objectValues()):
       rule = applied_rule.getSpecialiseValue()
-      if rule in applicable_rule_dict.get(rule.getReference(), ()) \
-              or applied_rule._isTreeDelivered():
+      if rule.test(self) or applied_rule._isTreeDelivered():
         applied_rule_dict[rule.getReference()] = applied_rule
       else:
         self._delObject(applied_rule.getId())
 
-    for reference, rule_list in applicable_rule_dict.iteritems():
+    for reference, rule in applicable_rule_dict.iteritems():
       if reference not in applied_rule_dict:
-        applied_rule = rule_list[0].constructNewAppliedRule(self, **kw)
+        applied_rule = rule.constructNewAppliedRule(self, **kw)
         applied_rule_dict[reference] = applied_rule
 
     self.setCausalityState('expanded')