diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
index 71a645f8feec2638bd44472479ee7348ea1b4cf2..71c3be1335a5bbc768248ed0f2a210953945a9c7 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
@@ -1,10 +1,20 @@
 package de.ozgcloud.nachrichten.postfach.osiv2;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.*;
 import static de.ozgcloud.nachrichten.NachrichtenManagerConfiguration.*;
 import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*;
+import static org.assertj.core.api.Assertions.*;
+
+import java.time.OffsetDateTime;
+import java.util.List;
+import java.util.UUID;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
@@ -13,10 +23,22 @@ import org.springframework.test.context.DynamicPropertySource;
 import org.springframework.test.context.TestPropertySource;
 
 import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 
+import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
 import de.ozgcloud.nachrichten.postfach.osiv2.attachment.Osi2AttachmentFileService;
+import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
+import de.ozgcloud.nachrichten.postfach.osiv2.extension.AttachmentExampleUploadUtil;
+import de.ozgcloud.nachrichten.postfach.osiv2.extension.Jwt;
 import de.ozgcloud.nachrichten.postfach.osiv2.extension.OsiMockServerExtension;
 import de.ozgcloud.nachrichten.postfach.osiv2.extension.VorgangManagerServerExtension;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessagesResponseTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeSendMessageResponseTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.QuarantineFileResult;
+import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.QuarantineStatus;
 import lombok.SneakyThrows;
 
 @SpringBootTest(classes = TestApplication.class)
@@ -24,6 +46,7 @@ import lombok.SneakyThrows;
 @TestPropertySource(properties = {
 		"ozgcloud.osiv2.proxy.enabled=false",
 })
+@ExtendWith(MockitoExtension.class)
 class OsiPostfachRemoteServiceITCase {
 
 	@RegisterExtension
@@ -55,4 +78,203 @@ class OsiPostfachRemoteServiceITCase {
 	public void setup() {
 		postfachFacadeMockServer = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockServer();
 	}
+
+	@DisplayName("should send request with jwt")
+	@Test
+	@SneakyThrows
+	void shouldSendRequestWithJwt() {
+		var postfachNachricht = PostfachNachrichtTestFactory.create();
+		mockSendResponse();
+
+		osiPostfachRemoteService.sendMessage(postfachNachricht);
+
+		var requests = postfachFacadeMockServer.findAll(
+				postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")));
+		assertThat(requests).hasSize(1);
+		var jwt = Jwt.parseAuthHeaderValue(requests.getFirst().getHeader("Authorization"));
+		assertThat(jwt.body().read("$.client_id", String.class)).isEqualTo(CLIENT_ID);
+		assertThat(jwt.body().read("$.aud", String.class)).isEqualTo(RESOURCE_URN);
+	}
+
+	@DisplayName("should send message with attachment")
+	@Test
+	void shouldSendMessageWithAttachment() {
+		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
+		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
+				.willReturn(okJsonObj(QuarantineFileResult.builder()
+						.success(true)
+						.build()))
+		);
+		postfachFacadeMockServer.stubFor(get(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+				.willReturn(okJsonObj(QuarantineStatus.SAFE))
+		);
+		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
+				.attachments(List.of(textFileId))
+				.build();
+		mockSendResponse();
+
+		osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
+
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				postRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
+		);
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				postRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+		);
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))
+		);
+	}
+
+	@DisplayName("should throw postfach exception with connection error code")
+	@Test
+	void shouldThrowPostfachExceptionWithConnectionErrorCode() {
+		postfachFacadeMockServer.stop();
+
+		var postfachNachricht = PostfachNachrichtTestFactory.create();
+
+		assertThatThrownBy(() -> osiPostfachRemoteService.sendMessage(postfachNachricht))
+				.isInstanceOf(Osi2PostfachException.class)
+				.hasFieldOrPropertyWithValue("messageCode", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE);
+	}
+
+	@DisplayName("should delete attachments on upload exception")
+	@Test
+	void shouldDeleteAttachmentsOnUploadException() {
+		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
+		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
+				.willReturn(okJsonObj(QuarantineFileResult.builder()
+						.success(false)
+						.error("Upload failure")
+						.build()))
+		);
+		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+				.willReturn(ok())
+		);
+		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
+				.attachments(List.of(textFileId))
+				.build();
+
+		try {
+			osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
+		} catch (Osi2PostfachException e) {
+			// ignore
+		}
+
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+		);
+	}
+
+	@DisplayName("should delete attachments on scan exception")
+	@Test
+	void shouldDeleteAttachmentsOnScanException() {
+		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
+		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
+				.willReturn(okJsonObj(QuarantineFileResult.builder()
+						.success(true)
+						.build()))
+		);
+		postfachFacadeMockServer.stubFor(get(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+				.willReturn(okJsonObj(QuarantineStatus.UNSAFE))
+		);
+		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+				.willReturn(ok())
+		);
+		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
+				.attachments(List.of(textFileId))
+				.build();
+
+		try {
+			osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
+		} catch (Osi2PostfachException e) {
+			// ignore
+		}
+
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
+		);
+	}
+
+	private void mockSendResponse() {
+		// Stub message send response (MessageExchangeApi::sendMessage)
+		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))
+				.willReturn(
+						okJsonObj(
+								MessageExchangeSendMessageResponseTestFactory.create()
+										.messageId(UUID.randomUUID())
+						)
+				)
+		);
+	}
+
+	@DisplayName("should receive one messages")
+	@Test
+	@SneakyThrows
+	void shouldReceiveMessages() {
+		mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000");
+
+		var messageList = osiPostfachRemoteService.getAllMessages().toList();
+
+		assertThat(messageList).hasSize(1);
+	}
+
+	@DisplayName("should receive two messages")
+	@Test
+	@SneakyThrows
+	void shouldReceiveTwoMessages() {
+		mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001");
+
+		var messageList = osiPostfachRemoteService.getAllMessages().toList();
+
+		assertThat(messageList).hasSize(2);
+	}
+
+	private void mockPostfachMessageAndResponse(final String... uuids) {
+		// Stub message listing response (MessageExchangeApi::receiveMessages)
+		postfachFacadeMockServer.stubFor(get(urlPathEqualTo("/MessageExchange/v1/Receive"))
+				.withQueryParam("take", equalTo("100"))
+				.withQueryParam("skip", equalTo("0"))
+				.willReturn(okJsonObj(MessageExchangeReceiveMessagesResponseTestFactory.create(uuids)))
+		);
+		for (String uuid : uuids) {
+			// Stub individual response for message (MessageExchangeApi::getMessage)
+			postfachFacadeMockServer.stubFor(get(urlPathTemplate("/MessageExchange/v1/Receive/{messageId}"))
+					.withPathParam("messageId", equalTo(uuid))
+					.willReturn(okJsonObj(
+							V1ReplyMessageTestFactory.create()
+									.messageBox(UUID.fromString(uuid))
+									.responseTime(OffsetDateTime.now())
+					))
+			);
+		}
+	}
+
+	private ResponseDefinitionBuilder okJsonObj(final Object body) {
+		return okJson(JsonUtil.toJson(body));
+	}
+
+	@DisplayName("should delete message")
+	@Test
+	@SneakyThrows
+	void shouldDeleteMessage() {
+		var messageId = "00000000-0000-0000-0000-000000000000";
+		// Stub delete message response (MessageExchangeApi::deleteMessage)
+		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
+				.willReturn(ok())
+		);
+
+		osiPostfachRemoteService.deleteMessage(messageId);
+
+		postfachFacadeMockServer.verify(
+				exactly(1),
+				deleteRequestedFor(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
+						.withPathParam("messageId", equalTo(messageId))
+		);
+	}
 }
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServicePrimaryITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServicePrimaryITCase.java
deleted file mode 100644
index 0b9b9b5280346c8a21f66b9964002257a9d9373d..0000000000000000000000000000000000000000
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServicePrimaryITCase.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osiv2;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*;
-import static org.assertj.core.api.Assertions.*;
-
-import java.time.OffsetDateTime;
-import java.util.List;
-import java.util.UUID;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-
-import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
-
-import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
-import de.ozgcloud.nachrichten.postfach.osiv2.extension.AttachmentExampleUploadUtil;
-import de.ozgcloud.nachrichten.postfach.osiv2.extension.Jwt;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessagesResponseTestFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeSendMessageResponseTestFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageTestFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.QuarantineFileResult;
-import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.QuarantineStatus;
-import lombok.SneakyThrows;
-
-class OsiPostfachRemoteServicePrimaryITCase extends OsiPostfachRemoteServiceITCase {
-
-	@DisplayName("should send request with jwt")
-	@Test
-	@SneakyThrows
-	void shouldSendRequestWithJwt() {
-		var postfachNachricht = PostfachNachrichtTestFactory.create();
-		mockSendResponse();
-
-		osiPostfachRemoteService.sendMessage(postfachNachricht);
-
-		var requests = postfachFacadeMockServer.findAll(
-				postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")));
-		assertThat(requests).hasSize(1);
-		var jwt = Jwt.parseAuthHeaderValue(requests.getFirst().getHeader("Authorization"));
-		assertThat(jwt.body().read("$.client_id", String.class)).isEqualTo(CLIENT_ID);
-		assertThat(jwt.body().read("$.aud", String.class)).isEqualTo(RESOURCE_URN);
-	}
-
-	@DisplayName("should send message with attachment")
-	@Test
-	void shouldSendMessageWithAttachment() {
-		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
-		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
-				.willReturn(okJsonObj(QuarantineFileResult.builder()
-						.success(true)
-						.build()))
-		);
-		postfachFacadeMockServer.stubFor(get(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-				.willReturn(okJsonObj(QuarantineStatus.SAFE))
-		);
-		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
-				.attachments(List.of(textFileId))
-				.build();
-		mockSendResponse();
-
-		osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
-
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				postRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
-		);
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				postRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-		);
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))
-		);
-	}
-
-	@DisplayName("should delete attachments on upload exception")
-	@Test
-	void shouldDeleteAttachmentsOnUploadException() {
-		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
-		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
-				.willReturn(okJsonObj(QuarantineFileResult.builder()
-						.success(false)
-						.error("Upload failure")
-						.build()))
-		);
-		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-				.willReturn(ok())
-		);
-		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
-				.attachments(List.of(textFileId))
-				.build();
-
-		try {
-			osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
-		} catch (Osi2PostfachException e) {
-			// ignore
-		}
-
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-		);
-	}
-
-	@DisplayName("should delete attachments on scan exception")
-	@Test
-	void shouldDeleteAttachmentsOnScanException() {
-		var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService);
-		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked"))
-				.willReturn(okJsonObj(QuarantineFileResult.builder()
-						.success(true)
-						.build()))
-		);
-		postfachFacadeMockServer.stubFor(get(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-				.willReturn(okJsonObj(QuarantineStatus.UNSAFE))
-		);
-		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-				.willReturn(ok())
-		);
-		var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder()
-				.attachments(List.of(textFileId))
-				.build();
-
-		try {
-			osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment);
-		} catch (Osi2PostfachException e) {
-			// ignore
-		}
-
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}"))
-		);
-	}
-
-	private void mockSendResponse() {
-		// Stub message send response (MessageExchangeApi::sendMessage)
-		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))
-				.willReturn(
-						okJsonObj(
-								MessageExchangeSendMessageResponseTestFactory.create()
-										.messageId(UUID.randomUUID())
-						)
-				)
-		);
-	}
-
-	@DisplayName("should receive one messages")
-	@Test
-	@SneakyThrows
-	void shouldReceiveMessages() {
-		mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000");
-
-		var messageList = osiPostfachRemoteService.getAllMessages().toList();
-
-		assertThat(messageList).hasSize(1);
-	}
-
-	@DisplayName("should receive two messages")
-	@Test
-	@SneakyThrows
-	void shouldReceiveTwoMessages() {
-		mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001");
-
-		var messageList = osiPostfachRemoteService.getAllMessages().toList();
-
-		assertThat(messageList).hasSize(2);
-	}
-
-	private void mockPostfachMessageAndResponse(final String... uuids) {
-		// Stub message listing response (MessageExchangeApi::receiveMessages)
-		postfachFacadeMockServer.stubFor(get(urlPathEqualTo("/MessageExchange/v1/Receive"))
-				.withQueryParam("take", equalTo("100"))
-				.withQueryParam("skip", equalTo("0"))
-				.willReturn(okJsonObj(MessageExchangeReceiveMessagesResponseTestFactory.create(uuids)))
-		);
-		for (String uuid : uuids) {
-			// Stub individual response for message (MessageExchangeApi::getMessage)
-			postfachFacadeMockServer.stubFor(get(urlPathTemplate("/MessageExchange/v1/Receive/{messageId}"))
-					.withPathParam("messageId", equalTo(uuid))
-					.willReturn(okJsonObj(
-							V1ReplyMessageTestFactory.create()
-									.messageBox(UUID.fromString(uuid))
-									.responseTime(OffsetDateTime.now())
-					))
-			);
-		}
-	}
-
-	private ResponseDefinitionBuilder okJsonObj(final Object body) {
-		return okJson(JsonUtil.toJson(body));
-	}
-
-	@DisplayName("should delete message")
-	@Test
-	@SneakyThrows
-	void shouldDeleteMessage() {
-		var messageId = "00000000-0000-0000-0000-000000000000";
-		// Stub delete message response (MessageExchangeApi::deleteMessage)
-		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
-				.willReturn(ok())
-		);
-
-		osiPostfachRemoteService.deleteMessage(messageId);
-
-		postfachFacadeMockServer.verify(
-				exactly(1),
-				deleteRequestedFor(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
-						.withPathParam("messageId", equalTo(messageId))
-		);
-	}
-}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceSecondaryITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceSecondaryITCase.java
deleted file mode 100644
index 33f22c4feb9b2da7e871d7aa2b01cbdbcbf83385..0000000000000000000000000000000000000000
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceSecondaryITCase.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osiv2;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
-
-class OsiPostfachRemoteServiceSecondaryITCase extends OsiPostfachRemoteServiceITCase {
-
-	@BeforeEach
-	void mock() {
-		// Stopping the mock server
-		// Note that a restarting the server will configure a new unknown port.
-		postfachFacadeMockServer.stop();
-	}
-
-	@DisplayName("should throw postfach exception with connection error code")
-	@Test
-	void shouldThrowPostfachExceptionWithConnectionErrorCode() {
-		var postfachNachricht = PostfachNachrichtTestFactory.create();
-
-		assertThatThrownBy(() -> osiPostfachRemoteService.sendMessage(postfachNachricht))
-				.isInstanceOf(Osi2PostfachException.class)
-				.hasFieldOrPropertyWithValue("messageCode", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE);
-	}
-}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
index 71cd29cbd57f980c253f593a8c1a30f8286e38a4..84d367b808ca8a5fad1de979f57d46b32840351b 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
@@ -3,6 +3,10 @@ package de.ozgcloud.nachrichten.postfach.osiv2.extension;
 import static com.github.tomakehurst.wiremock.client.WireMock.*;
 import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*;
 
+import java.util.Optional;
+
+import jakarta.annotation.Nullable;
+
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
@@ -19,7 +23,7 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 @Getter
 @RequiredArgsConstructor
-public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
+public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback {
 
 	private WireMockServer serviceKontoMockServer;
 	private WireMockServer postfachFacadeMockServer;
@@ -30,26 +34,36 @@ public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallba
 		setupServiceKontoMock();
 	}
 
-	@Override
-	public void afterEach(ExtensionContext context) {
-		postfachFacadeMockServer.resetAll();
-		serviceKontoMockServer.resetAll();
-	}
-
 	@Override
 	public void afterAll(ExtensionContext context) {
-		serviceKontoMockServer.shutdown();
-		postfachFacadeMockServer.shutdown();
+		if (serviceKontoMockServer != null) {
+			serviceKontoMockServer.shutdown();
+			serviceKontoMockServer = null;
+		}
+
+		if (postfachFacadeMockServer != null) {
+			postfachFacadeMockServer.shutdown();
+			postfachFacadeMockServer = null;
+		}
 	}
 
 	private void setupPostfachFacadeMock() {
-		postfachFacadeMockServer = new WireMockServer(0);
-		postfachFacadeMockServer.start();
+		postfachFacadeMockServer = setupWiremockServer(postfachFacadeMockServer, 32813);
 	}
 
 	private void setupServiceKontoMock() {
-		serviceKontoMockServer = new WireMockServer(0);
-		serviceKontoMockServer.start();
+		serviceKontoMockServer = setupWiremockServer(serviceKontoMockServer, 32812);
+	}
+
+	private WireMockServer setupWiremockServer(@Nullable WireMockServer existingServer, int port) {
+		if (existingServer != null && existingServer.isRunning()) {
+			existingServer.resetAll();
+			return existingServer;
+		} else {
+			var server = new WireMockServer(port);
+			server.start();
+			return server;
+		}
 	}
 
 	public String getAccessTokenUrl() {
@@ -57,11 +71,16 @@ public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallba
 	}
 
 	public String getPostfachFacadeUrl() {
-		return postfachFacadeMockServer.baseUrl();
+		return Optional.ofNullable(postfachFacadeMockServer)
+				.map(WireMockServer::baseUrl)
+				.orElseThrow(() -> new IllegalStateException("PostfachFacadeMockServer not initialized"));
 	}
 
 	@Override
 	public void beforeEach(ExtensionContext context) {
+		setupPostfachFacadeMock();
+		setupServiceKontoMock();
+
 		serviceKontoMockServer.stubFor(post("/access-token")
 				.withHeader("Content-Type", equalTo("application/x-www-form-urlencoded"))
 				.withFormParam("grant_type", equalTo("client_credentials"))
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
index 872ebbc820ad1e76278c07c296434a196ff7fd19..6de18dcd892e9a35984e2d46dee5368be30a341e 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
@@ -30,7 +30,9 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl
 
 	@Override
 	public void beforeAll(ExtensionContext context) {
-		setupVorgangManager();
+		if (vorgangManagerContainer == null || mongoDBContainer == null) {
+			setupVorgangManager();
+		}
 	}
 
 	@SneakyThrows
@@ -64,9 +66,11 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl
 	public void afterAll(ExtensionContext context) {
 		if (mongoDBContainer != null) {
 			mongoDBContainer.stop();
+			mongoDBContainer = null;
 		}
 		if (vorgangManagerContainer != null) {
 			vorgangManagerContainer.stop();
+			vorgangManagerContainer = null;
 		}
 	}