diff --git a/integrationtests/test_issues.py b/integrationtests/test_issues.py
index 76392f3a4ce20d7ed6b6ccc30c79f1ce400001f7..38d00a5e249a711beb2b48e783efb058cd07ad36 100644
--- a/integrationtests/test_issues.py
+++ b/integrationtests/test_issues.py
@@ -22,12 +22,15 @@ from caoscrawler.crawl import Crawler
 from caoscrawler.identifiable import Identifiable
 from caoscrawler.identifiable_adapters import CaosDBIdentifiableAdapter
 from caoscrawler.scanner import (create_converter_registry,
-                                 scan_structure_elements)
+                                 scan_structure_elements,
+                                 _load_definition_from_yaml_dict)
 from caoscrawler.structure_elements import DictElement
 from linkahead.cached import cache_clear
 from linkahead.utils.register_tests import clear_database, set_test_key
 from pytest import fixture, mark, raises
 
+import yaml
+
 set_test_key("10b128cf8a1372f30aa3697466bb55e76974e0c16a599bb44ace88f19c8f61e2")
 
 
@@ -328,3 +331,55 @@ def test_indiscale_87(clear_database):
         print(db.apiutils.compare_entities(rec, retrieved))
         assert db.apiutils.empty_diff(rec, retrieved)
         print("---")
+
+
+def test_issue_16(clear_database):
+    """
+    This is another  a test for:
+    https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/16
+
+    In addition to the two unit tests for recursive definition in `test_scanner.py` this system test
+    tests whether recursively defined records can be synchronized correctly using the crawler.
+    """
+    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)
+
+    rt_exp = db.RecordType(name="Experiment").insert()
+    rt_block = db.RecordType(name="Block").insert()
+
+    ident = CaosDBIdentifiableAdapter()
+    ident.load_from_yaml_object(yaml.safe_load("""
+Experiment:
+- Block
+Block:
+- Experiment
+"""))
+
+    crawler = Crawler(identifiableAdapter=ident)
+    crawler.synchronize(crawled_data=records)
diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py
index b93d5f984c0e37a2cff1c243a59e3f26eedf3ace..d2003be1692b30d50849b9efa82a3918a44343dc 100644
--- a/unittests/test_scanner.py
+++ b/unittests/test_scanner.py
@@ -409,7 +409,8 @@ def test_units():
 
 def test_recursive_definition():
     """
-
+    This is basically a test for:
+    https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/16
     """
 
     recursive_yaml = """
@@ -448,8 +449,12 @@ Converter:
 
 def test_recursive_definition_2():
     """
-    This is basically a test for:
+    This is another  a test for:
     https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/16
+
+    It defines Experiment on a different level, therefore allowing the recursive definition.
+    This is, however, no workaround for test_recursive_definition as a bidirectional link on the
+    same level is still not achieved.
     """
 
     recursive_yaml = """