diff --git a/product/ZSQLCatalog/SQLCatalog.py b/product/ZSQLCatalog/SQLCatalog.py
index 41652394a876966bc3fb3fa838646facbced7e75..6ca01fe0315ffa89a4baec505eca4627ce8e11c8 100644
--- a/product/ZSQLCatalog/SQLCatalog.py
+++ b/product/ZSQLCatalog/SQLCatalog.py
@@ -1314,6 +1314,11 @@ class Catalog(Folder,
       path_uid_dict = self.getUidDictForPathList(path_list=path_list)
       uid_path_dict = self.getPathDictForUidList(uid_list=uid_list)
 
+    # This dict will store uids and objects which are verified below.
+    # The purpose is to prevent multiple objects from having the same
+    # uid inside object_list.
+    assigned_uid_dict = {}
+
     for object in object_list:
       if not getattr(aq_base(object), 'uid', None):
         try:
@@ -1324,6 +1329,12 @@ class Catalog(Folder,
           raise RuntimeError, 'could not set missing uid for %r' % (object,)
       elif check_uid:
         uid = object.uid
+        if uid in assigned_uid_dict:
+          object.uid = self.newUid()
+          LOG('SQLCatalog', WARNING,
+              'uid of %r changed from %r to %r as old one is assigned to %r !!! This can be fatal. You should reindex the whole site immediately.' % (object, uid, object.uid, assigned_uid_dict[uid]))
+          uid = object.uid
+
         path = object.getPath()
         index = path_uid_dict.get(path, None)
         try:
@@ -1377,6 +1388,9 @@ class Catalog(Folder,
             object.uid = self.newUid()
             LOG('SQLCatalog', WARNING,
                 'uid of %r changed from %r to %r as old one is assigned to %s in catalog !!! This can be fatal. You should reindex the whole site immediately.' % (object, uid, object.uid, catalog_path))
+            uid = object.uid
+
+        assigned_uid_dict[uid] = object
 
     if method_id_list is None:
       method_id_list = self.sql_catalog_object_list