diff --git a/product/ERP5/Document/OrderBuilder.py b/product/ERP5/Document/OrderBuilder.py
index eca1244c9057ce41795b830b635559f9f4ba847c..a6cb5a6b28e6e9f803f57894d5f0c9aec0a9df0c 100644
--- a/product/ERP5/Document/OrderBuilder.py
+++ b/product/ERP5/Document/OrderBuilder.py
@@ -96,7 +96,7 @@ class OrderBuilder(XMLObject, Amount, Predicate):
 
   security.declarePublic('build')
   def build(self, applied_rule_uid=None, movement_relative_url_list=None,
-            delivery_relative_url_list=None,**kw):
+            delivery_relative_url_list=None, movement_list=None, **kw):
     """
       Build deliveries from a list of movements
 
@@ -109,16 +109,19 @@ class OrderBuilder(XMLObject, Amount, Predicate):
       movement_relative_url_list = []
     if delivery_relative_url_list is None:
       delivery_relative_url_list = []
+    if movement_list is None:
+      movement_list = []
     # Call a script before building
     self.callBeforeBuildingScript()
     # Select
-    if len(movement_relative_url_list) == 0:
-      movement_list = self.searchMovementList(
-                                      delivery_relative_url_list=delivery_relative_url_list,
-                                      applied_rule_uid=applied_rule_uid,**kw)
-    else:
-      movement_list = [self.restrictedTraverse(relative_url) for relative_url \
-                       in movement_relative_url_list]
+    if not len(movement_list):
+      if len(movement_relative_url_list) == 0:
+        movement_list = self.searchMovementList(
+                                        delivery_relative_url_list=delivery_relative_url_list,
+                                        applied_rule_uid=applied_rule_uid,**kw)
+      else:
+        movement_list = [self.restrictedTraverse(relative_url) for relative_url \
+                         in movement_relative_url_list]
     # Collect
     root_group_node = self.collectMovement(movement_list)
     # Build