diff --git a/product/ERP5/tests/testERP5SimulationBPMEvaluation.py b/product/ERP5/tests/testERP5SimulationBPMEvaluation.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f1d82993b2c6f1526eeb874a7726d7fe3829bc7
--- /dev/null
+++ b/product/ERP5/tests/testERP5SimulationBPMEvaluation.py
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly advised to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+"""
+This is BPM Evaluation Test class using erp5_bpm development Business Template
+
+Generally it tries to use two Business Processes - one with sequence very
+similar to normal ERP5 - TestBPMEvaluationDefaultProcessMixin, second one
+inverted - TestBPMEvaluationDifferentProcessMixin.
+
+It uses only Sale path to demonstrate BPM.
+
+It is advised to *NOT* remove erp5_administration.
+"""
+import transaction
+
+from Products.ERP5.tests.testBPMCore import TestBPMMixin
+from Products.ERP5.tests.testBPMEvaluation import \
+     TestBPMEvaluationMixin, \
+     test_suite
+
+if True:
+  def getBusinessTemplateList(self):
+    return TestBPMMixin.getBusinessTemplateList(self) + ('erp5_bpm',
+        'erp5_administration', 'erp5_simulation',)
+
+  TestBPMEvaluationMixin.getBusinessTemplateList = getBusinessTemplateList
+
+  def _createRootTradeRule(self, **kw):
+    edit_dict = {}
+    edit_dict.update(
+      trade_phase = 'default/delivery',
+    )
+    edit_dict.update(**kw)
+    rule = self.rule_tool.newContent(**edit_dict)
+
+    # matching providers
+    for category in ('resource', 'order'):
+      rule.newContent(
+        portal_type='Category Membership Divergence Tester',
+        title='%s divergence tester' % category,
+        tested_property=category,
+        divergence_provider=False,
+        matching_provider=True)
+    rule.newContent(
+      portal_type='Variation Divergence Tester',
+      title='variation divergence tester',
+      tested_property='variation_property_dict',
+      divergence_provider=False,
+      matching_provider=True)
+
+    # divergence providers
+    for category in ('source_section',
+                     'resource',
+                     'destination_section',
+                     'source',
+                     'aggregate'):
+      rule.newContent(
+        portal_type='Category Membership Divergence Tester',
+        title='%s divergence tester' % category,
+        tested_property=category,
+        divergence_provider=True,
+        matching_provider=False)
+    rule.newContent(
+      portal_type='Net Converted Quantity Divergence Tester',
+      title='quantity divergence tester',
+      tested_property='quantity',
+      quantity=0,
+      divergence_provider=True,
+      matching_provider=False)
+    for property_id in ('start_date', 'stop_date'):
+      rule.newContent(
+        portal_type='DateTime Divergence Tester',
+        title='%s divergence tester' % property_id,
+        tested_property=property_id,
+        quantity=0,
+        divergence_provider=True,
+        matching_provider=False)
+    rule.newContent(
+      portal_type='Float Divergence Tester',
+      title='price divergence tester',
+      tested_property='price',
+      quantity=0,
+      divergence_provider=True,
+      matching_provider=False)
+
+    return rule
+
+  TestBPMEvaluationMixin._createRootTradeRule = _createRootTradeRule
+
+  def _createInvoicingRule(self):
+    edit_dict = {}
+    edit_dict.update(
+    )
+    rule = self.rule_tool.newContent(portal_type='Invoicing Rule',
+      reference='default_invoicing_rule',
+      trade_phase = 'default/invoicing',
+      test_method_id = ('SimulationMovement_testInvoicingRule',)
+      )
+    # matching providers
+    for category in ('resource',):
+      rule.newContent(
+        portal_type='Category Membership Divergence Tester',
+        title='%s divergence tester' % category,
+        tested_property=category,
+        divergence_provider=False,
+        matching_provider=True)
+    rule.newContent(
+      portal_type='Variation Divergence Tester',
+      title='variation divergence tester',
+      tested_property='variation_property_dict',
+      divergence_provider=False,
+      matching_provider=True)
+
+    # divergence providers
+    for category in ('resource',
+                     'source_section',
+                     'destination_section',
+                     'source',
+                     'source_function',
+                     'destination_function',
+                     'source_project',
+                     'destination_project',
+                     'aggregate',
+                     'price_currency',
+                     'base_contribution',
+                     'base_application',
+                     'source_account',
+                     'destination_account',
+                     ):
+      rule.newContent(
+        portal_type='Category Membership Divergence Tester',
+        title='%s divergence tester' % category,
+        tested_property=category,
+        divergence_provider=True,
+        matching_provider=False)
+    rule.newContent(
+      portal_type='Net Converted Quantity Divergence Tester',
+      title='quantity divergence tester',
+      tested_property='quantity',
+      quantity=0,
+      divergence_provider=True,
+      matching_provider=False)
+    for property_id in ('start_date', 'stop_date'):
+      rule.newContent(
+        portal_type='DateTime Divergence Tester',
+        title='%s divergence tester' % property_id,
+        tested_property=property_id,
+        quantity=0,
+        divergence_provider=True,
+        matching_provider=False)
+    rule.newContent(
+      portal_type='Float Divergence Tester',
+      title='price divergence tester',
+      tested_property='price',
+      quantity=0,
+      divergence_provider=True,
+      matching_provider=False)
+
+    rule.validate()
+    transaction.commit()
+
+  TestBPMEvaluationMixin._createInvoicingRule = _createInvoicingRule