diff --git a/product/ERP5Type/XMLMatrix.py b/product/ERP5Type/XMLMatrix.py
index dd1626c213fd4b07a2b285a73e7396e667bdec80..a338b04e22285a9106ee550ef2e21fad286f934c 100644
--- a/product/ERP5Type/XMLMatrix.py
+++ b/product/ERP5Type/XMLMatrix.py
@@ -212,20 +212,22 @@ class XMLMatrix(Folder):
 
       # List all valid cell ids for current base_id.
       object_id_list = []
-      for obj in self.objectValues():
-        object_id = obj.getId()
-        if object_id.find(base_id) == 0:
-          # Check that all '_'-separated fields are of int type.
-          if (object_id) > len(base_id):
-            try:
-              int(object_id[len(base_id)+1:].split('_')[0])
-              test = self._getOb(object_id) # If the object was created
-                                            # during this transaction,
-                                            # then we do not need to
-                                            # work on it
-              object_id_list.append(object_id)
-            except (ValueError, KeyError):
-              pass
+      base_id_len = len(base_id)
+      for object_id in self.objectIds():
+        object_id_list = object_id.split('_')
+        if len(object_id_list) > 1 and object_id_list.pop(0) == base_id:
+          try:
+            # Check that all '_'-separated fields are of int type (once
+            # base_id is poped).
+            [int(x) for x in object_id_list]
+            self._getOb(object_id) # If the object was created
+                                   # during this transaction,
+                                   # then we do not need to
+                                   # work on it
+          except (ValueError, KeyError):
+            pass
+          else:
+            object_id_list.append(object_id)
 
       # Prepend 'temp_' to all cells, to avoid id conflicts while renaming.
       for object_id in object_id_list: