diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java
index 20ef481cde3845a35fbdc3853fb12a31278dc7e3..3e49b08f2c0771f7770818b412dfa564763db48b 100644
--- a/src/main/java/org/caosdb/server/entity/Entity.java
+++ b/src/main/java/org/caosdb/server/entity/Entity.java
@@ -537,12 +537,19 @@ public class Entity extends AbstractObservable implements EntityInterface {
 
   @Override
   public final Element toElement() {
-    return getToElementStrategy().toElement(this, new SetFieldStrategy(getSelections()));
+    return getToElementStrategy().toElement(this, getSerializeFieldStrategy());
+  }
+
+  private SetFieldStrategy getSerializeFieldStrategy() {
+    if (this.serializeFieldStrategy == null) {
+      this.serializeFieldStrategy = new SetFieldStrategy(getSelections());
+    }
+    return this.serializeFieldStrategy;
   }
 
   @Override
   public final void addToElement(final Element element) {
-    addToElement(element, new SetFieldStrategy(getSelections()));
+    addToElement(element, getSerializeFieldStrategy());
   }
 
   @Override
@@ -930,6 +937,7 @@ public class Entity extends AbstractObservable implements EntityInterface {
 
   private boolean datatypeOverride = false;
   private Version version = new Version();
+  private SetFieldStrategy serializeFieldStrategy = null;
 
   @Override
   public EntityInterface setDatatypeOverride(final boolean b) {
@@ -1067,4 +1075,9 @@ public class Entity extends AbstractObservable implements EntityInterface {
         && this.getDatatype() instanceof AbstractCollectionDatatype
         && ((AbstractCollectionDatatype) getDatatype()).getDatatype() instanceof ReferenceDatatype;
   }
+
+  @Override
+  public void setSerializeFieldStrategy(SetFieldStrategy s) {
+    this.serializeFieldStrategy = s;
+  }
 }
diff --git a/src/main/java/org/caosdb/server/entity/TransactionEntity.java b/src/main/java/org/caosdb/server/entity/TransactionEntity.java
index 7dd96b7f5ba8dc71c976731fed4d91e43688f919..0c41c180fc3bedaa74b07eb04f5135422b6ccc94 100644
--- a/src/main/java/org/caosdb/server/entity/TransactionEntity.java
+++ b/src/main/java/org/caosdb/server/entity/TransactionEntity.java
@@ -25,6 +25,7 @@ package org.caosdb.server.entity;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.caosdb.server.entity.xml.SetFieldStrategy;
 import org.caosdb.server.entity.xml.ToElementStrategy;
 import org.caosdb.server.entity.xml.ToElementable;
 import org.caosdb.server.query.Query.Selection;
@@ -47,6 +48,8 @@ public interface TransactionEntity {
 
   public abstract void setToElementStragegy(ToElementStrategy s);
 
+  public abstract void setSerializeFieldStrategy(SetFieldStrategy s);
+
   public abstract Element toElement();
 
   public abstract Set<ToElementable> getMessages();
diff --git a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
index e5115dc219ac427e93ae87c0921ced965023f55e..01c374ecb5c6ac073981db6f44a34989a0e6822e 100644
--- a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
+++ b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
@@ -575,4 +575,9 @@ public class EntityWrapper implements EntityInterface {
   public boolean isReferenceList() {
     return this.entity.isReferenceList();
   }
+
+  @Override
+  public void setSerializeFieldStrategy(SetFieldStrategy s) {
+    this.entity.setSerializeFieldStrategy(s);
+  }
 }
diff --git a/src/main/java/org/caosdb/server/entity/xml/EntityToElementStrategy.java b/src/main/java/org/caosdb/server/entity/xml/EntityToElementStrategy.java
index 89420c596894da9be35e33a507821c96d10f5b7d..3ca8eecc385270e708588516e931e80c886f9ba9 100644
--- a/src/main/java/org/caosdb/server/entity/xml/EntityToElementStrategy.java
+++ b/src/main/java/org/caosdb/server/entity/xml/EntityToElementStrategy.java
@@ -89,7 +89,7 @@ public class EntityToElementStrategy implements ToElementStrategy {
     if (setFieldStrategy.isToBeSet("id") && entity.hasId()) {
       element.setAttribute("id", Integer.toString(entity.getId()));
     }
-    if (entity.hasVersion()) {
+    if (setFieldStrategy.isToBeSet("version") && entity.hasVersion()) {
       Element v = new VersionXMLSerializer().toElement(entity.getVersion());
       element.addContent(v);
     }
@@ -109,6 +109,22 @@ public class EntityToElementStrategy implements ToElementStrategy {
       for (final ToElementable m : entity.getMessages()) {
         m.addToElement(element);
       }
+    } else {
+      if (setFieldStrategy.isToBeSet("error")) {
+        for (ToElementable m : entity.getMessages("error")) {
+          m.addToElement(element);
+        }
+      }
+      if (setFieldStrategy.isToBeSet("warning")) {
+        for (ToElementable m : entity.getMessages("warning")) {
+          m.addToElement(element);
+        }
+      }
+      if (setFieldStrategy.isToBeSet("info")) {
+        for (ToElementable m : entity.getMessages("info")) {
+          m.addToElement(element);
+        }
+      }
     }
     if (setFieldStrategy.isToBeSet("query") && entity.getQueryTemplateDefinition() != null) {
       final Element q = new Element("Query");
diff --git a/src/main/java/org/caosdb/server/entity/xml/IdAndServerMessagesOnlyStrategy.java b/src/main/java/org/caosdb/server/entity/xml/IdAndServerMessagesOnlyStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..d61d0b5111a094d294e930751e7bd6fed6aa1428
--- /dev/null
+++ b/src/main/java/org/caosdb/server/entity/xml/IdAndServerMessagesOnlyStrategy.java
@@ -0,0 +1,12 @@
+package org.caosdb.server.entity.xml;
+
+public class IdAndServerMessagesOnlyStrategy extends SetFieldStrategy {
+
+  @Override
+  public boolean isToBeSet(String field) {
+    return "id".equals(field)
+        || "error".equals(field)
+        || "warning".equals(field)
+        || "info".equals(field);
+  }
+}
diff --git a/src/main/java/org/caosdb/server/entity/xml/SetFieldStrategy.java b/src/main/java/org/caosdb/server/entity/xml/SetFieldStrategy.java
index 1d9f219086e5ddd921d9519d3391e1cca9fbffc9..2d6b696c235052974326dbfca110be32604c3981 100644
--- a/src/main/java/org/caosdb/server/entity/xml/SetFieldStrategy.java
+++ b/src/main/java/org/caosdb/server/entity/xml/SetFieldStrategy.java
@@ -135,8 +135,9 @@ public class SetFieldStrategy {
 
     if (this.cache == null) {
       this.cache = new HashMap<String, Boolean>();
-      // always include the id and the name
+      // always include the id, version and the name
       this.cache.put("id", true);
+      this.cache.put("version", true);
       this.cache.put("name", true);
 
       // ... and the referenced entity.
diff --git a/src/main/java/org/caosdb/server/transaction/Retrieve.java b/src/main/java/org/caosdb/server/transaction/Retrieve.java
index 45647c1d554d38ab2b90e91f9516305265d370b8..e9a67f5ffccdea6be5e8f2c4a82e37590b38e862 100644
--- a/src/main/java/org/caosdb/server/transaction/Retrieve.java
+++ b/src/main/java/org/caosdb/server/transaction/Retrieve.java
@@ -27,9 +27,7 @@ import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.container.RetrieveContainer;
-import org.caosdb.server.entity.xml.SetFieldStrategy;
-import org.caosdb.server.entity.xml.ToElementStrategy;
-import org.caosdb.server.entity.xml.ToElementable;
+import org.caosdb.server.entity.xml.IdAndServerMessagesOnlyStrategy;
 import org.caosdb.server.jobs.ScheduledJob;
 import org.caosdb.server.jobs.core.JobFailureSeverity;
 import org.caosdb.server.jobs.core.RemoveDuplicates;
@@ -37,7 +35,6 @@ import org.caosdb.server.jobs.core.ResolveNames;
 import org.caosdb.server.permissions.EntityPermission;
 import org.caosdb.server.utils.EntityStatus;
 import org.caosdb.server.utils.ServerMessages;
-import org.jdom2.Element;
 
 public class Retrieve extends Transaction<RetrieveContainer> {
 
@@ -86,34 +83,7 @@ public class Retrieve extends Transaction<RetrieveContainer> {
         try {
           e.checkPermission(EntityPermission.RETRIEVE_ENTITY);
         } catch (final AuthorizationException exc) {
-          e.setToElementStragegy(
-              new ToElementStrategy() {
-
-                @Override
-                public Element toElement(
-                    final EntityInterface entity, final SetFieldStrategy setFieldStrategy) {
-                  Element ret;
-                  if (entity.hasRole()) {
-                    ret = new Element(entity.getRole().toString());
-                  } else {
-                    ret = new Element("Entity");
-                  }
-                  ret.setAttribute("id", entity.getId().toString());
-                  for (final ToElementable m : entity.getMessages()) {
-                    m.addToElement(ret);
-                  }
-                  return ret;
-                }
-
-                @Override
-                public Element addToElement(
-                    final EntityInterface entity,
-                    final Element parent,
-                    final SetFieldStrategy setFieldStrategy) {
-                  parent.addContent(toElement(entity, setFieldStrategy));
-                  return parent;
-                }
-              });
+          e.setSerializeFieldStrategy(new IdAndServerMessagesOnlyStrategy());
           e.setEntityStatus(EntityStatus.UNQUALIFIED);
           e.addError(ServerMessages.AUTHORIZATION_ERROR);
           e.addInfo(exc.getMessage());