diff --git a/product/ERP5/Document/Order.py b/product/ERP5/Document/Order.py
index 1f21e463ec46f27fdd0571c2dffb42b476de09d6..2bea34b2f8814ece59d86a0d39b20fd08d5bac25 100644
--- a/product/ERP5/Document/Order.py
+++ b/product/ERP5/Document/Order.py
@@ -75,20 +75,13 @@ class Order(Delivery):
       if kw.get('fast'):
         kw['only_accountable'] = False
       rounding = kw.get('rounding')
+
       if kw.get('base_contribution') is None:
         kw.setdefault('portal_type', self.getPortalOrderMovementTypeList())
         return Delivery.getTotalPrice(self, **kw)
       else:
-        # Find amounts from the result of getAggregatedAmountList.
-        # Call getAggregatedAmountList and sum all the amounts which
-        # base_contribution category is matched with.
-        from Products.ERP5Type.Document import newTempTradeModelLine
-        from Products.ERP5.PropertySheet.TradeModelLine import TARGET_LEVEL_MOVEMENT
-        trade_condition = self.getSpecialiseValue()
-        if trade_condition is None:
-          # We cannot find any amount so that the result is 0.
-          return 0
         base_contribution = kw.get('base_contribution')
+        # Find amounts from movements in the delivery.
         if isinstance(base_contribution, (tuple, list)):
           base_contribution_list = base_contribution
         else:
@@ -102,20 +95,25 @@ class Order(Delivery):
         if not base_contribution_value_list:
           # We cannot find any amount so that the result is 0.
           return 0
-        current_aggregated_amount_list = trade_condition.getAggregatedAmountList(self, rounding=rounding, force_create_line=True)
-        trade_model_line = newTempTradeModelLine(
-            self, '_temp_' + self.getId(), notify_workflow=False)
-        # prevent invoking interaction workflows.
-        trade_model_line.portal_type = ''
-        trade_model_line.edit(target_level=TARGET_LEVEL_MOVEMENT, price=1,
-                              efficiency=1, quantity=None,
-                              base_application_value_list=base_contribution_value_list)
-        aggregated_amount_list = trade_model_line._getAggregatedAmountList(
-            self,
-            movement_list=self.getMovementList(),
-            current_aggregated_amount_list=current_aggregated_amount_list,
-            rounding=rounding)
-        return aggregated_amount_list.getTotalPrice()
+
+        movement_list = self.getMovementList()
+
+
+        if rounding:
+          portal_roundings = self.portal_roundings
+          movement_list = [
+              portal_roundings.getRoundingProxy(movement)
+                for movement in movement_list]
+
+        trade_model_line_list = self.getAggregatedAmountList(rounding=rounding)
+        matched_model_line_list = [ line for line in trade_model_line_list
+              if set(line.getBaseApplicationValueList()).intersection(base_contribution_value_list)]
+
+        result = sum([movement.getTotalPrice()
+                          for movement in movement_list])
+        result += sum([line.getTotalPrice()
+                        for line in matched_model_line_list])
+        return result
 
     def getTotalQuantity(self, **kw) :
       """Returns the total quantity for this Order. """