diff --git a/src/main/java/caosdb/server/FileSystem.java b/src/main/java/caosdb/server/FileSystem.java
index c46f0f644442a5df6c2363dedfacb38025cacde4..a26aee88352b3410ecc0e2fde40777d8f5681a79 100644
--- a/src/main/java/caosdb/server/FileSystem.java
+++ b/src/main/java/caosdb/server/FileSystem.java
@@ -24,16 +24,6 @@
 
 package caosdb.server;
 
-import caosdb.server.database.access.Access;
-import caosdb.server.database.backend.transaction.GetFileRecordByPath;
-import caosdb.server.database.misc.TransactionBenchmark;
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.entity.FileProperties;
-import caosdb.server.entity.Message;
-import caosdb.server.utils.FileUtils;
-import caosdb.server.utils.ServerMessages;
-import caosdb.server.utils.Utils;
-import com.google.common.io.Files;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -44,6 +34,17 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.regex.Pattern;
 import org.apache.commons.fileupload.FileItemStream;
+import com.google.common.io.Files;
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.transaction.GetFileRecordByPath;
+import caosdb.server.database.exceptions.EntityDoesNotExistException;
+import caosdb.server.database.misc.TransactionBenchmark;
+import caosdb.server.entity.EntityInterface;
+import caosdb.server.entity.FileProperties;
+import caosdb.server.entity.Message;
+import caosdb.server.utils.FileUtils;
+import caosdb.server.utils.ServerMessages;
+import caosdb.server.utils.Utils;
 
 public class FileSystem {
   private static String filesystem = null;
@@ -324,15 +325,22 @@ public class FileSystem {
         final GetFileRecordByPath t = new GetFileRecordByPath(file.getPath());
         t.setAccess(access);
         t.setTransactionBenchmark(b);
-        t.executeTransaction();
+        try {
+          t.executeTransaction();
+        } catch (EntityDoesNotExistException e) {
+          // could not determine which entity owns this path
+          // this is usually the case when target is a directory
+        }
         if (t.getEntity() != null) {
           final Integer foreign = t.getId();
           if (foreign != null && foreign.equals(entity.getId())) {
+            // entity already owns this path
             return true;
           }
-          throw ServerMessages.TARGET_PATH_EXISTS;
         }
       }
+      // another entity owns this path
+      throw ServerMessages.TARGET_PATH_EXISTS;
     }
 
     return true;