diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33bef515a3f1bd92ed756bcd6b24eff323548f97..65547e6b8017e53d711955f9f9fbee00dc739b86 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Added ###
 * 'transform' sections can be added to a CFood to apply functions to values stored in variables.
 * default transform functions: submatch, split and replace.
+* `*` can now be used as a wildcard in the identifiables parameter file to denote
+  that any Record may reference the identified one.
 
 ### Changed ###
 - If the `parents` key is used in a cfood at a lower level for a Record that
diff --git a/src/caoscrawler/crawl.py b/src/caoscrawler/crawl.py
index 9e271c73553498f59669026c12fe780459a87af6..4a47bd761c367f1f0e1cc8096646d764b623ab0a 100644
--- a/src/caoscrawler/crawl.py
+++ b/src/caoscrawler/crawl.py
@@ -936,7 +936,7 @@ class Crawler(object):
                 if isinstance(el, str):
                     try:
                         # the get_entity function will raise an error if not unique
-                        propval.append(Crawler._get_property_id_for_datatype(rtname=prop.datatype,
+                        propval.append(Crawler._get_property_id_for_datatype(rtname=dt,
                                                                              name=el))
                     except (db.EmptyUniqueQueryError, db.QueryNotUniqueError):
                         logger.error(
diff --git a/src/caoscrawler/identifiable_adapters.py b/src/caoscrawler/identifiable_adapters.py
index 2ab9bdff07c857f37a5f646e7b3b337dc3a65832..90e70f2cb930bfb5c2772eb39f8f86bf255b7b86 100644
--- a/src/caoscrawler/identifiable_adapters.py
+++ b/src/caoscrawler/identifiable_adapters.py
@@ -226,18 +226,25 @@ identifiabel, identifiable and identified record) for a Record.
                 # separate class too
                 if prop.name.lower() == "is_referenced_by":
                     for givenrt in prop.value:
-                        rt_and_children = get_children_of_rt(givenrt)
                         found = False
-                        for rtname in rt_and_children:
-                            if (id(record) in referencing_entities
-                                    and rtname in referencing_entities[id(record)]):
-                                identifiable_backrefs.extend(
-                                    referencing_entities[id(record)][rtname])
+                        if givenrt == "*":
+                            if id(record) not in referencing_entities:
+                                continue
+                            for rt, rec in referencing_entities[id(record)].items():
+                                identifiable_backrefs.extend(rec)
                                 found = True
+                        else:
+                            rt_and_children = get_children_of_rt(givenrt)
+                            for rtname in rt_and_children:
+                                if (id(record) in referencing_entities
+                                        and (rtname in referencing_entities[id(record)])):
+                                    identifiable_backrefs.extend(
+                                        referencing_entities[id(record)][rtname])
+                                    found = True
                         if not found:
                             # TODO: is this the appropriate error?
                             raise NotImplementedError(
-                                f"The following record is missing an identifying property:"
+                                f"The following record is missing an identifying property:\n"
                                 f"RECORD\n{record}\nIdentifying PROPERTY\n{prop.name}"
                             )
                     continue
diff --git a/src/doc/concepts.rst b/src/doc/concepts.rst
index 0b15f9b5d9aebefc2137b234ac4a9440b84906f5..b10deccdca1a2adf60ebcbac930bc797875724ff 100644
--- a/src/doc/concepts.rst
+++ b/src/doc/concepts.rst
@@ -85,7 +85,9 @@ we can check whether a Record with the parent "Project" is referencing the "Expe
 Record. If that is the case, this reference is part of the identifiable for the "Experiment"
 Record. Note, that if there are multiple Records with the appropriate parent (e.g.
 multiple "Project" Records in the above example) it will be required that all of them
-reference the object to be identified.
+reference the object to be identified. You can also use the wildcard "*" as
+RecordType name in the configuration which will only require, that ANY Record
+references the Record at hand.
 
 
 Identified Records
diff --git a/unittests/test_identifiable_adapters.py b/unittests/test_identifiable_adapters.py
index 268b9800ddf1ef1688386f394ec1c6c7eb3e3912..7759fa55ce37e1c30ff9092eac3260ca80348bca 100644
--- a/unittests/test_identifiable_adapters.py
+++ b/unittests/test_identifiable_adapters.py
@@ -133,6 +133,22 @@ def test_non_default_name():
     assert identifiable.name is None
 
 
+def test_wildcard_ref():
+    ident = CaosDBIdentifiableAdapter()
+    ident.register_identifiable(
+        "Person", db.RecordType()
+        .add_parent(name="Person")
+        .add_property(name="is_referenced_by", value=["*"]))
+    rec = (db.Record(name="don't touch it").add_parent("Person")
+           .add_property(name="last_name", value='Tom'))
+    identifiable = ident.get_identifiable(rec,
+                                          referencing_entities={
+                                              id(rec):
+                                              {'A': [db.Record(id=1).add_parent("A")]}}
+                                          )
+    assert identifiable.backrefs[0].id == 1
+
+
 def test_convert_value():
     # test that string representation of objects stay unchanged. No stripping or so.
     class A():