diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java
index eaf53dd4a6d904254ae66d875cd54c963756fc09..dd75071e50ceca3e868e0a5629819f109391fd06 100644
--- a/src/main/java/caosdb/server/CaosDBServer.java
+++ b/src/main/java/caosdb/server/CaosDBServer.java
@@ -70,6 +70,8 @@ import caosdb.server.accessControl.OneTimeTokenRealm;
 import caosdb.server.accessControl.Principal;
 import caosdb.server.accessControl.SessionToken;
 import caosdb.server.accessControl.SessionTokenRealm;
+import caosdb.server.converter.misc.MultipartContainerConverter;
+import caosdb.server.converter.xml.EntityXMLConverterHelper;
 import caosdb.server.database.BackendTransaction;
 import caosdb.server.database.access.Access;
 import caosdb.server.database.backend.transaction.RetrieveDatatypes;
@@ -342,6 +344,9 @@ public class CaosDBServer extends Application {
           Integer.parseInt(getServerProperty(ServerProperties.KEY_MAX_CONNECTIONS));
 
       init.release();
+      
+      Engine.getInstance().getRegisteredConverters().add(new EntityXMLConverterHelper());
+      Engine.getInstance().getRegisteredConverters().add(new MultipartContainerConverter());
 
       if (INSECURE) {
         runHTTPServer(port_http, initialConnections, maxTotalConnections);
diff --git a/src/main/java/caosdb/server/FileSystem.java b/src/main/java/caosdb/server/FileSystem.java
index 6ea9222989a66647ba4e4a164f81bb4d338225e8..b87b25ea682dba78afaf49f99c9665ac70d75764 100644
--- a/src/main/java/caosdb/server/FileSystem.java
+++ b/src/main/java/caosdb/server/FileSystem.java
@@ -319,6 +319,8 @@ public class FileSystem {
       // target is correct.
       if (file.getFile() != null && file.getFile().equals(target)) {
         return true;
+      } else if (target.isDirectory()) {
+          throw ServerMessages.TARGET_PATH_EXISTS;
       } else {
         final GetFileRecordByPath t = new GetFileRecordByPath(file.getPath());
         t.setAccess(access);
diff --git a/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java b/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java
index 9da3f99083fa57191fd123054dfa333bb8a00b70..6c3522115be88c6d3ebd4542fcd1a6b22764b7a0 100644
--- a/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java
+++ b/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java
@@ -2,6 +2,8 @@ package caosdb.server.converter.misc;
 
 
 
+import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.apache.shiro.SecurityUtils;
@@ -17,10 +19,10 @@ public abstract class AbstractContainerHelper extends ConverterHelper {
 
   private static final List<Class<?>> OBJECT_CLASSES =
       Collections.singletonList(TransactionContainer.class);
-  private final VariantInfo[] variants;
+  private final List<VariantInfo> variants;
 
   public AbstractContainerHelper(VariantInfo... variants) {
-    this.variants = variants;
+    this.variants = Arrays.asList(variants);
   }
 
   public final boolean isCompatibleSource(Variant source) {
@@ -33,7 +35,7 @@ public abstract class AbstractContainerHelper extends ConverterHelper {
   }
 
   public final TransactionContainer createContainer(Resource resource) {
-    final String sRID = resource.getAttribute("srid");
+    final String sRID = resource.getRequestAttributes().get("SRID").toString();
     final long timestamp = resource.getRequest().getDate().getTime();
     final Subject owner = SecurityUtils.getSubject();
   
@@ -54,10 +56,19 @@ public abstract class AbstractContainerHelper extends ConverterHelper {
     // this class only converts from multipart/form-data to Containers.
     if (TransactionContainer.class.isAssignableFrom(target)
         && isCompatibleSource(source)) {
-      return 1.0F;
+      return 2.0F;
     }
     return -1.0F;
   }
+
+  @Override
+  public List<VariantInfo> getVariants(Class<?> source) throws IOException {
+    if (source != null && TransactionContainer.class.isAssignableFrom(source)) {
+      return variants;
+    }
+  
+    return null;
+  }
   
 
 
diff --git a/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java b/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java
index dc35e3dcb765355c6713a45bf4fab8cbbdb3c29c..596eb6ac5892fc999d9eec4fa6dd355f1909eb18 100644
--- a/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java
+++ b/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java
@@ -2,7 +2,6 @@ package caosdb.server.converter.misc;
 
 import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
-import java.util.List;
 import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileItemStream;
 import org.apache.commons.fileupload.FileUploadException;
@@ -41,11 +40,6 @@ public class MultipartContainerConverter extends AbstractContainerHelper {
     super(VARIANT_MULTIPART_FORMDATA);
   }
 
-  @Override
-  public List<VariantInfo> getVariants(Class<?> source) throws IOException {
-    return null;
-  }
-
   @Override
   public float score(Object source, Variant target, Resource resource) {
     // this class only converts from multipart/form-data to Containers.
@@ -74,13 +68,21 @@ public class MultipartContainerConverter extends AbstractContainerHelper {
       // Name of the form field: FileRepresentation
       if (item.isFormField()) {
         if (item.getFieldName().equals("FileRepresentation")) {
-          final MediaType mediaType = MediaType.valueOf(item.getContentType());
+          MediaType mediaType = MediaType.valueOf(item.getContentType());
+          if(mediaType.equals(MediaType.TEXT_PLAIN, true)) {
+            mediaType = MediaType.TEXT_XML;
+          }
           Representation entities = new InputRepresentation(item.openStream(), mediaType);
           ConverterHelper helper = ConverterUtils.getBestHelper(entities, target, resource);
           if (helper == null) {
             throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), resource.getRequest(), resource.getResponse());
           }
-          result = (TransactionContainer) helper.toObject(source, target, resource);
+          try {
+            result = (TransactionContainer) helper.toObject(entities, target, resource);
+          } catch (IOException e) {
+            e.printStackTrace();
+            throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), e, resource.getRequest(), resource.getResponse());
+          }
         } else {
           throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "No entities submitted."), resource.getRequest(), resource.getResponse());
         }
diff --git a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java
index 8aa039e2ac4637ac76043e0b60094f799a4eaf7e..9abfd27481c0bda252d6b6c789b907e05c85c7be 100644
--- a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java
+++ b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java
@@ -2,7 +2,6 @@ package caosdb.server.converter.xml;
 
 import java.io.IOException;
 import java.util.Collection;
-import java.util.List;
 import org.apache.shiro.subject.Subject;
 import org.jdom2.Document;
 import org.jdom2.Element;
@@ -27,22 +26,14 @@ import caosdb.server.resource.JdomRepresentation;
 
 public class EntityXMLConverterHelper extends AbstractContainerHelper {
   
-  private static final VariantInfo VARIANT_TEXT_XML = new VariantInfo(MediaType.TEXT_XML);
-  private static final VariantInfo VARIANT_APPLICATION_XML = new VariantInfo(MediaType.APPLICATION_XML);
+  public static final VariantInfo VARIANT_TEXT_XML = new VariantInfo(MediaType.TEXT_XML);
+  public static final VariantInfo VARIANT_APPLICATION_XML = new VariantInfo(MediaType.APPLICATION_XML);
   private static final XMLParser xmlParser = new XMLParser();
   
-  @Override
-  public List<VariantInfo> getVariants(Class<?> source) throws IOException {
-    List<VariantInfo> result = null;
-
-    if (source != null && TransactionContainer.class.isAssignableFrom(source)) {
-        result = addVariant(result, VARIANT_TEXT_XML);
-        result = addVariant(result, VARIANT_APPLICATION_XML);
-    }
-
-    return result;
+  public EntityXMLConverterHelper() {
+    super(VARIANT_APPLICATION_XML, VARIANT_TEXT_XML);
   }
-
+  
   @SuppressWarnings("unchecked")
   @Override
   public <T> T toObject(Representation source, Class<T> target, Resource resource)
@@ -72,7 +63,7 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper {
   }
   
   private Representation toJdomRepresentation(TransactionContainer container, Resource resource) {
-    Document doc = new Document(generateRootElement(container, resource));
+    Document doc = toDocument(container, resource);
     
     String xsl = resource.getAttribute("xsl");
     if(xsl != null) {
@@ -102,14 +93,17 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper {
    *   <li>A timestamp
    *   <li>The URI to this resource.
    */
-  protected Element generateRootElement(TransactionContainer container, Resource resource) {
-    final Element retRoot = new Element("Response");
+  protected Document toDocument(TransactionContainer container, Resource resource) {
+    final Element root = new Element("Response");
+    
+    addUserInfo(root, container.getOwner());
+    root.setAttribute("srid", container.getRequestId());
+    root.setAttribute("timestamp", container.getTimestamp().toString());
+    root.setAttribute("baseuri", resource.getRootRef().toString());
+    
+    container.addToElement(root);
     
-    addUserInfo(retRoot, container.getOwner());
-    retRoot.setAttribute("srid", container.getRequestId());
-    retRoot.setAttribute("timestamp", container.getTimestamp().toString());
-    retRoot.setAttribute("baseuri", resource.getRootRef().toString());
-    return retRoot;
+    return new Document(root);
   }
 
   /**
diff --git a/src/main/java/caosdb/server/converter/xml/XMLParser.java b/src/main/java/caosdb/server/converter/xml/XMLParser.java
index cd9660439f697a6ffbb4a1d67a17218ae246e426..1353ec9e5fdfc12e3643d047026c9c8124ec2e30 100644
--- a/src/main/java/caosdb/server/converter/xml/XMLParser.java
+++ b/src/main/java/caosdb/server/converter/xml/XMLParser.java
@@ -10,32 +10,33 @@ import org.jdom2.input.SAXBuilder;
 
 public class XMLParser {
   
-    private final LinkedList<SAXBuilder> pool = new LinkedList<SAXBuilder>();
-    private final int max = 25;
-    private final int init = 5;
-    private final int min = 5;
+    private static final LinkedList<SAXBuilder> pool = new LinkedList<SAXBuilder>();
+    private static final int max = 25;
+    private static final int init = 5;
+    private static final int min = 5;
 
     private SAXBuilder getSAXBuilder() {
       try {
-        synchronized (this.pool) {
-          return this.pool.removeFirst();
+        synchronized (pool) {
+          return pool.removeFirst();
         }
       } catch (final NoSuchElementException e) {
       }
-      preLoad(this.min);
+      preLoad(min);
       return new SAXBuilder();
     }
 
-    private void release(final SAXBuilder sb) {
-      synchronized (this.pool) {
-        if (this.pool.size() <= this.max) {
-          this.pool.add(sb);
+    private int release(final SAXBuilder sb) {
+      synchronized (pool) {
+        if (pool.size() <= max) {
+          pool.add(sb);
         }
+        return pool.size();
       }
     }
 
     public XMLParser() {
-      preLoad(this.init);
+      preLoad(init);
     }
 
     public Document parse(final InputStream is) throws JDOMException, IOException {
@@ -54,9 +55,10 @@ public class XMLParser {
           new Thread() {
             @Override
             public void run() {
-              for (int j = 0; j < i; j++) {
+              int j = 0;
+              while (j < i) {
                 final SAXBuilder sb = new SAXBuilder();
-                release(sb);
+                j = release(sb);
               }
             }
           };
diff --git a/src/main/java/caosdb/server/entity/Entity.java b/src/main/java/caosdb/server/entity/Entity.java
index bf1022dad1c0e6b954ea876ecce674a87ff7650e..20e84bbf17e27626c2da130cab8f1b5f312a4e75 100644
--- a/src/main/java/caosdb/server/entity/Entity.java
+++ b/src/main/java/caosdb/server/entity/Entity.java
@@ -22,6 +22,17 @@
  */
 package caosdb.server.entity;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.subject.Subject;
+import org.jdom2.Element;
 import caosdb.server.CaosDBException;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.database.proto.VerySparseEntity;
@@ -47,17 +58,6 @@ import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.ServerMessages;
 import caosdb.server.utils.TransactionLogMessage;
 import caosdb.unit.Unit;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authz.AuthorizationException;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.subject.Subject;
-import org.jdom2.Element;
 
 public class Entity extends AbstractObservable implements EntityInterface {
 
@@ -1004,6 +1004,7 @@ public class Entity extends AbstractObservable implements EntityInterface {
   }
 
   private boolean datatypeOverride = false;
+  private EntityStatus skipOn = null;
 
   @Override
   public EntityInterface setDatatypeOverride(final boolean b) {
@@ -1094,6 +1095,11 @@ public class Entity extends AbstractObservable implements EntityInterface {
 
   @Override
   public boolean skipJob() {
-    return false;
+    return skipOn != null && skipOn != getEntityStatus();
+  }
+  
+  @Override
+  public void setSkip(EntityStatus e) {
+    this.skipOn = e;
   }
 }
diff --git a/src/main/java/caosdb/server/entity/EntityInterface.java b/src/main/java/caosdb/server/entity/EntityInterface.java
index 76c6c51eaabb3ee5864d9cb538f43338e96ce914..aba5654808d6f545cc842dbc0594ddf41aff0bf2 100644
--- a/src/main/java/caosdb/server/entity/EntityInterface.java
+++ b/src/main/java/caosdb/server/entity/EntityInterface.java
@@ -22,6 +22,9 @@
  */
 package caosdb.server.entity;
 
+import java.util.List;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.subject.Subject;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.database.proto.VerySparseEntity;
 import caosdb.server.datatype.AbstractDatatype;
@@ -34,12 +37,10 @@ import caosdb.server.entity.wrapper.Property;
 import caosdb.server.entity.xml.ToElementable;
 import caosdb.server.jobs.JobTarget;
 import caosdb.server.permissions.EntityACL;
+import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.Observable;
 import caosdb.server.utils.TransactionLogMessage;
 import caosdb.unit.Unit;
-import java.util.List;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.subject.Subject;
 
 public interface EntityInterface
     extends JobTarget, Observable, ToElementable, WriteEntity, TransactionEntity {
@@ -176,4 +177,6 @@ public interface EntityInterface
   public abstract String getQueryTemplateDefinition();
 
   public abstract void setQueryTemplateDefinition(String query);
+  
+  public abstract void setSkip(EntityStatus e);
 }
diff --git a/src/main/java/caosdb/server/entity/WritableEntity.java b/src/main/java/caosdb/server/entity/WritableEntity.java
index 6e1c21e27ffbb4ae76a31a6c0cd444c439325cb0..4bb4c6bf411d8cd54705f00d793bcb6d50c562cb 100644
--- a/src/main/java/caosdb/server/entity/WritableEntity.java
+++ b/src/main/java/caosdb/server/entity/WritableEntity.java
@@ -24,6 +24,7 @@ package caosdb.server.entity;
 
 import org.jdom2.Element;
 
+@Deprecated
 public class WritableEntity extends Entity {
 
   public WritableEntity(final Element element) {
diff --git a/src/main/java/caosdb/server/entity/container/WritableContainer.java b/src/main/java/caosdb/server/entity/container/WritableContainer.java
index 623bea6c3d1896905cd74a31d5c906c1e560d045..e1a95a6d3273539337a7f1e9f4209fc48d5def9d 100644
--- a/src/main/java/caosdb/server/entity/container/WritableContainer.java
+++ b/src/main/java/caosdb/server/entity/container/WritableContainer.java
@@ -27,6 +27,7 @@ import org.apache.shiro.subject.Subject;
 import org.jdom2.Element;
 import caosdb.server.entity.FileProperties;
 
+@Deprecated
 public abstract class WritableContainer extends TransactionContainer {
   private static final long serialVersionUID = -4097777313518959519L;
 
diff --git a/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java
index 1feeafdb7c158edd35a2eddd16af85b40e35211c..4bdc78fb47462e819305200a04e55d9b2f6c5eea 100644
--- a/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java
+++ b/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java
@@ -22,6 +22,12 @@
  */
 package caosdb.server.entity.wrapper;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.subject.Subject;
+import org.jdom2.Element;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.database.proto.VerySparseEntity;
 import caosdb.server.datatype.AbstractDatatype;
@@ -41,12 +47,6 @@ import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.Observer;
 import caosdb.server.utils.TransactionLogMessage;
 import caosdb.unit.Unit;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.subject.Subject;
-import org.jdom2.Element;
 
 public class EntityWrapper implements EntityInterface {
 
@@ -541,4 +541,9 @@ public class EntityWrapper implements EntityInterface {
   public boolean skipJob() {
     return this.entity.skipJob();
   }
+  
+  @Override
+  public void setSkip(EntityStatus e) {
+    this.entity.setSkip(e);
+  }
 }
diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java
index b3551b4dd92084e6296a57be4166b341efa68262..f22c92e1f48869863a3e6df4c3b470b69c76e5d9 100644
--- a/src/main/java/caosdb/server/jobs/Job.java
+++ b/src/main/java/caosdb/server/jobs/Job.java
@@ -22,6 +22,15 @@
  */
 package caosdb.server.jobs;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.subject.Subject;
+import org.reflections.Reflections;
 import caosdb.server.CaosDBException;
 import caosdb.server.database.BackendTransaction;
 import caosdb.server.database.backend.transaction.GetIDByName;
@@ -44,15 +53,6 @@ import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.Observable;
 import caosdb.server.utils.Observer;
 import caosdb.server.utils.ServerMessages;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.subject.Subject;
-import org.reflections.Reflections;
 
 public abstract class Job extends AbstractObservable implements Observer {
   private Transaction<? extends TransactionContainer> transaction = null;
@@ -141,9 +141,13 @@ public abstract class Job extends AbstractObservable implements Observer {
   TransactionContainer getContainer() {
     return getTransaction().getContainer();
   }
+  
+  protected final boolean cache() {
+    return getContainer().getFlags() == null || !"false".equals(getContainer().getFlags().get("cache"));
+  }
 
   protected final boolean isValidSubType(final int child, final int parent) {
-    if (!"false".equals(getContainer().getFlags().get("cache"))) {
+    if (cache()) {
       final HashMap<String, Boolean> isSubTypeCache = getCache("isSubType");
       final String key = child + "->" + parent;
       final Boolean cached = isSubTypeCache.get(key);
diff --git a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java
index ca683a5e7e3ad1625ef606fd671f9e70042e7331..b72f9fc56d75c254d19b3c4630f2be41828d5ac7 100644
--- a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java
+++ b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java
@@ -25,7 +25,10 @@ package caosdb.server.resource;
 
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
+import org.restlet.data.Header;
+import org.restlet.data.MediaType;
 import org.restlet.resource.ServerResource;
+import org.restlet.util.Series;
 import caosdb.server.utils.WebinterfaceUtils;
 
 /**
@@ -52,7 +55,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource {
   }
 
   /**
-   * Setup method, called by {@link org.restlet.resource.Resource#init(org.restlet.Context,
+   * Setup method, called by {@link org.restlet.resource.Resource.init(org.restlet.Context,
    * org.restlet.Request, org.restlet.Response)}.
    */
   @Override
@@ -68,7 +71,13 @@ public abstract class AbstractCaosDBServerResource extends ServerResource {
 
     this.setAttribute("xsl", getXSLScript());
 
+    MediaType mediaType = getRequest().getEntity().getMediaType();
     
+    Series<Header> headers = getRequest().getHeaders();
+    
+    if(mediaType == null) {
+      getRequest().getEntity().setMediaType(MediaType.TEXT_XML);
+    }
   }
 
   @Override
diff --git a/src/main/java/caosdb/server/resource/AuthenticationResource.java b/src/main/java/caosdb/server/resource/AuthenticationResource.java
index ef80acd5d3e97eea39754e524fcb0186cbcc7d93..870ad5c257e7615d2153a390f6d747dee960c935 100644
--- a/src/main/java/caosdb/server/resource/AuthenticationResource.java
+++ b/src/main/java/caosdb/server/resource/AuthenticationResource.java
@@ -25,48 +25,42 @@ package caosdb.server.resource;
 import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
 import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.logging.Level;
 import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AccountException;
 import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.CredentialsException;
 import org.apache.shiro.subject.Subject;
 import org.restlet.data.Form;
-import org.restlet.data.Parameter;
 import org.restlet.data.Reference;
 import org.restlet.data.Status;
+import org.restlet.engine.application.StatusInfo;
 import org.restlet.representation.Representation;
 import org.restlet.resource.Delete;
 import org.restlet.resource.Post;
+import org.restlet.resource.ResourceException;
 import caosdb.server.CaosDBException;
 import caosdb.server.accessControl.AuthenticationUtils;
 import caosdb.server.accessControl.RealmUsernamePasswordToken;
 import caosdb.server.accessControl.UserSources;
 import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
-import caosdb.server.entity.Message;
-import caosdb.server.utils.ServerMessages;
 
 public class AuthenticationResource extends AbstractCaosDBServerResource {
 
   @Delete
-  public Message logout()
+  public StatusInfo logout()
       throws ConnectionException, SQLException, CaosDBException, IOException,
           NoSuchAlgorithmException, Exception {
     final Subject user = SecurityUtils.getSubject();
     if (user.isAuthenticated()) {
       user.logout();
       getResponse().getCookieSettings().addAll(AuthenticationUtils.getLogoutCookies());
-      return ServerMessages.LOGOUT_INFO;
+      return new StatusInfo(new Status(Status.SUCCESS_OK, "You have successfully logged out."));
     }
 
-    getResponse().setStatus(Status.CLIENT_ERROR_FORBIDDEN);
-    return null;
+    return new StatusInfo(Status.CLIENT_ERROR_FORBIDDEN);
   }
 
   @Post
-  public Message login(final Representation entity) {
+  public StatusInfo login(final Representation entity) {
 
     getUser().logout();
 
@@ -93,33 +87,15 @@ public class AuthenticationResource extends AbstractCaosDBServerResource {
         if (referrerRef != null && !"logout".equals(referrerRef.getLastSegment())) {
           getResponse().redirectSeeOther(referrerRef);
         }
-        return null;
+        return new StatusInfo(new Status(Status.SUCCESS_OK, "Hello, " + username + "!"));
 
-      } catch (final CredentialsException e) {
-        getLogger().log(Level.INFO, "LOGIN_FAILED", e);
-      } catch (final AccountException e) {
-        getLogger().log(Level.INFO, "LOGIN_FAILED", e);
       } catch (final AuthenticationException e) {
         getLogger().log(Level.INFO, "LOGIN_FAILED", e);
+        throw new ResourceException(new Status(Status.CLIENT_ERROR_UNAUTHORIZED, "Login failed."), e, getRequest(), getResponse());
       }
+    } else {
+      throw new ResourceException(new Status(Status.CLIENT_ERROR_UNAUTHORIZED, "Login failed. Please provide a user name and a password."), getRequest(), getResponse());
     }
-
-    getResponse().setStatus(Status.CLIENT_ERROR_UNAUTHORIZED);
-    return null;
-  }
-
-  public final Map<String, String> getFlags() {
-    final Form queryAsForm = getRequest().getResourceRef().getQueryAsForm(true);
-    final Map<String, String> result = new HashMap<>();
-    if (queryAsForm != null) {
-      for (final Parameter p : queryAsForm) {
-        result
-            .put(
-                p.getName(),
-                (p.getValue() == null || p.getValue().isEmpty() ? null : p.getValue()));
-      }
-    }
-    return result;
   }
-
+  
 }
diff --git a/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java b/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java
index caf1d7c4f4a823939f39070670a8222e9b5eca67..d1f7a590f7d37aa65d218e209c924abdc363f514 100644
--- a/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java
+++ b/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java
@@ -42,7 +42,7 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc
   }
 
   @Get
-  protected final TransactionContainer httpGetInChildClass() throws ConnectionException, IOException,
+  public final TransactionContainer httpGetInChildClass() throws ConnectionException, IOException,
       SQLException, CaosDBException, NoSuchAlgorithmException, Exception {
       
         final long t1 = System.currentTimeMillis();
@@ -78,6 +78,9 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc
 
   @Override
   public void doInit() {
+    super.doInit();
+    
+    
     String specifier = (String) getRequestAttributes().get("specifier");
     if (specifier != null && !specifier.equals("")) {
       try {
diff --git a/src/main/java/caosdb/server/resource/transaction/EntityResource.java b/src/main/java/caosdb/server/resource/transaction/EntityResource.java
index 47d40918040ca85f0343d6cc5237618b1bb5d2c2..e31b748d73ea0486af820cefbd9b51dbfecc4d2b 100644
--- a/src/main/java/caosdb/server/resource/transaction/EntityResource.java
+++ b/src/main/java/caosdb/server/resource/transaction/EntityResource.java
@@ -22,10 +22,8 @@
  */
 package caosdb.server.resource.transaction;
 
-import org.jdom2.JDOMException;
 import org.restlet.resource.Post;
 import org.restlet.resource.Put;
-import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
 import caosdb.server.entity.container.DeleteContainer;
 import caosdb.server.entity.container.TransactionContainer;
 import caosdb.server.resource.transaction.handlers.IDHandler;
@@ -43,7 +41,7 @@ public class EntityResource extends AbstractEntityResource {
 
 
   @org.restlet.resource.Delete
-  protected final TransactionContainer httpDeleteInChildClass() throws Exception {
+  public final TransactionContainer httpDeleteInChildClass() throws Exception {
 
     final DeleteContainer entityContainer =
         new DeleteContainer(getUser(), getTimestamp(), getSRID(), getFlags());
@@ -57,10 +55,10 @@ public class EntityResource extends AbstractEntityResource {
   }
 
   @Post
-  protected final TransactionContainer httpPostInChildClass(final TransactionContainer entityContainer)
-      throws Exception {
+  public final TransactionContainer httpPostInChildClass(final TransactionContainer entityContainer) throws Exception {
 
 
+    entityContainer.setFlags(getFlags());
     final Insert insert = new Insert(entityContainer);
     insert.execute();
 
@@ -68,13 +66,14 @@ public class EntityResource extends AbstractEntityResource {
   }
 
   @Put
-  protected final TransactionContainer httpPutInChildClass(final TransactionContainer entityContainer)
-      throws ConnectionException, JDOMException, Exception {
+  public final TransactionContainer httpPutInChildClass(final TransactionContainer entityContainer) throws Exception
+     {
 
 
+    entityContainer.setFlags(getFlags());
     final Update update = new Update(entityContainer);
-    update.execute();
+      update.execute();
+      return entityContainer;
 
-    return entityContainer;
   }
 }
diff --git a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
index d1055b5e4c4a3bf0676883cc221e60d47442f304..4e3a604a9dc5f7fb71bfabbf83785b84ce75b008 100644
--- a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
+++ b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
@@ -22,6 +22,13 @@
  */
 package caosdb.server.transaction;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TimeZone;
+import org.jdom2.Element;
 import caosdb.datetime.UTCDateTime;
 import caosdb.server.database.DatabaseMonitor;
 import caosdb.server.database.access.Access;
@@ -30,17 +37,11 @@ import caosdb.server.database.backend.transaction.GetFileIterator;
 import caosdb.server.database.backend.transaction.GetFileRecordByPath;
 import caosdb.server.database.backend.transaction.RetrieveAllUncheckedFiles;
 import caosdb.server.database.backend.transaction.SetFileCheckedTimestamp;
+import caosdb.server.database.exceptions.EntityDoesNotExistException;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.entity.Message;
 import caosdb.server.entity.xml.ToElementable;
 import caosdb.server.utils.SHA512;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.TimeZone;
-import org.jdom2.Element;
 
 public class FileStorageConsistencyCheck extends Thread
     implements ToElementable, TransactionInterface {
@@ -86,12 +87,8 @@ public class FileStorageConsistencyCheck extends Thread
           continue;
         }
 
-        final GetFileRecordByPath t = execute(new GetFileRecordByPath(path), this.access);
-
-        if (t.getEntity() == null) {
-          this.results.put(path, FileConsistencyCheck.UNKNOWN_FILE);
-          continue;
-        }
+        try {
+          final GetFileRecordByPath t = execute(new GetFileRecordByPath(path), this.access);
         final int result =
             execute(
                     new FileConsistencyCheck(
@@ -104,6 +101,11 @@ public class FileStorageConsistencyCheck extends Thread
         }
 
         execute(new SetFileCheckedTimestamp(t.getId(), this.ts), this.access);
+
+        } catch (EntityDoesNotExistException e) {
+          this.results.put(path, FileConsistencyCheck.UNKNOWN_FILE);
+          continue;
+        }
       }
 
       // test all remaining file records
diff --git a/src/main/java/caosdb/server/transaction/Update.java b/src/main/java/caosdb/server/transaction/Update.java
index ae39ade73ae7d4982bc36aaa793cedc1ac81fcea..0fc0e03c8cc2725d059a857a1d86fb49dd65aaa0 100644
--- a/src/main/java/caosdb/server/transaction/Update.java
+++ b/src/main/java/caosdb/server/transaction/Update.java
@@ -58,6 +58,8 @@ public class Update extends WriteTransaction<TransactionContainer> {
     // collect all ids of the entities which are to be updated.
     final TransactionContainer oldContainer = new TransactionContainer();
     for (final Entity entity : getContainer()) {
+      entity.setSkip(EntityStatus.QUALIFIED);
+      
       // entity has no id -> it cannot be updated.
       if (!entity.hasId()) {
         entity.addError(ServerMessages.ENTITY_HAS_NO_ID);