diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml
index fe99d9d0a4e47c93ba69f6289086f4badff0b0e3..b4f4eb87d9788668de27da6930d7eba604266570 100644
--- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml
+++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml
@@ -51,9 +51,11 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>portal_type = context.getDeliveryPortalType()\n
-# make sure that the result of the simulation state is update to date, so check getSimulationState manually\n
-return [x.getObject() for x in context.portal_catalog(portal_type=portal_type,simulation_state=\'planned\') \n
-            if x.getObject().getSimulationState()==\'planned\']\n
+simulation_state = \'planned\'\n
+# use catalog to prefetch, but check later in ZODB\n
+return [x.getObject() for x in context.getPortalObject().portal_catalog(\n
+   portal_type=portal_type,\n
+   simulation_state=simulation_state) if x.getSimulationState() == simulation_state]\n
 </string> </value>
         </item>
         <item>
diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml
index 139f72dbbe6ca1af02e87459ded001c03a245e7d..36cf916aa57ef27a83b93c3e021b40fd443491c2 100644
--- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml
+++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml
@@ -54,7 +54,7 @@
 the new Invoice.\n
 """\n
 from Products.ERP5Type.Message import translateString\n
-\n
+from DateTime import DateTime\n
 if related_simulation_movement_path_list is None:\n
   raise RuntimeError, \'related_simulation_movement_path_list is missing. Update ERP5 Product.\'\n
 \n
@@ -65,6 +65,9 @@ if not invoice.Invoice_isAdvanced():\n
   if not invoice.getResource():\n
     invoice.setResource(invoice.getPriceCurrency())\n
 \n
+if invoice.getStartDate() is None:\n
+  invoice.setStartDate(DateTime())\n
+\n
 # initialize accounting_workflow to planned state\n
 plan_tag = \'%s_plan\' % invoice.getPath()\n
 if invoice.getSimulationState() == \'draft\':\n
diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml
index 1ce062763af36322357934bb61aceda27df0ce65..3706aeec8380bfc5d0460e8b89d10cb8591ead01 100644
--- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml
+++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml
@@ -51,6 +51,7 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>from Products.ERP5Type.Message import translateString\n
+from DateTime import DateTime\n
 \n
 payment_transaction = context\n
 \n
@@ -58,12 +59,29 @@ payment_transaction = context\n
 if payment_transaction.getSimulationState() == "draft":\n
   payment_transaction.plan(comment=translateString("Initialised by Delivery Builder."))\n
 \n
+if payment_transaction.getStartDate() is None:\n
+  payment_transaction.setStartDate(DateTime())\n
+\n
 # First set the payment transaction in the building state on the causality workflow\n
 payment_transaction.startBuilding()\n
 \n
 # Then an activity should put the causality state in diverged or solved\n
 payment_transaction.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
   (\'immediateReindexObject\',\'recursiveImmediateReindexObject\'))).updateCausalityState()\n
+\n
+# update casuality from movements\n
+causality_list = payment_transaction.getCausalityList()\n
+causality_list.sort()\n
+modified = 0\n
+for movement in payment_transaction.getMovementList():\n
+  movement_causality = movement.getCausality()\n
+  if movement_causality not in causality_list:\n
+    modified = 1\n
+    causality_list.append(movement_causality)\n
+\n
+if modified:\n
+  causality_list.sort()\n
+  payment_transaction.setCausalityList(causality_list)\n
 </string> </value>
         </item>
         <item>
diff --git a/master/bt5/vifib_base/bt/revision b/master/bt5/vifib_base/bt/revision
index 6ffe0d0bf6ccb6246fd343665efe0b19df8b2e8b..b2786cdcdc01d7ec1c11b9d3bcfb793bf3a81643 100644
--- a/master/bt5/vifib_base/bt/revision
+++ b/master/bt5/vifib_base/bt/revision
@@ -1 +1 @@
-348
\ No newline at end of file
+351
\ No newline at end of file
diff --git a/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml b/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml
index 2fd85293f6e86995d9c6408906abdd05ddcaf0d1..aa3740e94f680d5a005e2fee7eceb91e966e78e1 100644
--- a/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml
+++ b/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml
@@ -127,9 +127,7 @@
         </item>
         <item>
             <key> <string>preferred_payzen_integration_site</string> </key>
-            <value>
-              <none/>
-            </value>
+            <value> <string>portal_integrations/vifib_payzen_integration</string> </value>
         </item>
         <item>
             <key> <string>preferred_software_setup_resource</string> </key>
diff --git a/master/bt5/vifib_data/bt/revision b/master/bt5/vifib_data/bt/revision
index 7730ef7f3e0586b9070623baed6032dff904c9ea..0fa6a7b088051e48b8dc94d598b7e324e6f691c9 100644
--- a/master/bt5/vifib_data/bt/revision
+++ b/master/bt5/vifib_data/bt/revision
@@ -1 +1 @@
-89
\ No newline at end of file
+90
\ No newline at end of file
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml
index d8899479b7ff504275128938ce1163fc9dee1231..48613af25e7920f360dcabff475d3a8dc354c293 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml
@@ -114,9 +114,7 @@
             <key> <string>completed_state</string> </key>
             <value>
               <tuple>
-                <string>confirmed</string>
                 <string>delivered</string>
-                <string>started</string>
                 <string>stopped</string>
               </tuple>
             </value>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml
index c6f50510426c86132db6bc672d368e4cd7398da6..c862f3dc7e27ef5a004a36ef2e4d0602fabc147a 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml
@@ -115,9 +115,7 @@
         <item>
             <key> <string>completed_state</string> </key>
             <value>
-              <tuple>
-                <string>confirmed</string>
-              </tuple>
+              <tuple/>
             </value>
         </item>
         <item>
@@ -149,6 +147,14 @@
               <none/>
             </value>
         </item>
+        <item>
+            <key> <string>frozen_state</string> </key>
+            <value>
+              <tuple>
+                <string>delivered</string>
+              </tuple>
+            </value>
+        </item>
         <item>
             <key> <string>id</string> </key>
             <value> <string>pay</string> </value>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml
index a3c6a5248ead1b590c7358412125fa8f1c47f32c..4d0b1cc48a8c998b76b73d7542dac9446c0728c6 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml
@@ -37,13 +37,10 @@
             <key> <string>tested_property</string> </key>
             <value>
               <tuple>
-                <string>source_payment</string>
-                <string>destination_payment</string>
                 <string>source_section</string>
                 <string>destination_section</string>
                 <string>payment_mode</string>
                 <string>resource</string>
-                <string>specialise</string>
               </tuple>
             </value>
         </item>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml
index ed0a8776011f21236fd39aab82aa981b5a119a9a..3e71e2caac73b1f524c8b8110ef11f1ca289375c 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml
@@ -27,7 +27,7 @@
         </item>
         <item>
             <key> <string>int_index</string> </key>
-            <value> <int>2</int> </value>
+            <value> <int>1</int> </value>
         </item>
         <item>
             <key> <string>portal_type</string> </key>
@@ -41,6 +41,9 @@
                 <string>destination</string>
                 <string>source_project</string>
                 <string>destination_project</string>
+                <string>source_payment</string>
+                <string>destination_payment*</string>
+                <string>specialise</string>
               </tuple>
             </value>
         </item>
@@ -48,6 +51,10 @@
             <key> <string>title</string> </key>
             <value> <string>category_movement_group_on_line</string> </value>
         </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
       </dictionary>
     </pickle>
   </record>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml
similarity index 84%
rename from master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml
rename to master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml
index 2b93245cbc5740c5165f762cabbbb0eb857bf0be..42261dffcafc02acd693cd1a003649612d129a1d 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml
@@ -10,7 +10,7 @@
             <key> <string>categories</string> </key>
             <value>
               <tuple>
-                <string>collect_order_group/delivery</string>
+                <string>collect_order_group/line</string>
               </tuple>
             </value>
         </item>
@@ -22,7 +22,7 @@
         </item>
         <item>
             <key> <string>id</string> </key>
-            <value> <string>delivery_causality_assignement_movement_group_on_delivery</string> </value>
+            <value> <string>delivery_causality_assignement_movement_group_on_line</string> </value>
         </item>
         <item>
             <key> <string>int_index</string> </key>
@@ -34,7 +34,7 @@
         </item>
         <item>
             <key> <string>title</string> </key>
-            <value> <string>Delivery Causality Assignement Movement Group On Delivery</string> </value>
+            <value> <string>delivery_causality_assignement_movement_group_on_line</string> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml
similarity index 79%
rename from master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml
rename to master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml
index 6436fb8009629d30dc9893cdcc1b0c9221156277..72d9b3461f45a1a915b2ab889f5c2f9b48527f56 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml
@@ -11,7 +11,7 @@
             <value>
               <tuple>
                 <string>divergence_scope/property</string>
-                <string>collect_order_group/delivery</string>
+                <string>collect_order_group/line</string>
               </tuple>
             </value>
         </item>
@@ -23,7 +23,7 @@
         </item>
         <item>
             <key> <string>id</string> </key>
-            <value> <string>property_movement_group_on_delivery</string> </value>
+            <value> <string>property_movement_group_on_line</string> </value>
         </item>
         <item>
             <key> <string>int_index</string> </key>
@@ -44,7 +44,11 @@
         </item>
         <item>
             <key> <string>title</string> </key>
-            <value> <string>property_movement_group_on_delivery</string> </value>
+            <value> <string>property_movement_group_on_line</string> </value>
+        </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml
index 7b8ec3ffd695789ee1775de1617def1a87bb2a1c..8ee0e4f2f7f7b6b663119297c35d251693601da3 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml
@@ -126,7 +126,7 @@
         </item>
         <item>
             <key> <string>delivery_select_method_id</string> </key>
-            <value> <string>VifibInvoiceBuilder_selectPlannedSaleInvoiceList</string> </value>
+            <value> <string>VifibDeliveryBuilder_selectPlannedDeliveryList</string> </value>
         </item>
         <item>
             <key> <string>description</string> </key>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml
index 302a013b8eea6711e67543b5630d21815f4ca9ea..47523661434ac1707e7b4c3366d22744154ff4f9 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml
@@ -27,7 +27,7 @@
         </item>
         <item>
             <key> <string>int_index</string> </key>
-            <value> <int>2</int> </value>
+            <value> <int>1</int> </value>
         </item>
         <item>
             <key> <string>portal_type</string> </key>
@@ -37,8 +37,6 @@
             <key> <string>tested_property</string> </key>
             <value>
               <tuple>
-                <string>delivery_mode</string>
-                <string>incoterm</string>
                 <string>source</string>
                 <string>destination</string>
                 <string>source_section</string>
@@ -51,6 +49,10 @@
             <key> <string>title</string> </key>
             <value> <string>category_movement_group_on_delivery</string> </value>
         </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
       </dictionary>
     </pickle>
   </record>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml
index 5c6e19eec86e185759d8ece3e961572a7512efa0..ede4d2f59c5eea3bd10dbfda7b163c966b5d70dc 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml
@@ -55,6 +55,8 @@
                 <string>destination_project</string>
                 <string>source_payment</string>
                 <string>destination_payment</string>
+                <string>delivery_mode</string>
+                <string>incoterm</string>
               </tuple>
             </value>
         </item>
@@ -62,6 +64,10 @@
             <key> <string>title</string> </key>
             <value> <string>category_movement_group_on_line</string> </value>
         </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
       </dictionary>
     </pickle>
   </record>
diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml
index 0fe758a8c496b65a051b0c7ea8760dbf3df94ecf..025c542be9fc5a67e9ee8c278328b5910a2372f1 100644
--- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml
+++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml
@@ -37,6 +37,7 @@
             <key> <string>tested_property</string> </key>
             <value>
               <tuple>
+                <string>specialise</string>
                 <string>resource</string>
                 <string>source</string>
                 <string>destination</string>
@@ -52,6 +53,10 @@
             <key> <string>title</string> </key>
             <value> <string>category_movement_group_on_line</string> </value>
         </item>
+        <item>
+            <key> <string>update_always</string> </key>
+            <value> <int>0</int> </value>
+        </item>
       </dictionary>
     </pickle>
   </record>
diff --git a/master/bt5/vifib_data_simulation/bt/revision b/master/bt5/vifib_data_simulation/bt/revision
index 9cd72aa941214d4cb8522dda34eb12cf878e3e8b..9d1ce53f8cc2ee2d55094091042b3fd02f9bd1ce 100644
--- a/master/bt5/vifib_data_simulation/bt/revision
+++ b/master/bt5/vifib_data_simulation/bt/revision
@@ -1 +1 @@
-72
\ No newline at end of file
+82
\ No newline at end of file
diff --git a/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml b/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bc872675527c8aa49c39a89ee19d67bc7d13ffec
--- /dev/null
+++ b/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml
@@ -0,0 +1,11 @@
+<local_roles_item>
+ <local_roles>
+  <role id='R-MEMBER'>
+   <item>Auditor</item>
+   <item>Author</item>
+  </role>
+  <role id='superluke'>
+   <item>Owner</item>
+  </role>
+ </local_roles>
+</local_roles_item>
\ No newline at end of file
diff --git a/master/bt5/vifib_erp5/bt/dependency_list b/master/bt5/vifib_erp5/bt/dependency_list
index 2df82551a8b0435060908288c236c57cd220c36f..b237e391ec812922c238bdfbe1b4f59dd71d624f 100644
--- a/master/bt5/vifib_erp5/bt/dependency_list
+++ b/master/bt5/vifib_erp5/bt/dependency_list
@@ -1 +1,2 @@
-vifib_data_simulation
\ No newline at end of file
+vifib_data_simulation
+vifib_data_payzen
\ No newline at end of file
diff --git a/master/bt5/vifib_erp5/bt/revision b/master/bt5/vifib_erp5/bt/revision
index 41a4a819ada66b2e8f7fea82f094eb1314f2e9ca..e8a4e6b71bedf09fc8698c29284df058b6ac5e8b 100644
--- a/master/bt5/vifib_erp5/bt/revision
+++ b/master/bt5/vifib_erp5/bt/revision
@@ -1 +1 @@
-328
\ No newline at end of file
+329
\ No newline at end of file
diff --git a/master/bt5/vifib_erp5/bt/template_local_role_list b/master/bt5/vifib_erp5/bt/template_local_role_list
index ed6667d89edcb1add06e5042d47e574e83f7b57c..a46e320b158cda80bb01c5aad7f3975dfbd6d482 100644
--- a/master/bt5/vifib_erp5/bt/template_local_role_list
+++ b/master/bt5/vifib_erp5/bt/template_local_role_list
@@ -47,6 +47,7 @@ person_module/test_vifib_user_developer
 portal_contributions
 portal_gadgets
 portal_integrations
+portal_integrations/vifib_payzen_integration
 product_module
 purchase_order_module
 purchase_packing_list_module
diff --git a/master/bt5/vifib_erp5/bt/template_local_roles_list b/master/bt5/vifib_erp5/bt/template_local_roles_list
index 06d80ad0ebc78ad97595ade3666c31e95870bcc5..a46e320b158cda80bb01c5aad7f3975dfbd6d482 100644
--- a/master/bt5/vifib_erp5/bt/template_local_roles_list
+++ b/master/bt5/vifib_erp5/bt/template_local_roles_list
@@ -12,8 +12,8 @@ account_module/refundable_vat
 account_module/sales
 accounting_module
 business_process_module
-business_process_module/vifib_sale_business_process
 business_process_module/vifib_purchase_business_process
+business_process_module/vifib_sale_business_process
 campaign_module
 component_module
 computer_module
@@ -47,6 +47,7 @@ person_module/test_vifib_user_developer
 portal_contributions
 portal_gadgets
 portal_integrations
+portal_integrations/vifib_payzen_integration
 product_module
 purchase_order_module
 purchase_packing_list_module
diff --git a/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml b/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml
new file mode 100644
index 0000000000000000000000000000000000000000..193a2fe8ca5e71bfb7bf256babcd24a49b970840
--- /dev/null
+++ b/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Alarm" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>active_sense_method_id</string> </key>
+            <value> <string>Alarm_registerPlannedPaymentTransactionPayzen</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>enabled</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>register_planned_payment_transaction_payzen</string> </value>
+        </item>
+        <item>
+            <key> <string>periodicity_hour</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_minute</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_minute_frequency</string> </key>
+            <value> <int>5</int> </value>
+        </item>
+        <item>
+            <key> <string>periodicity_month</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_month_day</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_start_date</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="DateTime" module="DateTime.DateTime"/>
+                </klass>
+                <tuple>
+                  <none/>
+                </tuple>
+                <state>
+                  <tuple>
+                    <float>1288051200.0</float>
+                    <string>GMT</string>
+                  </tuple>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_week</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Alarm</string> </value>
+        </item>
+        <item>
+            <key> <string>sense_method_id</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Register planned Payment Transaction in payzen</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml b/master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml
similarity index 81%
rename from master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml
rename to master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml
index 94761b55da16715b9f1bc7b98a8f5ec6487eeb06..eee99bcee1ff46e4dd096248ec868221cba16c3d 100644
--- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml
+++ b/master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml
@@ -50,21 +50,24 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>portal_catalog = context.getPortalObject().portal_catalog\n
-simulation_state = \'planned\'\n
-# use catalog to prefetch, but check later in ZODB\n
-return [q.getObject() for q in portal_catalog(\n
-    portal_type=\'Sale Invoice Transaction\',\n
-    simulation_state=simulation_state) if q.getSimulationState() == simulation_state]\n
+            <value> <string>portal = context.getPortalObject()\n
+for payment_transaction in portal.portal_catalog(\n
+      portal_type="Payment Transaction", \n
+      simulation_state="planned",\n
+      limit=10\n
+      ):\n
+  # do not trust catalog\n
+  if payment_transaction.getSimulationState() == \'planned\':\n
+    payment_transaction.PaymentTransaction_registerPayzen()\n
 </string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>**kw</string> </value>
+            <value> <string></string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
-            <value> <string>VifibInvoiceBuilder_selectPlannedSaleInvoiceList</string> </value>
+            <value> <string>Alarm_registerPlannedPaymentTransactionPayzen</string> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/master/bt5/vifib_payzen/bt/revision b/master/bt5/vifib_payzen/bt/revision
index 31ff414b74c276a48419201e1024d3b860413a3b..2e66562e2705f8e5c5ddccceeecaab861194f30a 100644
--- a/master/bt5/vifib_payzen/bt/revision
+++ b/master/bt5/vifib_payzen/bt/revision
@@ -1 +1 @@
-48
\ No newline at end of file
+49
\ No newline at end of file
diff --git a/master/bt5/vifib_payzen/bt/template_path_list b/master/bt5/vifib_payzen/bt/template_path_list
index 25716e18b34985bd915bdb8bbed9fd378f9af1c5..ceb755f869361ac943b45e3d967324d1d6405e45 100644
--- a/master/bt5/vifib_payzen/bt/template_path_list
+++ b/master/bt5/vifib_payzen/bt/template_path_list
@@ -1 +1,2 @@
-portal_alarms/payzen_update_confirmed_payment_transaction
\ No newline at end of file
+portal_alarms/payzen_update_confirmed_payment_transaction
+portal_alarms/register_planned_payment_transaction_payzen
\ No newline at end of file
diff --git a/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml b/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8c26796509d4ea2526f49602fc8e4b168df3d6a8
--- /dev/null
+++ b/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Alarm" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>active_sense_method_id</string> </key>
+            <value> <string>Alarm_stopPlannedSaleInvoiceTransaction</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>enabled</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>stop_planned_sale_invoice_transaction</string> </value>
+        </item>
+        <item>
+            <key> <string>periodicity_hour</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_minute</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_minute_frequency</string> </key>
+            <value> <int>5</int> </value>
+        </item>
+        <item>
+            <key> <string>periodicity_month</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_month_day</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_start_date</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="DateTime" module="DateTime.DateTime"/>
+                </klass>
+                <tuple>
+                  <none/>
+                </tuple>
+                <state>
+                  <tuple>
+                    <float>3660.0</float>
+                    <string>GMT</string>
+                  </tuple>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>periodicity_week</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Alarm</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Stop planned Sale Invoices before current month</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73d443efe132beeb43882f58c390ff490873ba25
--- /dev/null
+++ b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+from DateTime import DateTime\n
+from Products.ERP5Type.DateUtils import getClosestDate\n
+\n
+portal = context.getPortalObject()\n
+this_month = getClosestDate(target_date=DateTime())\n
+for sale_invoice_transaction in portal.portal_catalog(\n
+  portal_type=\'Sale Invoice Transaction\',\n
+  simulation_state=\'planned\',\n
+  limit=10,\n
+  **{"delivery.start_date": \'< %s\' % this_month}\n
+):\n
+  if sale_invoice_transaction.getSimulationState() == \'planned\' and sale_invoice_transaction.getStartDate() < this_month:\n
+    # do not trust catalog\n
+    sale_invoice_transaction.confirm()\n
+    sale_invoice_transaction.start()\n
+    sale_invoice_transaction.stop()\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>**kw</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Alarm_stopPlannedSaleInvoiceTransaction</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_slap/bt/revision b/master/bt5/vifib_slap/bt/revision
index ec52cb80b9b9cef0839254b8e8d1412ed04924dd..99f9f071dc26630c3d51364ba0f006051ee47b71 100644
--- a/master/bt5/vifib_slap/bt/revision
+++ b/master/bt5/vifib_slap/bt/revision
@@ -1 +1 @@
-501
\ No newline at end of file
+502
\ No newline at end of file
diff --git a/master/bt5/vifib_slap/bt/template_path_list b/master/bt5/vifib_slap/bt/template_path_list
index e97340224e9dc1485d3b441f446cbabd06e9ced4..109487b95b851ec08df18dc0ab75275623c5424a 100644
--- a/master/bt5/vifib_slap/bt/template_path_list
+++ b/master/bt5/vifib_slap/bt/template_path_list
@@ -1,4 +1,6 @@
 portal_alarms/confirm_ordered_sale_order
 portal_alarms/confirm_ordered_sale_order/**
+portal_alarms/stop_planned_sale_invoice_transaction
+portal_alarms/stop_planned_sale_invoice_transaction/**
 portal_alarms/vifib_trigger_build
 portal_alarms/vifib_trigger_build/**
\ No newline at end of file
diff --git a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py
index ead0ee53d1124642fa222d2421a204c73324f8f3..f5ff4d729e1e470a6405c9fb58e5c02b332c72d3 100644
--- a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py
+++ b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py
@@ -10,9 +10,6 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin):
   def stepTriggerBuild(self, sequence, **kw):
     self.portal.portal_alarms.vifib_trigger_build.activeSense()
 
-  def stepCheckPayment(self, sequence, **kw):
-    raise NotImplementedError
-
   def stepCheckSubscriptionSalePackingListCoverage(self, sequence, **kw):
     hosting_subscription = self.portal.portal_catalog.getResultValue(
       uid=sequence['hosting_subscription_uid'])
@@ -145,12 +142,17 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin):
     self.assertEqual(0, len(subscription_invoice_line_list))
 
     # invoice shall be solved
-    self.assertEqual('solved', setup_invoice_line_list[0].getCausalityState())
+    invoice =  setup_invoice_line_list[0].getParentValue()
+    self.assertEqual('solved', invoice.getCausalityState())
 
     # invoice shall have causality of one packing list
     self.assertEqual(
       [setup_delivery_line_list[0].getParentValue().getUid()],
-      setup_invoice_line_list[0].getParentValue().getCausalityUidList())
+      invoice.getCausalityUidList())
+
+    # there shall be no payment transaction related
+    self.assertEqual([], invoice.getCausalityRelatedList(
+      portal_type='Payment Transaction'))
 
     sequence.edit(
       subscription_delivery_uid_list=[q.getParentValue().getUid() for q in \
@@ -244,6 +246,352 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin):
       [q.getParentValue().getUid() for q in subscription_delivery_line_list if q.getSimulationState() == 'stopped']),
       sorted(setup_invoice_line_list[0].getParentValue().getCausalityUidList()))
 
+  def stepSelectPlannedInvoice(self, sequence, **kw):
+    hosting_subscription = self.portal.portal_catalog.getResultValue(
+      uid=sequence['hosting_subscription_uid'])
+
+    invoice_line = self.portal.portal_catalog.getResultValue(
+      portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription.getRelativeUrl(),
+      simulation_state='planned'
+    )
+
+    # there shall be no payment transaction related
+    self.assertEqual([], invoice_line.getParentValue().getCausalityRelatedList(
+      portal_type='Payment Transaction'))
+
+    sequence.edit(invoice_uid=invoice_line.getParentValue().getUid())
+
+  def stepConfirmInvoice(self, sequence, **kw):
+    self.portal.portal_catalog.getResultValue(
+      uid=sequence['invoice_uid']).confirm()
+
+  def stepCheckHostingSubscriptionConfirmedInvoiceDocumentCoverage(self,
+    sequence, **kw):
+    catalog = self.portal.portal_catalog
+    hosting_subscription = catalog.getResultValue(
+      uid=sequence['hosting_subscription_uid'])
+    hosting_subscription_url = hosting_subscription.getRelativeUrl()
+
+    # hosting is confirmed, so no invoice
+    hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+
+    self.assertEqual(1, len(hosting_delivery_line_list))
+    self.assertEqual('confirmed', hosting_delivery_line_list[0]\
+      .getSimulationState())
+
+    hosting_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+    self.assertEqual(0, len(hosting_invoice_line_list))
+
+    # setup is stopped, and has there is invoice
+    setup_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+
+    self.assertEqual(1, len(setup_delivery_line_list))
+    self.assertEqual('stopped', setup_delivery_line_list[0]\
+      .getSimulationState())
+
+    setup_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+    self.assertEqual(1, len(setup_invoice_line_list))
+    self.assertEqual('confirmed', setup_invoice_line_list[0]\
+      .getSimulationState())
+
+    # there are 10 confirmed and 2 stopped subscription, so 2 invoice line
+    subscription_delivery_line_list = catalog(
+      portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+
+    self.assertEqual(12, len(subscription_delivery_line_list))
+    self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2),
+      sorted([q.getSimulationState() for \
+      q in subscription_delivery_line_list]))
+
+    subscription_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+    self.assertEqual(2, len(subscription_invoice_line_list))
+    self.assertEqual(['confirmed', 'planned'],
+      sorted([q.getSimulationState() for q in subscription_invoice_line_list]))
+
+    # there are three invoice lines, where two share same invoice
+    # and other is on new one
+    self.assertEqual(
+      setup_invoice_line_list[0].getParentValue().getRelativeUrl(),
+      [q.getParentValue().getRelativeUrl() for q in \
+        subscription_invoice_line_list \
+          if q.getSimulationState() == 'confirmed'][0]
+    )
+    self.assertNotEqual(
+      setup_invoice_line_list[0].getParentValue().getRelativeUrl(),
+      [q.getParentValue().getRelativeUrl() for q in \
+        subscription_invoice_line_list \
+          if q.getSimulationState() == 'planned'][0]
+    )
+
+    confirmed_invoice = setup_invoice_line_list[0].getParentValue()
+    planned_invoice = [q.getParentValue() for q in \
+      subscription_invoice_line_list \
+        if q.getSimulationState() == 'planned'][0]
+
+    # invoices shall be solved
+    self.assertEqual('solved', planned_invoice.getCausalityState())
+    self.assertEqual('solved', confirmed_invoice.getCausalityState())
+
+    # there shall be no payment transaction related
+    self.assertEqual([], planned_invoice.getCausalityRelatedList(
+      portal_type='Payment Transaction'))
+    self.assertEqual([], confirmed_invoice.getCausalityRelatedList(
+      portal_type='Payment Transaction'))
+
+    # confirmed invoice shall have causality of two packing lists
+    self.assertEqual(
+      sorted([setup_delivery_line_list[0].getParentValue().getUid()] +
+      [q.getParentValue().getUid() for q in subscription_delivery_line_list \
+        if q.getSimulationState() == 'stopped' and \
+          q.getParentValue().getUid() != sequence['subscription_delivery_uid']]),
+      sorted(confirmed_invoice.getCausalityUidList()))
+
+    # planned invoice shall have causality of one packing list
+    self.assertEqual(
+      [q.getParentValue().getUid() for q in subscription_delivery_line_list \
+        if q.getSimulationState() == 'stopped' and \
+          q.getParentValue().getUid() == sequence['subscription_delivery_uid']],
+      planned_invoice.getCausalityUidList())
+
+  def stepStartInvoice(self, sequence, **kw):
+    self.portal.portal_catalog.getResultValue(
+      uid=sequence['invoice_uid']).start()
+
+  def stepStopInvoice(self, sequence, **kw):
+    self.portal.portal_catalog.getResultValue(
+      uid=sequence['invoice_uid']).stop()
+
+  def stepCheckHostingSubscriptionStoppedInvoiceDocumentCoverage(self,
+    sequence, **kw):
+    catalog = self.portal.portal_catalog
+    hosting_subscription = catalog.getResultValue(
+      uid=sequence['hosting_subscription_uid'])
+    hosting_subscription_url = hosting_subscription.getRelativeUrl()
+
+    # hosting is confirmed, so no invoice
+    hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+
+    self.assertEqual(1, len(hosting_delivery_line_list))
+    self.assertEqual('confirmed', hosting_delivery_line_list[0]\
+      .getSimulationState())
+
+    hosting_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+    self.assertEqual(0, len(hosting_invoice_line_list))
+
+    # setup is stopped, and has there is invoice
+    setup_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+
+    self.assertEqual(1, len(setup_delivery_line_list))
+    self.assertEqual('stopped', setup_delivery_line_list[0]\
+      .getSimulationState())
+
+    setup_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+    self.assertEqual(1, len(setup_invoice_line_list))
+    self.assertEqual('stopped', setup_invoice_line_list[0]\
+      .getSimulationState())
+
+    # there are 10 confirmed and 2 stopped subscription, so 2 invoice line
+    subscription_delivery_line_list = catalog(
+      portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+
+    self.assertEqual(12, len(subscription_delivery_line_list))
+    self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2),
+      sorted([q.getSimulationState() for \
+      q in subscription_delivery_line_list]))
+
+    subscription_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+    self.assertEqual(2, len(subscription_invoice_line_list))
+    self.assertEqual(['planned', 'stopped'],
+      sorted([q.getSimulationState() for q in subscription_invoice_line_list]))
+
+    # there are three invoice lines, where two share same invoice
+    # and other is on new one
+    self.assertEqual(
+      setup_invoice_line_list[0].getParentValue().getRelativeUrl(),
+      [q.getParentValue().getRelativeUrl() for q in \
+        subscription_invoice_line_list \
+          if q.getSimulationState() == 'stopped'][0]
+    )
+    self.assertNotEqual(
+      setup_invoice_line_list[0].getParentValue().getRelativeUrl(),
+      [q.getParentValue().getRelativeUrl() for q in \
+        subscription_invoice_line_list \
+          if q.getSimulationState() == 'planned'][0]
+    )
+
+    stopped_invoice = setup_invoice_line_list[0].getParentValue()
+    planned_invoice = [q.getParentValue() for q in \
+      subscription_invoice_line_list \
+        if q.getSimulationState() == 'planned'][0]
+
+    # invoices shall be solved
+    self.assertEqual('solved', planned_invoice.getCausalityState())
+    self.assertEqual('solved', stopped_invoice.getCausalityState())
+
+    # there shall be no payment transaction related to planned invoice
+    self.assertEqual([], planned_invoice.getCausalityRelatedList(
+      portal_type='Payment Transaction'))
+
+    # there shall be one payment transaction related to stopped invoice
+    payment_transaction_list = stopped_invoice.getCausalityRelatedValueList(
+      portal_type='Payment Transaction')
+    self.assertEqual(1, len(payment_transaction_list))
+    payment_transaction = payment_transaction_list[0]
+
+    # this payment transaction shall be planned and solved
+    self.assertEqual('planned', payment_transaction.getSimulationState())
+    self.assertEqual('solved', payment_transaction.getCausalityState())
+
+    # only this invoice shall be covered by this payment transaction
+    self.assertEqual(stopped_invoice.getRelativeUrl(),
+      payment_transaction.getCausality())
+
+    # this payment shall fully pay the invoice
+    self.assertEqual(stopped_invoice.getTotalPrice(),
+      payment_transaction.PaymentTransaction_getTotalPayablePrice())
+
+    # Stopped invoice shall have causality of two packing lists
+    self.assertEqual(
+      sorted([setup_delivery_line_list[0].getParentValue().getUid()] +
+      [q.getParentValue().getUid() for q in subscription_delivery_line_list \
+        if q.getSimulationState() == 'stopped' and \
+          q.getParentValue().getUid() != sequence['subscription_delivery_uid']]),
+      sorted(stopped_invoice.getCausalityUidList()))
+
+    # planned invoice shall have causality of one packing list
+    self.assertEqual(
+      [q.getParentValue().getUid() for q in subscription_delivery_line_list \
+        if q.getSimulationState() == 'stopped' and \
+          q.getParentValue().getUid() == sequence['subscription_delivery_uid']],
+      planned_invoice.getCausalityUidList())
+
+  def stepCheckHostingSubscriptionTwoStoppedInvoiceDocumentCoverage(self,
+    sequence, **kw):
+    catalog = self.portal.portal_catalog
+    hosting_subscription = catalog.getResultValue(
+      uid=sequence['hosting_subscription_uid'])
+    hosting_subscription_url = hosting_subscription.getRelativeUrl()
+
+    # hosting is confirmed, so no invoice
+    hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+
+    self.assertEqual(1, len(hosting_delivery_line_list))
+    self.assertEqual('confirmed', hosting_delivery_line_list[0]\
+      .getSimulationState())
+
+    hosting_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['hosting_resource'])
+    self.assertEqual(0, len(hosting_invoice_line_list))
+
+    # setup is stopped, and has there is invoice
+    setup_delivery_line_list = catalog(portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+
+    self.assertEqual(1, len(setup_delivery_line_list))
+    self.assertEqual('stopped', setup_delivery_line_list[0]\
+      .getSimulationState())
+
+    setup_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['setup_resource'])
+    self.assertEqual(1, len(setup_invoice_line_list))
+    self.assertEqual('stopped', setup_invoice_line_list[0]\
+      .getSimulationState())
+
+    # there are 10 confirmed and 2 stopped subscription, so 2 invoice line
+    subscription_delivery_line_list = catalog(
+      portal_type='Sale Packing List Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+
+    self.assertEqual(12, len(subscription_delivery_line_list))
+    self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2),
+      sorted([q.getSimulationState() for \
+      q in subscription_delivery_line_list]))
+
+    subscription_invoice_line_list = catalog(portal_type='Invoice Line',
+      aggregate_relative_url=hosting_subscription_url,
+      resource_relative_url=sequence['subscription_resource'])
+    self.assertEqual(2, len(subscription_invoice_line_list))
+    self.assertEqual(['stopped', 'stopped'],
+      sorted([q.getSimulationState() for q in subscription_invoice_line_list]))
+
+    # there are three invoice lines, where two share same invoice
+    # and other is on other one
+    first_invoice = setup_invoice_line_list[0].getParentValue()
+    second_invoice = [q.getParentValue() for q in subscription_invoice_line_list \
+      if q.getParentValue().getUid() != first_invoice.getUid()][0]
+
+    # invoices shall be solved
+    self.assertEqual('solved', first_invoice.getCausalityState())
+    self.assertEqual('solved', second_invoice.getCausalityState())
+
+    # both invoice shall have shared payment transaction
+    payment_transaction_list = first_invoice.getCausalityRelatedValueList(
+      portal_type='Payment Transaction')
+    self.assertEqual(1, len(payment_transaction_list))
+    payment_transaction = payment_transaction_list[0]
+    self.assertEqual([payment_transaction.getRelativeUrl()],
+      second_invoice.getCausalityRelatedList(
+        portal_type='Payment Transaction'))
+
+    # this payment transaction shall be planned and solved
+    self.assertEqual('planned', payment_transaction.getSimulationState())
+    self.assertEqual('solved', payment_transaction.getCausalityState())
+
+    # this payment shall fully pay both invoices
+    self.assertEqual(
+      first_invoice.getTotalPrice() + second_invoice.getTotalPrice(),
+      payment_transaction.PaymentTransaction_getTotalPayablePrice())
+
+    sequence.edit(payment_transaction_uid=payment_transaction.getUid())
+
+  def stepConfirmPayment(self, sequence, **kw):
+    self.portal.portal_catalog.getResultValue(
+      uid=sequence['payment_transaction_uid']).confirm()
+
+  def stepCheckPayment(self, sequence, **kw):
+    payment_transaction = self.portal.portal_catalog.getResultValue(
+      uid=sequence['payment_transaction_uid'])
+    self.assertEqual('confirmed', payment_transaction.getSimulationState())
+    self.assertEqual('solved', payment_transaction.getCausalityState())
+
+  def stepInvoiceSetStartDatePreviousMonth(self, sequence, **kw):
+    invoice = self.portal.portal_catalog.getResultValue(
+      uid=sequence['invoice_uid'])
+    invoice.setStartDate(getClosestDate(target_date=DateTime())-1)
+
+  def stepTriggerStopInvoiceAlarm(self, sequence, **kw):
+    self.portal.portal_alarms.stop_planned_sale_invoice_transaction.activeSense()
 
   def test_OpenOrder_sale_packing_list(self):
     """
@@ -263,7 +611,7 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin):
         # Nothing shall change
         CheckHostingSubscriptionInitialDocumentCoverage
 
-        # Stop first Subscriptoin delivery and after triggering build check
+        # Stop first Subscription delivery and after triggering build check
         # that invoice got updated
 
         SelectNextSubscriptionDelivery
@@ -276,6 +624,54 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin):
 
         CheckHostingSubscriptionStoppedDocumentCoverage
 
+        # proff that alarm will ignore this month invoices
+        TriggerStopInvoiceAlarm
+        Tic
+        CheckHostingSubscriptionStoppedDocumentCoverage
+
+        # Confirm current invoice and stop next delivery. After triggering build
+        # new planned invoice shall be available.
+
+        SelectPlannedInvoice
+        ConfirmInvoice
+        Tic
+
+        SelectNextSubscriptionDelivery
+        StartSubscriptionDelivery
+        StopSubscriptionDelivery
+        Tic
+
+        TriggerBuild
+        Tic
+
+        CheckHostingSubscriptionConfirmedInvoiceDocumentCoverage
+
+        # Lets check the payment
+
+        StartInvoice
+        StopInvoice
+        Tic
+
+        TriggerBuild
+        Tic
+
+        CheckHostingSubscriptionStoppedInvoiceDocumentCoverage
+
+        # Proof that alarm is capable to stop previous month invoice
+        SelectPlannedInvoice
+        InvoiceSetStartDatePreviousMonth
+        Tic
+        TriggerStopInvoiceAlarm
+        Tic
+
+        # Payment should cover both invoices
+        TriggerBuild
+        Tic
+
+        CheckHostingSubscriptionTwoStoppedInvoiceDocumentCoverage
+
+        ConfirmPayment
+        Tic
         CheckPayment
         """
     sequence_list.addSequenceString(sequence_string)