diff --git a/product/CMFActivity/ActivityTool.py b/product/CMFActivity/ActivityTool.py
index 6da52ee22b0fdd2c26c1cdc257ed2c62148d701f..4b100f885f984c6b7c91ed5af369bc270d21b085 100644
--- a/product/CMFActivity/ActivityTool.py
+++ b/product/CMFActivity/ActivityTool.py
@@ -823,12 +823,18 @@ class ActivityTool (Folder, UniqueObject):
         # Grab existig request (last chain item) and create a copy.
         request_container = base_chain.pop()
         request = request_container.REQUEST
+        # Generate PARENTS value. Sadly, we cannot reuse base_chain since
+        # PARENTS items must be wrapped in acquisition
+        parents = []
+        application = self.getPhysicalRoot().aq_base
+        for parent in self.aq_chain:
+          if parent.aq_base is application:
+            break
+          parents.append(parent)
         # XXX: REQUEST.clone() requires PARENTS to be set, and it's not when
         # runing unit tests. Recreate it if it does not exist.
-        parents = getattr(request, 'PARENTS', None)
-        if parents is None:
-          warn('CMFActivity.ActivityTool.invoke: PARENTS is not defined in REQUEST. It should only happen in unit tests.')
-          request['PARENTS'] = self.aq_chain[:]
+        if getattr(request.other, 'PARENTS', None) is None:
+          request.other['PARENTS'] = parents
         # XXX: itools (used by iHotfix) requires PATH_INFO to be set, and it's
         # not when runing unit tests. Recreate it if it does not exist.
         if request.environ.get('PATH_INFO') is None:
@@ -837,6 +843,8 @@ class ActivityTool (Folder, UniqueObject):
         # restore request information
         new_request = request.clone()
         request_info = message.request_info
+        # PARENTS is truncated by clone
+        new_request.other['PARENTS'] = parents
         new_request._script = request_info['_script']
         if 'SERVER_URL' in request_info:
           new_request.other['SERVER_URL'] = request_info['SERVER_URL']