diff --git a/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java b/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java
index 5f24838b97067eda3f3ecc29246b715223ecf47d..56382217f9eea7f397440c10bbde524ccc1da7f0 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java
@@ -7,13 +7,11 @@ import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
 import io.grpc.ManagedChannel;
 import io.grpc.stub.AbstractStub;
 import lombok.Builder;
-import lombok.Getter;
 
 @Builder
-@Getter
 class ClosableStub<T extends AbstractStub<?>> implements ManagableStub<T> {
 
-	private static final int SHUTDOWM_TIME = 10;
+	private static final int SHUTDOWM_TIME_IN_SEC = 3;
 
 	private T stub;
 	private ManagedChannel channel;
@@ -32,7 +30,7 @@ class ClosableStub<T extends AbstractStub<?>> implements ManagableStub<T> {
 
 	private void shutdownChannel() {
 		try {
-			channel.shutdown().awaitTermination(ClosableStub.SHUTDOWM_TIME, TimeUnit.SECONDS);
+			channel.shutdown().awaitTermination(ClosableStub.SHUTDOWM_TIME_IN_SEC, TimeUnit.SECONDS);
 		} catch (InterruptedException e) {
 			Thread.currentThread().interrupt();
 			throw new TechnicalException("Error shutting down grpc channel.", e);
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java
index c90fc428df04c7805a5d58a7ad8618a21e67f39e..38aaa1d273ff80880b8546053bed6ca169a54dcc 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java
@@ -140,11 +140,10 @@ public class VorgangManagerServerResolver {
 	}
 
 	private Optional<String> getChannelTarget(Optional<String> organisationsEinheitId) {
-		if (isSingleRoutingStrategy()) {
-			return properties.getTargetVorgangManagerName();
-		} else {
-			return organisationsEinheitId.map(properties.getOrganisationseinheiten()::get);
-		}
+		return isSingleRoutingStrategy()
+				? properties.getTargetVorgangManagerName()
+				: organisationsEinheitId.map(properties.getOrganisationseinheiten()::get);
+
 	}
 
 	private boolean isSingleRoutingStrategy() {
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
index 7bf32236907b9e50f81f1138bda9ff1c3c60cf4c..24008c1011eb6f604216cf5fb2ad51577dd9dea6 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
@@ -72,11 +72,11 @@ public class VorgangRemoteService {
 
 		logConnection(organisationsEinheitenId, vorgangServiceStub.get());
 
-		var vorgangId = createVorgang(formData, eingang, vorgangServiceStub.get(), binaryFileServiceStub.get());
-
-		finishStubConnections(List.of(vorgangServiceStub, binaryFileServiceStub));
-
-		return vorgangId;
+		try {
+			return createVorgang(formData, eingang, vorgangServiceStub.get(), binaryFileServiceStub.get());
+		} finally {
+			finishStubConnections(List.of(vorgangServiceStub, binaryFileServiceStub));
+		}
 	}
 
 	void logConnection(Optional<String> organisationsEinheitenId, VorgangServiceBlockingStub vorgangStub) {
@@ -143,14 +143,17 @@ public class VorgangRemoteService {
 		}
 
 		private IncomingFileGroup uploadAttachment(IncomingFileGroup attachment) {
-			var filesWithId = attachment.getFiles().stream().map(file -> file.toBuilder().id(uploadIncomingFile(file)).build()).toList();
+			var filesWithId = attachment.getFiles().stream().map(this::addIncomingFileId).toList();
 
 			return IncomingFileGroup.builder().name(attachment.getName()).files(filesWithId).build();
 		}
 
 		List<IncomingFile> uploadRepresentations() {
-			return formData.getRepresentations().stream()
-					.map(representation -> representation.toBuilder().id(uploadIncomingFile(representation)).build()).toList();
+			return formData.getRepresentations().stream().map(this::addIncomingFileId).toList();
+		}
+
+		private IncomingFile addIncomingFileId(IncomingFile file) {
+			return file.toBuilder().id(uploadIncomingFile(file)).build();
 		}
 
 		String uploadIncomingFile(IncomingFile incomingFile) {
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java
index 08a24dcd900e53769136009f84bc3b3a1bd4a22e..c47a52154f7130f84c427ac090c3b20cb3245fe3 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java
@@ -287,8 +287,7 @@ class VorgangManagerServerResolverTest {
 			var createdStub = (ClosableStub) createCloseableStub();
 
 			assertThat(createdStub).isNotNull();
-			assertThat(createdStub.getStub()).isEqualTo(stub);
-			assertThat(createdStub.getChannel()).isEqualTo(managedChannel);
+			assertThat(createdStub.get()).isEqualTo(stub);
 		}
 
 		private <T extends AbstractStub<T>> ManagableStub<T> createCloseableStub() {
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
index a5d7ad6c3d15c320a7149e30355ebd1bec06029b..465b61fcdbe88fc611f3990c2a6ec00d5073ab96 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
@@ -106,10 +106,9 @@ class VorgangRemoteServiceTest {
 
 		private final Optional<String> organisationsEinheitId = Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID);
 
+		@SneakyThrows
 		@BeforeEach
 		void mock() {
-			doReturn(vorgangId).when(remoteService).createVorgang(any(), any(), any(), any());
-
 			when(resolver.resolveVorgangServiceBlockingStubByOrganisationseinheitenId(any())).thenReturn(managableVorgangServiceStub);
 			when(managableVorgangServiceStub.get()).thenReturn(vorgangServiceStub);
 
@@ -120,42 +119,78 @@ class VorgangRemoteServiceTest {
 			doNothing().when(remoteService).finishStubConnections(any());
 		}
 
-		@Test
-		void shouldGetVorgangService() {
-			createVorgang();
+		@DisplayName("with no exception occuring")
+		@Nested
+		class TestWithNoException {
 
-			verify(resolver).resolveVorgangServiceBlockingStubByOrganisationseinheitenId(organisationsEinheitId);
-		}
+			@SneakyThrows
+			@BeforeEach
+			void mock() {
+				doReturn(vorgangId).when(remoteService).createVorgang(any(), any(), any(), any());
+			}
 
-		@Test
-		void shouldGetBinaryFileService() {
-			createVorgang();
+			@Test
+			void shouldGetVorgangService() {
+				createVorgang();
 
-			verify(resolver).resolveBinaryFileServiceStubByOrganisationsEinheitId(organisationsEinheitId);
-		}
+				verify(resolver).resolveVorgangServiceBlockingStubByOrganisationseinheitenId(organisationsEinheitId);
+			}
 
-		@Test
-		void shouldCreateVorgang() {
-			createVorgang();
+			@Test
+			void shouldGetBinaryFileService() {
+				createVorgang();
 
-			verify(remoteService).createVorgang(formData, eingang, vorgangServiceStub, binaryFileServiceStub);
-		}
+				verify(resolver).resolveBinaryFileServiceStubByOrganisationsEinheitId(organisationsEinheitId);
+			}
 
-		@Test
-		void shouldFinishStubConnection() {
-			createVorgang();
+			@SneakyThrows
+			@Test
+			void shouldCreateVorgang() {
+				createVorgang();
+
+				verify(remoteService).createVorgang(formData, eingang, vorgangServiceStub, binaryFileServiceStub);
+			}
 
-			verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub));
+			@Test
+			void shouldFinishStubConnection() {
+				createVorgang();
+
+				verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub));
+			}
+
+			@Test
+			void shouldReturnVorgangId() {
+				var created = createVorgang();
+
+				assertThat(created).isEqualTo(vorgangId);
+
+			}
 		}
 
-		@Test
-		void shouldReturnVorgangId() {
-			var created = createVorgang();
+		@DisplayName("on exception")
+		@Nested
+		class TestOnException {
 
-			assertThat(created).isEqualTo(vorgangId);
+			@SneakyThrows
+			@BeforeEach
+			void mock() {
+				doThrow(RuntimeException.class).when(remoteService).createVorgang(any(), any(), any(), any());
+			}
+
+			@SneakyThrows
+			@Test
+			void shouldFinishStubConnections() {
+				try {
+					createVorgang();
+				} catch (Exception e) {
+					// Do nothing
+				}
 
+				verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub));
+			}
 		}
 
+		@SneakyThrows
 		private String createVorgang() {
 			return remoteService.createVorgang(formData, eingang, organisationsEinheitId);
 		}
@@ -278,6 +313,7 @@ class VorgangRemoteServiceTest {
 				assertThat(result).isEqualTo(vorgangId);
 			}
 
+			@SneakyThrows
 			private String createVorgang() {
 				return vorgangCreator.create();
 			}