diff --git a/product/ERP5/InteractionWorkflow.py b/product/ERP5/InteractionWorkflow.py
index 1413950742cf04754c056b960819650119eaffbd..392ec040b0fbbb3d9151b3b18ca0043cc813a92f 100644
--- a/product/ERP5/InteractionWorkflow.py
+++ b/product/ERP5/InteractionWorkflow.py
@@ -303,8 +303,9 @@ class InteractionWorkflowDefinition (DCWorkflowDefinition, ActiveObject):
 
               # Execute Before Commit
               for script_name in tdef.before_commit_script_name:
-                script = self.scripts[script_name]
-                transaction.get().addBeforeCommitHook(script, (sci,))
+                del sci.object
+                transaction.get().addBeforeCommitHook(self._before_commit,
+                  (sci, ob.getPhysicalPath(), script_name))
 
               # Execute "activity" scripts
               for script_name in tdef.activate_script_name:
@@ -312,6 +313,13 @@ class InteractionWorkflowDefinition (DCWorkflowDefinition, ActiveObject):
                     .activeScript(script_name, ob.getRelativeUrl(),
                                   status, tdef.id)
 
+    def _before_commit(self, sci, path, script_name):
+      try:
+        sci.object = self.unrestrictedTraverse(path)
+      except KeyError:
+        return
+      self.scripts[script_name](sci)
+
     security.declarePrivate('activeScript')
     def activeScript(self, script_name, ob_url, status, tdef_id):
           script = self.scripts[script_name]