diff --git a/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java b/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java
index c1598f30d98e224a24705c2196fbcaf81be39fca..ba54a1c84219cd29b80eecd9ee9107c7a3572c93 100644
--- a/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java
+++ b/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java
@@ -37,6 +37,7 @@ public class DownloadBuffer {
     final long next_chunk_size = Math.min(unread_bytes, getChunkSize());
 
     final MappedByteBuffer map = fileChannel.map(MapMode.READ_ONLY, position, next_chunk_size);
+    fileChannel.position(position + next_chunk_size);
 
     final FileChunk.Builder builder = FileChunk.newBuilder();
     builder.setData(ByteString.copyFrom(map));
diff --git a/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java
index 8007dcb1658d7dc6c76a0bf63efca4854045203c..fd46205354369a4d2893ca06f766c2fccb7a4164 100644
--- a/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java
@@ -133,10 +133,14 @@ public class FileTransmissionServiceImpl extends FileTransmissionServiceImplBase
       final FileDownloadRequest request,
       final StreamObserver<FileDownloadResponse> responseObserver) {
     try {
-      final FileDownloadResponse response =
+      FileDownloadResponse response =
           fileDownloadRegistration.downloadNextChunk(request.getFileTransmissionId());
-
       responseObserver.onNext(response);
+
+      while (response.getStatus() == TransmissionStatus.TRANSMISSION_STATUS_GO_ON) {
+        response = fileDownloadRegistration.downloadNextChunk(request.getFileTransmissionId());
+        responseObserver.onNext(response);
+      }
       responseObserver.onCompleted();
     } catch (final Exception e) {
       e.printStackTrace();