diff --git a/caosdb-proto b/caosdb-proto
index fd60795f62335368255797db43eb0429ec1705fc..96e7a1fb667ed1bb3b2602af6c69724519bf5118 160000
--- a/caosdb-proto
+++ b/caosdb-proto
@@ -1 +1 @@
-Subproject commit fd60795f62335368255797db43eb0429ec1705fc
+Subproject commit 96e7a1fb667ed1bb3b2602af6c69724519bf5118
diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index 8835cb6e552a54480cee90bd4b22cccc3de18b92..030b52544fec858ef3c62c531e9627baf5500551 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -33,6 +33,7 @@ import org.caosdb.api.entity.v1.Entity;
 import org.caosdb.api.entity.v1.EntityRequest;
 import org.caosdb.api.entity.v1.EntityResponse;
 import org.caosdb.api.entity.v1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
+import org.caosdb.api.entity.v1.FindQueryResult;
 import org.caosdb.api.entity.v1.IdResponse;
 import org.caosdb.api.entity.v1.InsertRequest;
 import org.caosdb.api.entity.v1.InsertResponse;
@@ -79,6 +80,24 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     this.fileTransmissionService = fileTransmissionService;
   }
 
+  private void prepareDownload(
+      EntityResponse.Builder entityResponse, EntityInterface entity, FileDownload fileDownload)
+      throws Exception {
+    try {
+      entity.checkPermission(EntityPermission.RETRIEVE_FILE);
+      if (fileDownload == null) {
+        fileDownload = fileTransmissionService.registerFileDownload(null);
+      }
+      entity.getFileProperties().retrieveFromFileSystem();
+      entityResponse.setDownloadId(
+          fileTransmissionService.registerFileDownload(
+              fileDownload.getId(), entity.getFileProperties()));
+    } catch (AuthenticationException exc) {
+      entityResponse.addErrors(caosdbToGrpc.convert(ServerMessages.AUTHORIZATION_ERROR));
+      entityResponse.addInfos(caosdbToGrpc.convert(new Message(exc.getMessage())));
+    }
+  }
+
   /**
    * Handle read-only transactions. Of these only one may be a query at the moment, the others must
    * be ID retrieves.
@@ -144,25 +163,29 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
       builder
           .addResponsesBuilder()
           .setRetrieveResponse(RetrieveResponse.newBuilder().setSelectResult(selectResult));
+    } else if (container.getQuery() != null && container.getQuery().getType() == Query.Type.FIND) {
+      // this was a find query
+      final boolean download_files_container = container.getFlags().containsKey("download_files");
+      FindQueryResult.Builder findResult = FindQueryResult.newBuilder();
+      for (final EntityInterface entity : container) {
+        final EntityResponse.Builder entityResponse = caosdbToGrpc.convert(entity);
+        if ((download_files_container || entity.getFlags().containsKey("download_files"))
+            && entity.hasFileProperties()) {
+          prepareDownload(entityResponse, entity, fileDownload);
+        }
+        findResult.addResultSet(entityResponse);
+      }
+      builder
+          .addResponsesBuilder()
+          .setRetrieveResponse(RetrieveResponse.newBuilder().setFindResult(findResult));
     } else {
+      // normal retrieval via id
       final boolean download_files_container = container.getFlags().containsKey("download_files");
       for (final EntityInterface entity : container) {
         final EntityResponse.Builder entityResponse = caosdbToGrpc.convert(entity);
         if ((download_files_container || entity.getFlags().containsKey("download_files"))
             && entity.hasFileProperties()) {
-          try {
-            entity.checkPermission(EntityPermission.RETRIEVE_FILE);
-            if (fileDownload == null) {
-              fileDownload = fileTransmissionService.registerFileDownload(null);
-            }
-            entity.getFileProperties().retrieveFromFileSystem();
-            entityResponse.setDownloadId(
-                fileTransmissionService.registerFileDownload(
-                    fileDownload.getId(), entity.getFileProperties()));
-          } catch (AuthenticationException exc) {
-            entityResponse.addErrors(caosdbToGrpc.convert(ServerMessages.AUTHORIZATION_ERROR));
-            entityResponse.addInfos(caosdbToGrpc.convert(new Message(exc.getMessage())));
-          }
+          prepareDownload(entityResponse, entity, fileDownload);
         }
         builder
             .addResponsesBuilder()