diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java
index 1b7f1c1455702c9764d3115a382cfc701a6ba425..f66eb63a796f0e06e990cce6eaf7bfa6ecf75e0e 100644
--- a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java
+++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java
@@ -32,51 +32,47 @@ import io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import lombok.NonNull;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class GrpcFileUploadUtils {
 
-	/*
-	 * Q = Request Type; S = Response Type
+	/**
+	 * @param <Q> Request Type
+	 * @param <S> Response Type
+	 * @deprecated use {@link #createStreamExclusiveFileSender(BiFunction, InputStream, Function)} instead
 	 */
+	@Deprecated(since = "4.13.0")
 	public static <Q, S> FileSender<Q, S> createSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
 			Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
 		return new FileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
 	}
 
+	/**
+	 * @param <Q> Request Type
+	 * @param <S> Response Type
+	 */
+	public static <Q, S> StreamingFileSender<Q, S> createStreamExclusiveFileSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
+			Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
+		return new StreamExclusiveFileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
+	}
+
+	/**
+	 * @param <Q> Request Type
+	 * @param <S> Response Type
+	 */
 	public static <Q, S> StreamingFileSender<Q, S> createStreamSharingSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
 			CallStreamObserver<Q> requestObserver, Consumer<Runnable> onReadyHandlerRegistrar) {
 		return new StreamSharingFileSender<>(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
 	}
 
-	public static class FileSender<Q, S> {
-
-		private final StreamExclusiveFileSender<Q, S> sender;
+	// for backwards compatibility
+	public static class FileSender<Q, S> extends StreamExclusiveFileSender<Q, S> {
 
 		FileSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
 				Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
-			this.sender = new StreamExclusiveFileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
-		}
-
-		public FileSender<Q, S> withMetaData(@NonNull Q metaData) {
-			sender.withMetaData(metaData);
-			return this;
-		}
-
-		public FileSender<Q, S> send() {
-			sender.send();
-			return this;
-		}
-
-		public void cancelOnTimeout() {
-			sender.cancelOnTimeout();
-		}
-
-		public void cancelOnError(Throwable t) {
-			sender.cancelOnError(t);
+			super(chunkBuilder, inputStream, reqObserverBuilder);
 		}
 	}
 
diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java
index 82c469892cc512aff9138c537fa17a1660b160a0..c94b69ec5df2eec920e0797589706ace0f09e6cb 100644
--- a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java
+++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java
@@ -24,22 +24,18 @@
 package de.ozgcloud.common.binaryfile;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
 
 import java.io.InputStream;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 
 import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType;
 import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType;
-import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils.FileSender;
-import de.ozgcloud.common.test.ReflectionTestUtils;
 import io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 
@@ -60,107 +56,32 @@ class GrpcFileUploadUtilsTest {
 	class TestCreateSender {
 
 		@Test
-		void shouldReturnInstanceOfFileSender() {
+		void shouldReturnInstanceOfStreamExclusiveFileSender() {
 			var createdSender = GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder);
 
-			assertThat(createdSender).isInstanceOf(FileSender.class);
+			assertThat(createdSender).isInstanceOf(StreamExclusiveFileSender.class);
 		}
 	}
 
 	@Nested
-	class TestCreateStreamSharingSender {
+	class TestCreateStreamExclusiveFileSender {
 
 		@Test
-		void shouldReturnInstanceOfStreamSharingSender() {
-			var createdSender = GrpcFileUploadUtils.createStreamSharingSender(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
+		void shouldReturnInstanceOfStreamExclusiveFileSender() {
+			var createdSender = GrpcFileUploadUtils.createStreamExclusiveFileSender(chunkBuilder, inputStream, reqObserverBuilder);
 
-			assertThat(createdSender).isInstanceOf(StreamSharingFileSender.class);
+			assertThat(createdSender).isInstanceOf(StreamExclusiveFileSender.class);
 		}
 	}
 
 	@Nested
-	class TestFileSender {
-
-		private final FileSender<TestRequestType, TestResponseType> fileSender = new FileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
-		@Mock
-		private StreamExclusiveFileSender<TestRequestType, TestResponseType> streamExclusiveFileSender;
+	class TestCreateStreamSharingSender {
 
 		@Test
-		void shouldCreateStreamExclusiveFileSender() {
-			var internalFileSender = ReflectionTestUtils.getField(fileSender, "sender", StreamExclusiveFileSender.class);
-
-			assertThat(internalFileSender).isInstanceOf(StreamExclusiveFileSender.class);
-		}
-
-		@Nested
-		class TestMethods {
-
-			@BeforeEach
-			void init() {
-				ReflectionTestUtils.setField(fileSender, "sender", streamExclusiveFileSender);
-			}
-
-			@Nested
-			class TestWithMetaData {
-
-				private final TestRequestType request = new TestRequestType();
-
-				@Test
-				void shouldDelegate() {
-					fileSender.withMetaData(request);
-
-					verify(streamExclusiveFileSender).withMetaData(request);
-				}
-
-				@Test
-				void shouldReturnItself() {
-					var senderWithMetaData = fileSender.withMetaData(request);
-
-					assertThat(senderWithMetaData).isSameAs(fileSender);
-				}
-			}
-
-			@Nested
-			class TestSend {
-
-				@Test
-				void shouldDelegate() {
-					fileSender.send();
-
-					verify(streamExclusiveFileSender).send();
-				}
-
-				@Test
-				void shouldReturnItself() {
-					var returnedSender = fileSender.send();
-
-					assertThat(returnedSender).isSameAs(fileSender);
-				}
-			}
-
-			@Nested
-			class TestCancelOnTimeout {
-
-				@Test
-				void shouldDelegate() {
-					fileSender.cancelOnTimeout();
-
-					verify(streamExclusiveFileSender).cancelOnTimeout();
-				}
-			}
-
-			@Nested
-			class TestCancelOnError {
-
-				@Test
-				void shouldDelegate() {
-					var error = new Throwable();
-
-					fileSender.cancelOnError(error);
+		void shouldReturnInstanceOfStreamSharingSender() {
+			var createdSender = GrpcFileUploadUtils.createStreamSharingSender(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
 
-					verify(streamExclusiveFileSender).cancelOnError(error);
-				}
-			}
+			assertThat(createdSender).isInstanceOf(StreamSharingFileSender.class);
 		}
 	}
 }
\ No newline at end of file