diff --git a/bt5/erp5_base/ActionTemplateItem/portal_types/Previous%20Causality%20Movement%20Group/view.xml b/bt5/erp5_base/ActionTemplateItem/portal_types/Previous%20Causality%20Movement%20Group/view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef34a510072c7e7680954dac3bc6832070385ae2
--- /dev/null
+++ b/bt5/erp5_base/ActionTemplateItem/portal_types/Previous%20Causality%20Movement%20Group/view.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>action</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>categories</string> </key>
+            <value>
+              <tuple>
+                <string>action_type/object_view</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>category</string> </key>
+            <value> <string>object_view</string> </value>
+        </item>
+        <item>
+            <key> <string>condition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>icon</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>view</string> </value>
+        </item>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>View</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>priority</string> </key>
+            <value> <float>1.0</float> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>View</string> </value>
+        </item>
+        <item>
+            <key> <string>visible</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Expression" module="Products.CMFCore.Expression"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>string:${object_url}/MovementGroup_view</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_base/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml b/bt5/erp5_base/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
index c23dd256a32a93080a6afe8e5ea5ae5912face37..4dc887ee45b05d4417333c055c7883019bcce064 100644
--- a/bt5/erp5_base/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
+++ b/bt5/erp5_base/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
@@ -30,6 +30,7 @@
   <item>Parent Delivery Property Movement Group</item>
   <item>Parent Explanation Movement Group</item>
   <item>Predicate</item>
+  <item>Previous Causality Movement Group</item>
   <item>Property Assignment Movement Group</item>
   <item>Property Grouping Movement Group</item>
   <item>Property Movement Group</item>
diff --git a/bt5/erp5_base/PortalTypeTemplateItem/portal_types/Previous%20Causality%20Movement%20Group.xml b/bt5/erp5_base/PortalTypeTemplateItem/portal_types/Previous%20Causality%20Movement%20Group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d110cde224efc4192846f7db29787b0e05fa1669
--- /dev/null
+++ b/bt5/erp5_base/PortalTypeTemplateItem/portal_types/Previous%20Causality%20Movement%20Group.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Base Type" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>acquire_local_roles</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>content_icon</string> </key>
+            <value> <string>document_icon.gif</string> </value>
+        </item>
+        <item>
+            <key> <string>content_meta_type</string> </key>
+            <value> <string>ERP5 Causality Movement Group</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string>  The purpose of MovementGroup is to define how movements are grouped,\n
+  and how values are updated from simulation movements.\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>factory</string> </key>
+            <value> <string>addCausalityMovementGroup</string> </value>
+        </item>
+        <item>
+            <key> <string>filter_content_types</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <tuple>
+                <string>movement_group</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Previous Causality Movement Group</string> </value>
+        </item>
+        <item>
+            <key> <string>init_script</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>permission</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>type_class</string> </key>
+            <value> <string>PreviousCausalityMovementGroup</string> </value>
+        </item>
+        <item>
+            <key> <string>type_interface</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_mixin</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_base/bt/template_action_path_list b/bt5/erp5_base/bt/template_action_path_list
index c14d40001f4942b6365785a9cdaabbe99c6a0ecf..6a75d44d58782cd95ccf9e5641aa4beb5a2701bb 100644
--- a/bt5/erp5_base/bt/template_action_path_list
+++ b/bt5/erp5_base/bt/template_action_path_list
@@ -77,6 +77,7 @@ Person | person_detailed_report
 Person | terminate_career
 Person | view
 Preference | base_preference
+Previous Causality Movement Group | view
 Property Assignment Movement Group | view
 Property Grouping Movement Group | view
 Property Movement Group | view
diff --git a/bt5/erp5_base/bt/template_portal_type_allowed_content_type_list b/bt5/erp5_base/bt/template_portal_type_allowed_content_type_list
index 2ff96ec0d3c0dbc96077af8c9a68fa9246a4a28b..e7acfdb289a1cd87e02fdfe7e8fb4e121ff1cf7d 100644
--- a/bt5/erp5_base/bt/template_portal_type_allowed_content_type_list
+++ b/bt5/erp5_base/bt/template_portal_type_allowed_content_type_list
@@ -18,6 +18,7 @@ Delivery Builder | Parent Delivery Category Movement Group
 Delivery Builder | Parent Delivery Property Movement Group
 Delivery Builder | Parent Explanation Movement Group
 Delivery Builder | Predicate
+Delivery Builder | Previous Causality Movement Group
 Delivery Builder | Property Assignment Movement Group
 Delivery Builder | Property Grouping Movement Group
 Delivery Builder | Property Movement Group
diff --git a/bt5/erp5_base/bt/template_portal_type_id_list b/bt5/erp5_base/bt/template_portal_type_id_list
index 54d4f65b1eb46f9fabfefce3f86db35c7706e1a0..4e6bd6b9f2d144a97ec050075cf993e8140537ca 100644
--- a/bt5/erp5_base/bt/template_portal_type_id_list
+++ b/bt5/erp5_base/bt/template_portal_type_id_list
@@ -43,6 +43,7 @@ Parent Delivery Property Movement Group
 Parent Explanation Movement Group
 Person
 Person Module
+Previous Causality Movement Group
 Property Assignment Movement Group
 Property Grouping Movement Group
 Property Movement Group
diff --git a/product/ERP5/Document/PreviousCausalityMovementGroup.py b/product/ERP5/Document/PreviousCausalityMovementGroup.py
new file mode 100644
index 0000000000000000000000000000000000000000..54d019e472af840f244acc460a442e53ccd70e41
--- /dev/null
+++ b/product/ERP5/Document/PreviousCausalityMovementGroup.py
@@ -0,0 +1,57 @@
+##############################################################################
+#
+# Copyright (c) 2015 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.
+#
+##############################################################################
+
+from Products.ERP5.Document.FirstCausalityMovementGroup import \
+     FirstCausalityMovementGroup
+from zLOG import LOG
+
+class PreviousCausalityMovementGroup(FirstCausalityMovementGroup):
+  """
+  Group by previous causality. For movements going to Sale Invoices,
+  the previous causality is SPL
+  """
+  meta_type = 'ERP5 Previous Causality Movement Group'
+  portal_type = 'Previous Causality Movement Group'
+
+  causality_portal_type = 'Sale Packing List'
+
+  def test(self, movement, property_dict, **kw):
+    """Compare explanation to now if it is possible to update delivery"""
+    explanation = property_dict.get('_explanation','')
+    if movement == movement.getDeliveryValue():
+      # We are at delivery level, check if the explanation is part of the causality
+      delivery = movement
+      if explanation in delivery.getCausalityList():
+        return True, {}
+      else:
+        return False, {}
+    raise NotImplementedError("What should we do ?")
+
+  def _getPropertyDict(self, movement, **kw):
+    property_dict = super(PreviousCausalityMovementGroup, self).\
+        _getPropertyDict(movement, **kw)
+    return property_dict