diff --git a/README.md b/README.md
index e28c961c2f25ffeb170a0b88db7a0a7b0ff114d1..277d86d22e76df0cfe5f166903f1fc3a69eae299 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,9 @@
 
 ## Changelog
 
-### 4.6.0-SNAPSHOT
+### 4.7.0-SNAPSHOT
+
+### 4.6.0
 * Update [OZGCloud License Generator](ozgcloud-common-license/readme.md)
 
 ### 4.5.0
diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java
index 84c34d902fdafa5b98e80f55fa78862d7072ad0c..49f72606a3afc7f0534f98405406fb1be1f0668f 100644
--- a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java
+++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java
@@ -123,11 +123,15 @@ public class GrpcBinaryFileServerDownloader<T> {
 	}
 
 	void tryCompleteRequest() {
-		if (downloadFinished.get()) {
+		if (shouldCompleteRequest()) {
 			completeRequest();
 		}
 	}
 
+	boolean shouldCompleteRequest() {
+		return downloadFinished.get() && requestFinished.compareAndSet(false, true);
+	}
+
 	void completeRequest() {
 		if (requestFinished.getAndSet(true)) {
 			return;
diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java
index 3da066494a2a2effbe89fa32bfbcb37702d74f48..215303f04a0d8312d085725a0506ca20cae35ca1 100644
--- a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java
+++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java
@@ -318,9 +318,16 @@ class GrpcBinaryFileServerDownloaderTest {
 	@Nested
 	class TestTryCompleteRequest {
 
+		@Test
+		void shouldCallShouldCompleteRequest() {
+			downloader.tryCompleteRequest();
+
+			verify(downloader).shouldCompleteRequest();
+		}
+
 		@Test
 		void shouldCallCompleteRequest() {
-			setDownloadFinishedField(true);
+			doReturn(true).when(downloader).shouldCompleteRequest();
 
 			downloader.tryCompleteRequest();
 
@@ -329,7 +336,7 @@ class GrpcBinaryFileServerDownloaderTest {
 
 		@Test
 		void shouldNotCallCompleteRequest() {
-			setDownloadFinishedField(false);
+			doReturn(false).when(downloader).shouldCompleteRequest();
 
 			downloader.tryCompleteRequest();
 
@@ -337,6 +344,65 @@ class GrpcBinaryFileServerDownloaderTest {
 		}
 	}
 
+	@Nested
+	class TestShouldCompleteRequest {
+
+		@Nested
+		class TestWhenDownloadFinished {
+
+			@BeforeEach
+			void init() {
+				setDownloadFinishedField(true);
+			}
+
+			@Test
+			void shouldReturnTrue() {
+				var result = downloader.shouldCompleteRequest();
+
+				assertThat(result).isTrue();
+			}
+
+			@Test
+			void shouldReturnFalseIfRequestFinished() {
+				setRequestFinishedField(true);
+
+				var result = downloader.shouldCompleteRequest();
+
+				assertThat(result).isFalse();
+			}
+
+			@Test
+			void shouldUpdateRequestFinished() {
+				downloader.shouldCompleteRequest();
+
+				assertThat(getRequestFinished()).isTrue();
+			}
+		}
+
+		@Nested
+		class TestWhenDownloadRunning {
+
+			@BeforeEach
+			void init() {
+				setDownloadFinishedField(false);
+			}
+
+			@Test
+			void shouldReturnFalse() {
+				var result = downloader.shouldCompleteRequest();
+
+				assertThat(result).isFalse();
+			}
+
+			@Test
+			void shouldNotUpdateRequestFinished() {
+				downloader.shouldCompleteRequest();
+
+				assertThat(getRequestFinished()).isFalse();
+			}
+		}
+	}
+
 	@Nested
 	class TestCompleteRequest {
 
@@ -345,7 +411,7 @@ class GrpcBinaryFileServerDownloaderTest {
 
 		@BeforeEach
 		void mock() {
-			setSendingFinishedField(false);
+			setRequestFinishedField(false);
 			setDownloadFinishedField(true);
 			setInputStreamField(inputStream);
 		}
@@ -441,26 +507,26 @@ class GrpcBinaryFileServerDownloaderTest {
 
 	}
 
-	@SneakyThrows
 	private void setOutputStreamField(OutputStream outputStream) {
 		ReflectionTestUtils.setField(downloader, "outputStream", outputStream);
 	}
 
-	@SneakyThrows
 	private void setInputStreamField(InputStream inputStream) {
 		ReflectionTestUtils.setField(downloader, "inputStream", inputStream);
 	}
 
-	@SneakyThrows
 	private void setDownloadFinishedField(boolean downloadFinished) {
 		ReflectionTestUtils.setField(downloader, "downloadFinished", new AtomicBoolean(downloadFinished));
 	}
 
-	@SneakyThrows
-	private void setSendingFinishedField(boolean requestFinished) {
+	private void setRequestFinishedField(boolean requestFinished) {
 		ReflectionTestUtils.setField(downloader, "requestFinished", new AtomicBoolean(requestFinished));
 	}
 
+	private boolean getRequestFinished() {
+		return ReflectionTestUtils.getField(downloader, "requestFinished", AtomicBoolean.class).get();
+	}
+
 	static class GrpcResponseDummy {
 	}
 }
\ No newline at end of file