diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py
index 680e4abe0da1896e63dba4636c05a38b90de2dc5..b93d5f984c0e37a2cff1c243a59e3f26eedf3ace 100644
--- a/unittests/test_scanner.py
+++ b/unittests/test_scanner.py
@@ -405,3 +405,87 @@ def test_units():
     assert rec.get_property("may_be_overwritten") is not None
     assert rec.get_property("may_be_overwritten").value == "400"
     assert rec.get_property("may_be_overwritten").unit == "°C"
+
+
+def test_recursive_definition():
+    """
+
+    """
+
+    recursive_yaml = """
+Converter:
+  type: DictElement
+  records:
+    Block:
+      Experiment: $Experiment
+    Experiment:
+      Block: $Block
+    """
+
+    crawler_definition = _load_definition_from_yaml_dict(
+        [yaml.load(recursive_yaml, Loader=yaml.SafeLoader)])
+    converter_registry = create_converter_registry(crawler_definition)
+
+    data = {
+        "value_with_unit": "1.1 m",
+        "array_with_units": [
+            "1.1 cm",
+            "2.2 cm"
+        ]
+    }
+    records = scan_structure_elements(DictElement(name="", value=data), crawler_definition,
+                                      converter_registry)
+
+    assert len(records) == 2
+    assert len(records[0].parents) == 1
+    assert records[0].parents[0].name == "Block"
+    assert len(records[1].parents) == 1
+    assert records[1].parents[0].name == "Experiment"
+
+    assert records[0].get_property("Experiment").value == records[1]
+    assert records[1].get_property("Block").value == records[0]
+
+
+def test_recursive_definition_2():
+    """
+    This is basically a test for:
+    https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/16
+    """
+
+    recursive_yaml = """
+FirstConverter:
+  type: DictElement
+  records:
+    Experiment:
+  subtree:
+    Converter:
+      type: DictElement
+      records:
+        Block:
+          Experiment: $Experiment
+        Experiment:
+          Block: $Block
+    """
+
+    crawler_definition = _load_definition_from_yaml_dict(
+        [yaml.load(recursive_yaml, Loader=yaml.SafeLoader)])
+    converter_registry = create_converter_registry(crawler_definition)
+
+    data = {"data": {
+        "value_with_unit": "1.1 m",
+        "array_with_units": [
+            "1.1 cm",
+            "2.2 cm"
+        ]
+    }}
+    records = scan_structure_elements(DictElement(name="", value=data), crawler_definition,
+                                      converter_registry)
+
+    assert len(records) == 2
+    assert len(records[0].parents) == 1
+    assert records[0].parents[0].name == "Block"
+    assert len(records[1].parents) == 1
+    assert records[1].parents[0].name == "Experiment"
+
+    assert records[0].get_property("Experiment").value == records[1]
+    assert records[1].get_property("Block").value == records[0]