diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index caeac0e6a0f7e6414585fcae6e81d95036daab4a..3aa9954e4d1bcf28173dba4405cfff3574c1e562 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -39,6 +39,7 @@ import org.caosdb.api.entity.v1alpha1.UpdateRequest;
 import org.caosdb.api.entity.v1alpha1.UpdateResponse;
 import org.caosdb.api.entity.v1alpha1.Version;
 import org.caosdb.datetime.DateTimeInterface;
+import org.caosdb.server.CaosDBException;
 import org.caosdb.server.datatype.AbstractCollectionDatatype;
 import org.caosdb.server.datatype.AbstractDatatype;
 import org.caosdb.server.datatype.BooleanDatatype;
@@ -476,6 +477,12 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     FileDownload file_download = null;
 
     for (final TransactionRequest sub_request : request.getRequestsList()) {
+      if (sub_request.getWrappedRequestsCase() != WrappedRequestsCase.RETRIEVE_REQUEST) {
+        throw new CaosDBException(
+            "Cannot process a "
+                + sub_request.getWrappedRequestsCase().name()
+                + " in a read-only request.");
+      }
       final boolean fileDownload = sub_request.getRetrieveRequest().getRegisterFileDownload();
       if (sub_request.getRetrieveRequest().hasQuery()
           && !sub_request.getRetrieveRequest().getQuery().getQuery().isBlank()) {
@@ -564,18 +571,17 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
 
   public MultiTransactionResponse transaction(final MultiTransactionRequest request)
       throws Exception {
-    // we currently can only process one request type per multi transaction request.
-    WrappedRequestsCase requestCase = WrappedRequestsCase.WRAPPEDREQUESTS_NOT_SET;
-
     if (request.getRequestsCount() > 0) {
-      requestCase = request.getRequests(0).getWrappedRequestsCase();
-    }
-
-    switch (requestCase) {
-      case RETRIEVE_REQUEST:
-        return retrieve(request);
-      default:
-        return write(request);
+      final WrappedRequestsCase requestCase = request.getRequests(0).getWrappedRequestsCase();
+      switch (requestCase) {
+        case RETRIEVE_REQUEST:
+          return retrieve(request);
+        default:
+          return write(request);
+      }
+    } else {
+      // empty request, empty response.
+      return MultiTransactionResponse.newBuilder().build();
     }
   }
 
@@ -649,7 +655,10 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
           }
           break;
         default:
-          throw new UnsupportedOperationException("Not implemented");
+          throw new CaosDBException(
+              "Cannot process a "
+                  + request.getWrappedRequestsCase().name()
+                  + " in a write request.");
       }
     }