diff --git a/src/caoscrawler/crawl.py b/src/caoscrawler/crawl.py
index 49ef30ea7cf774f906659fbc897342e15e493912..2a1bc71eeff556869e94ad20e5c46b5e7d5cf151 100644
--- a/src/caoscrawler/crawl.py
+++ b/src/caoscrawler/crawl.py
@@ -762,14 +762,14 @@ class Crawler(object):
                 pass
 
     @staticmethod
-    def _get_property_entity(name):
+    def _get_entity_by_name(name):
         return db.Entity(name=name).retrieve()
 
     @staticmethod
     def execute_inserts_in_list(to_be_inserted, securityMode, run_id: int = None):
         for record in to_be_inserted:
             for prop in record.properties:
-                entity = Crawler._get_property_entity(prop.name)
+                entity = Crawler._get_entity_by_name(prop.name)
                 _resolve_datatype(prop, entity)
         print("INSERT")
         print(to_be_inserted)
@@ -785,10 +785,10 @@ class Crawler(object):
         for record in rec_list:
             for parent in record.parents:
                 if parent.id is None:
-                    parent.id = db.Entity(name=parent.name).retrieve().id
+                    parent.id = Crawler._get_entity_by_name(parent.name).id
             for prop in record.properties:
                 if prop.id is None:
-                    entity = db.Entity(name=prop.name).retrieve()
+                    entity = Crawler._get_entity_by_name(prop.name)
                     prop.id = entity.id
                     _resolve_datatype(prop, entity)
 
diff --git a/unittests/test_tool.py b/unittests/test_tool.py
index 2f674aed6dc5e1b7c3c3c2c20ada278a42a3267a..cf86cc47f48ec4fcad55260e9d89480666d16808 100755
--- a/unittests/test_tool.py
+++ b/unittests/test_tool.py
@@ -542,55 +542,100 @@ def test_replace_entities_with_ids(crawler):
 
 @patch("caoscrawler.crawl.db.Container.insert")
 @patch("caoscrawler.crawl.db.Container.update")
-@patch("caoscrawler.crawl.Crawler.set_ids_and_datatype_of_parents_and_properties")
-@patch("caoscrawler.crawl.Crawler._get_property_entity")
 @patch("caoscrawler.crawl.UpdateCache.insert")
-def test_security_mode_trivial(UpdateCacheMock, get_prop_mock, set_id_mock, update_mock,
-                               insert_mock, ident):
-    get_prop_mock.side_effect = lambda x: db.Property(name="A")
+def test_security_mode_trivial(updateCacheMock, insmock, upmock, ident):
     crawler = Crawler(debug=True, securityMode=SecurityMode.RETRIEVE)
     crawler.crawl_directory(rfp("test_directories", "examples_article"),
                             rfp("scifolder_cfood.yml"))
     crawler.identifiableAdapter = ident
+
+    def find_record(name):
+        print(name)
+        return [el for el in ident.get_records() if el.name == name][0]
+    Crawler._get_entity_by_name = find_record
+    #Crawler._get_entity_by_name = lambda x: db.RecordType(id=1111, name="A")
     insl, updl = crawler.synchronize(commit_changes=True)
     assert crawler.run_id is not None
-    insert_mock.assert_not_called()
-    update_mock.assert_not_called()
-    assert UpdateCacheMock.call_count == 0
+    insmock.assert_not_called()
+    upmock.update.assert_not_called()
+    updateCacheMock.assert_not_called()
 
 
 @patch("caoscrawler.crawl.db.Container.insert")
 @patch("caoscrawler.crawl.db.Container.update")
-@patch("caoscrawler.crawl.Crawler.set_ids_and_datatype_of_parents_and_properties")
-@patch("caoscrawler.crawl.Crawler._get_property_entity")
 @patch("caoscrawler.crawl.UpdateCache.insert")
-def test_security_mode_trivial(UpdateCacheMock, get_prop_mock, set_id_mock, update_mock,
-                               insert_mock, ident):
-    get_prop_mock.side_effect = lambda x: db.Property(name="A")
+def test_security_mode_forbidden(updateCacheMock, insmock, upmock, ident):
     crawler = Crawler(debug=True, securityMode=SecurityMode.RETRIEVE)
     crawler.crawl_directory(rfp("test_directories", "examples_article"),
                             rfp("scifolder_cfood.yml"))
     crawler.identifiableAdapter = ident
+
+    def find_record(name):
+        name = name.lower()
+        state = {"person": (db.RecordType(id=10001)
+                            .add_parent(name="Person")
+                              .add_property(name="first_name")
+                            .add_property(name="last_name")),
+                 "measurement": (db.RecordType(id=10002)
+                                 .add_parent(name="Measurement")
+                                 .add_property(name="identifier")
+                                 .add_property(name="date")
+                                 .add_property(name="project")),
+                 "project": (db.RecordType(id=10003)
+                             .add_parent(name="Project")
+                             .add_property(name="date")
+                             .add_property(name="identifier")),
+                 "first_name": db.Property(name="first_name", datatype=db.TEXT, id=10004),
+                 "responsible": db.Property(name="responsible", datatype="Person", id=10005),
+                 "last_name": db.Property(name="last_name", datatype=db.TEXT, id=10006),
+                 "identifier": db.Property(name="identifier", datatype=db.TEXT, id=10007),
+                 "date": db.Property(name="date", datatype=db.DATETIME, id=10008),
+                 }
+        return state[name]
+    Crawler._get_entity_by_name = find_record
+    del ident._records[-1]
+    insl, updl = crawler.synchronize(commit_changes=True)
+    assert crawler.run_id is not None
+    insmock.assert_not_called()
+    upmock.update.assert_not_called()
+    assert updateCacheMock.call_count == 1
+
+
+@patch("caoscrawler.crawl.db.Container.update")
+@patch("caoscrawler.crawl.db.Container.insert")
+@patch("caoscrawler.crawl.UpdateCache.insert")
+def test_security_mode_forbidden_up(updateCacheMock, insmock, upmock, ident):
+    crawler = Crawler(debug=True, securityMode=SecurityMode.INSERT)
+    crawler.crawl_directory(rfp("test_directories", "examples_article"),
+                            rfp("scifolder_cfood.yml"))
+    crawler.identifiableAdapter = ident
+
+    def find_record(name):
+        name = name.lower()
+        state = {"person": (db.RecordType(id=10001)
+                            .add_parent(name="Person")
+                              .add_property(name="first_name")
+                            .add_property(name="last_name")),
+                 "measurement": (db.RecordType(id=10002)
+                                 .add_parent(name="Measurement")
+                                 .add_property(name="identifier")
+                                 .add_property(name="date")
+                                 .add_property(name="project")),
+                 "project": (db.RecordType(id=10003)
+                             .add_parent(name="Project")
+                             .add_property(name="date")
+                             .add_property(name="identifier")),
+                 "first_name": db.Property(name="first_name", datatype=db.TEXT, id=10004),
+                 "responsible": db.Property(name="responsible", datatype="Person", id=10005),
+                 "last_name": db.Property(name="last_name", datatype=db.TEXT, id=10006),
+                 "identifier": db.Property(name="identifier", datatype=db.TEXT, id=10007),
+                 "date": db.Property(name="date", datatype=db.DATETIME, id=10008),
+                 }
+        return state[name]
+    Crawler._get_entity_by_name = find_record
     del ident._registered_identifiables["Person"]
     insl, updl = crawler.synchronize(commit_changes=True)
     assert crawler.run_id is not None
-    insert_mock.assert_not_called()
-    update_mock.assert_not_called()
-    assert UpdateCacheMock.call_count == 2
-
-#
-# @patch("caoscrawler.crawl.db.Container.insert")
-# @patch("caoscrawler.crawl.db.Container.update")
-# @patch("caoscrawler.crawl.Crawler.set_ids_and_datatype_of_parents_and_properties")
-# @patch("caoscrawler.crawl.UpdateCache.insert")
-# def test_security_mode_insert_allowed(UpdateCacheMock, set_id_mock, update_mock, insert_mock,
-#                                      ident):
-#    crawler = Crawler(debug=True, securityMode=SecurityMode.INSERT)
-#    crawler.crawl_directory(rfp("test_directories", "examples_article"),
-#                            rfp("scifolder_cfood.yml"))
-#    crawler.identifiableAdapter = ident
-#    del ident._registered_identifiables["Person"]
-#    insl, updl = crawler.synchronize(commit_changes=True)
-#    insert_mock.assert_called()
-#    update_mock.assert_not_called()
-#    assert UpdateCacheMock.call_count == 1
+    insmock.assert_called_once()
+    upmock.update.assert_not_called()
+    assert updateCacheMock.call_count == 1