diff --git a/src/caosadvancedtools/structure_mapping.py b/src/caosadvancedtools/structure_mapping.py
index 73ddac22a71bac15d5b5bb215cd04eb6bcb9cbf7..dfec80ada02d3c069208703172961d0ba78579b1 100644
--- a/src/caosadvancedtools/structure_mapping.py
+++ b/src/caosadvancedtools/structure_mapping.py
@@ -59,7 +59,7 @@ def collect_existing_structure(target_structure, existing_root, em):
         if prop.value is None:
             continue
 
-        if not prop.is_reference():
+        if not prop.is_reference(server_retrieval=True):
             continue
 
         # TODO case where multiple properties of same name exist is not
@@ -70,6 +70,7 @@ def collect_existing_structure(target_structure, existing_root, em):
             resolve_reference(prop)
 
             # TODO Lists of reference are not yet treated properly
+            resolve_reference(existing_root.get_property(prop.name))
             referenced = existing_root.get_property(prop.name).value
 
             if not isinstance(referenced, list):
@@ -107,7 +108,7 @@ def update_structure(em, updating: db.Container, target_structure: db.Record):
                               em.to_existing[target_structure._cuid])
 
     for prop in target_structure.get_properties():
-        if prop.is_reference():
+        if prop.is_reference(server_retrieval=True):
             update_structure(em, updating, prop.value)
 
 # TODO this can be moved to the general lib; it is the general case that