diff --git a/product/ERP5/Tool/IdTool.py b/product/ERP5/Tool/IdTool.py
index d72d52f0dc559dad86b2337875234cf1ccd215bc..0856056dd3c79429ba3042cf686f6e8e5a1ccc76 100644
--- a/product/ERP5/Tool/IdTool.py
+++ b/product/ERP5/Tool/IdTool.py
@@ -148,6 +148,32 @@ class IdTool(BaseTool):
       self.dict_length_ids = PersistentMapping()
     return self.dict_length_ids.items()
 
+  security.declarePrivate('dumpDictLengthIdsItems')
+  def dumpDictLengthIdsItems(self):
+    """
+      Store persistently data from SQL table portal_ids.
+    """
+    portal_catalog = getToolByName(self, 'portal_catalog').getSQLCatalog()
+    query = getattr(portal_catalog, 'z_portal_ids_dump')
+    dict_length_ids = getattr(self, 'dict_length_ids', None)
+    if dict_length_ids is None:
+      dict_length_ids = self.dict_length_ids = PersistentMapping()
+    for line in query().dictionaries():
+      id_group = line['id_group']
+      last_id = line['last_id']
+      stored_last_id = self.dict_length_ids.get(id_group)
+      if stored_last_id is None:
+        self.dict_length_ids[id_group] = Length(last_id)
+      else:
+        stored_last_id_value = stored_last_id()
+        if stored_last_id_value < last_id:
+          stored_last_id.set(last_id)
+        else:
+          if stored_last_id_value > last_id:
+            LOG('IdTool', WARNING, 'ZODB value (%r) for group %r is higher ' \
+                'than SQL value (%r). Keeping ZODB value untouched.' % \
+                (stored_last_id, id_group, last_id))
+
   security.declareProtected(Permissions.AccessContentsInformation,
                             'getLastLengthGeneratedId')
   def getLastLengthGeneratedId(self, id_group, default=None):
diff --git a/product/ERP5Catalog/CatalogTool.py b/product/ERP5Catalog/CatalogTool.py
index 3523afbea2005b650be0501a161069c7a8845ca7..5cd571b31cbdf6ee9da76a609a21f2bb44d1e445 100644
--- a/product/ERP5Catalog/CatalogTool.py
+++ b/product/ERP5Catalog/CatalogTool.py
@@ -632,10 +632,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
       """
       id_tool = self.getPortalObject().portal_ids
       try:
-        # Call generate new id in order to store the last id into
-        # the zodb
-        id_tool.generateNewLengthId(id_group='portal_activity')
-        id_tool.generateNewLengthId(id_group='portal_activity_queue')
+        id_tool.dumpDictLengthIdsItems()
       except ConflictError:
         raise
       except: