diff --git a/product/ERP5/Document/OpenOrderRule.py b/product/ERP5/Document/OpenOrderRule.py
index f692ecdcf1cf7e7e0732595c11b82c6d4d607356..daa11d130bd2a979a0d7d5fe7f35ba77fef1eb90 100644
--- a/product/ERP5/Document/OpenOrderRule.py
+++ b/product/ERP5/Document/OpenOrderRule.py
@@ -32,7 +32,6 @@ from Products.ERP5.Document.DeliveryRule import DeliveryRule
 from zLOG import LOG, WARNING
 from DateTime import DateTime
 
-
 class OpenOrderRule(DeliveryRule):
   """
   Order Rule object make sure an Order in the simulation
@@ -73,8 +72,12 @@ class OpenOrderRule(DeliveryRule):
       delivered child, and is in order, it can be modified.
       Else, it cannot be modified.
     """
-    movement_type = 'Simulation Movement'
     order = applied_rule.getDefaultCausalityValue()
+    if getattr(order, 'expandOpenOrderRule', None) is not None:
+      # Delegate implementation of expand to the SubscriptionItem or 
+      # to the OpenOrder instance
+      return order.expandOpenOrderRule(applied_rule, force=force, **kw)
+    movement_type = 'Simulation Movement'    
     if order is not None:
       order_movement_list = order.getMovementList(
         portal_type=order.getPortalOrderMovementTypeList())
@@ -184,4 +187,4 @@ class OpenOrderRule(DeliveryRule):
     for periodicity_line in periodicity_line_list:
       result.extend(periodicity_line.getDatePeriodList(schedule_start_date,
                                                        schedule_stop_date))
-    return result
+    return result
\ No newline at end of file