diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index fa52bb2cf7209d89bcb462767a84c57823fde057..d73c97b2e8d6f67a1ec9a5ec8c8fefba879441c2 100644
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -1065,13 +1065,39 @@ class ObjectTemplateItem(BaseTemplateItem):
           # useless because we will already reindex every created object, so
           # we avoid duplication of reindexation
           obj.isIndexable = ConstantGetter('isIndexable', value=False)
-          # keep workflow history if exists
-          workflow_history = getattr(obj, 'workflow_history', None)
-          obj.manage_afterClone(obj)
-          if workflow_history is not None:
-            setattr(obj, 'workflow_history', workflow_history)
-            for workflow_id in workflow_history.keys():
-              obj.updateRoleMappingsFor(workflow_id)
+          # START:part of ERP5Type.CopySupport.manage_afterClone
+          # * reset uid
+          # * reset owner
+          # * do not reset workflow
+          # * do not call recursively
+          # * do not call type-based afterClone script
+          #
+          # Change uid attribute so that Catalog thinks object was not yet catalogued
+          aq_base(obj).uid = portal.portal_catalog.newUid()
+          # Give the Owner local role to the current user, zope only does this if no
+          # local role has been defined on the object, which breaks ERP5Security
+          if getattr(aq_base(obj), '__ac_local_roles__', None) is not None:
+            user=getSecurityManager().getUser()
+            if user is not None:
+              userid=user.getId()
+              if userid is not None:
+                #remove previous owners
+                local_role_dict = obj.__ac_local_roles__
+                removable_role_key_list = []
+                for key, value in local_role_dict.items():
+                  if 'Owner' in value:
+                    value.remove('Owner')
+                  if len(value) == 0:
+                    removable_role_key_list.append(key)
+                # there is no need to keep emptied keys after cloning, it makes
+                # unstable local roles -- if object is cloned it can be different when
+                # after being just added
+                for key in removable_role_key_list:
+                  local_role_dict.pop(key)
+                #add new owner
+                l=local_role_dict.setdefault(userid, [])
+                l.append('Owner')
+          # END:part of ERP5Type.CopySupport.manage_afterClone
           del obj.isIndexable
           if getattr(aq_base(obj), 'reindexObject', None) is not None:
             obj.reindexObject()