diff --git a/product/ERP5/Tool/CategoryTool.py b/product/ERP5/Tool/CategoryTool.py
index c765ea68048cc10d10c79cdc071a90a073d0d3be..9ab0c7f89c80e74b69f906b50bb33cc8e084e5d4 100644
--- a/product/ERP5/Tool/CategoryTool.py
+++ b/product/ERP5/Tool/CategoryTool.py
@@ -141,28 +141,42 @@ class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool):
 
     def updateRelatedContent(self, context,
                              previous_category_url, new_category_url):
-      """See CMFCategory.CategoryTool.updateRelatedContent
+      """Updates categories of related objects and predicate membership.
+          o context: the moved object
+          o previous_category_url: the related url of this object before
+            the move
+          o new_category_url: the related url of the object after the move
 
-      This method also update all predicates membership
+      TODO: make this method resist to very large updates (ie. long transaction)
       """
-      CMFCategoryTool.updateRelatedContent(self,
-                                           context,previous_category_url,
-                                           new_category_url)
-
-      # We also need to udpate all predicates membership
-      domain_tool = getToolByName(context, 'portal_domains')
       portal_catalog = getToolByName(context, 'portal_catalog')
-      kw = {}
-      kw['predicate_category.category_uid'] = context.getUid()
-      object_list = portal_catalog(**kw)
-      for predicate in [x.getObject() for x in object_list]:
+      activate_kw = {'tag':'%s_updateRelatedContent' % context.getPath()}
+
+      # udpate category related objects
+      kw = {'category.category_uid':context.getUid()}
+      for related_object in portal_catalog(**kw):
+        related_object = related_object.getObject()
+        category_list = []
+        for category in related_object.getCategoryList():
+          new_category = self.updateRelatedCategory(category,
+                                                    previous_category_url,
+                                                    new_category_url)
+          category_list.append(new_category)
+        related_object.edit(categories=category_list,
+                            activate_kw=activate_kw)
+
+      # udpate all predicates membership
+      kw = {'predicate_category.category_uid':context.getUid()}
+      for predicate in portal_catalog(**kw):
+        predicate = predicate.getObject()
         membership_list = []
         for category in predicate.getMembershipCriterionCategoryList():
           new_category = self.updateRelatedCategory(category,
                                                     previous_category_url,
                                                     new_category_url)
           membership_list.append(new_category)
-        predicate.setMembershipCriterionCategoryList(membership_list)
+        predicate.edit(membership_criterion_category_list=membership_list,
+                       activate_kw=activate_kw)
       # We do not need to to things recursively since
       # updateRelatedContent is already recursive.