diff --git a/product/ERP5/Document/TradeCondition.py b/product/ERP5/Document/TradeCondition.py
index d5fe3c0179e29e206bae663089b136ef74647fc4..3dfae8c05817b1c5ba0cd188c10bbde68742f9bf 100644
--- a/product/ERP5/Document/TradeCondition.py
+++ b/product/ERP5/Document/TradeCondition.py
@@ -105,7 +105,10 @@ class TradeCondition(Path, Transformation):
       trade_model_line_composed_list = []
       containting_object_list = []
       if context is not None:
-        containting_object_list.append(context)
+        document = context
+        if getattr(context, 'getExplanationValue', None) is not None:
+          document = context.getExplanationValue()
+        containting_object_list.append(document)
       containting_object_list.extend(findSpecialiseValueList(self))
 
       for specialise in containting_object_list:
diff --git a/product/ERP5/tests/testBPMCore.py b/product/ERP5/tests/testBPMCore.py
index 93478f448c23e45674745b03cb505a7334babb9c..dea6a466a69184a8a08fbaac6be45ba6e18b6870 100644
--- a/product/ERP5/tests/testBPMCore.py
+++ b/product/ERP5/tests/testBPMCore.py
@@ -1096,11 +1096,15 @@ class TestBPMMixin(ERP5TypeTestCase):
       order_line_discounted_taxed = order_line
     )
 
-  def createTradeModelLine(self, trade_condition, **kw):
-    return trade_condition.newContent(
+  def createTradeModelLine(self, document, **kw):
+    return document.newContent(
         portal_type='Trade Model Line',
         **kw)
 
+  def stepOrderCreateTradeModelLine(self, sequence=None, **kw):
+    order = sequence.get('order')
+    sequence.edit(trade_model_line = self.createTradeModelLine(order))
+
   def stepCreateTradeModelLine(self, sequence=None, **kw):
     trade_condition = sequence.get('trade_condition')
     sequence.edit(trade_model_line = self.createTradeModelLine(trade_condition))
@@ -1519,6 +1523,48 @@ class TestBPMTestCases(TestBPMMixin):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)
 
+  order_specialise_aggregated_amount_common_sequence_string = \
+      common_documents_creation + """
+              CreateBusinessProcess
+              CreateBusinessState
+              ModifyBusinessStateTaxed
+              CreateBusinessState
+              ModifyBusinessStateInvoiced
+              CreateBusinessPath
+              ModifyBusinessPathTaxing
+              CreateBusinessPath
+              ModifyBusinessPathDiscounting
+              CreateTradeCondition
+              SpecialiseTradeConditionWithBusinessProcess
+              CreateTradeModelLine
+              ModifyTradeModelLineTax
+              Tic
+              CreateOrder
+              OrderCreateTradeModelLine
+              ModifyTradeModelLineDiscount
+              SpecialiseOrderTradeCondition
+              FillOrder
+              Tic
+              CreateOrderLine
+              ModifyOrderLineTaxed
+              CreateOrderLine
+              ModifyOrderLineDiscounted
+              CreateOrderLine
+              ModifyOrderLineDiscountedTaxed
+              Tic
+    """ + aggregated_amount_list_check
+
+  def test_getAggreagtedAmountListOrderSpecialise(self):
+    """
+      Test for case, when discount contributes to tax, and order has mix of contributing lines and order itself defines Trade Model Line
+    """
+    sequence_list = SequenceList()
+    sequence_string = self\
+        .order_specialise_aggregated_amount_common_sequence_string
+
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
   def test_getAggreagtedAmountList_afterUpdateAggregatedAmountList(self):
     """
       Test for case, when discount contributes to tax, and order has mix of contributing lines
@@ -1569,6 +1615,34 @@ class TestBPMTestCases(TestBPMMixin):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)
 
+  trade_model_rule_simulation_common_order_specialised_string = \
+      order_specialise_aggregated_amount_common_sequence_string + """
+              Tic
+              PlanOrder
+              Tic
+  """ + aggregated_amount_simulation_check
+
+  def test_TradeModelRuleSimulationExpandOrderSpecialise(self):
+    """Tests tree of simulations from Trade Model Rule"""
+    sequence_list = SequenceList()
+    sequence_string = self \
+        .trade_model_rule_simulation_common_order_specialised_string
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def test_TradeModelRuleSimulationReexpandOrderSpecialise(self):
+    """Tests tree of simulations from Trade Model Rule with reexpanding"""
+    sequence_list = SequenceList()
+    sequence_string = self \
+        .trade_model_rule_simulation_common_order_specialised_string+ """
+              ModifyAgainOrderLineTaxed
+              ModifyAgainOrderLineDiscounted
+              ModifyAgainOrderLineDiscountedTaxed
+              Tic
+    """ + self.aggregated_amount_simulation_check
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
   def test_TradeModelRuleSimulationWithoutBPM(self):
     """Tests tree of simulations from Trade Model Rule when there is no BPM"""
     sequence_list = SequenceList()