diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java
index 0ceac4857e86725204502ed1d2828a864c891ce7..253afbf6df2c82a3fd4957bb57885ad2142aeeb2 100644
--- a/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java
+++ b/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java
@@ -62,6 +62,8 @@ class XtaClientRemoteITCase {
 	private Consumer<XtaMessage> processMessageDummy;
 	private Predicate<XtaMessageMetaData> isSupportedDummy;
 
+	private List<String> sendMessageIds;
+
 	@BeforeEach
 	@SneakyThrows
 	void setup() {
@@ -76,7 +78,6 @@ class XtaClientRemoteITCase {
 		devClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getDevClient();
 		silentDevClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClient();
 
-		// Fail if any message pending, to ensure that we do not clear existing messages in the DEV environment
 		failIfAnyMessagePending(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClientConfig(), DEV_READER_CLIENT_IDENTIFIER);
 		failIfAnyMessagePending(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(), TEST_READER_CLIENT_IDENTIFIER);
 
@@ -89,8 +90,8 @@ class XtaClientRemoteITCase {
 	}
 
 	private void closeMessagesForAllReaders() {
-		closeAllMessages(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClientConfig(), DEV_READER_CLIENT_IDENTIFIER);
-		closeAllMessages(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(), TEST_READER_CLIENT_IDENTIFIER);
+		closeMessagesById(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClientConfig(), DEV_READER_CLIENT_IDENTIFIER, sendMessageIds);
+		closeMessagesById(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(), TEST_READER_CLIENT_IDENTIFIER, sendMessageIds);
 	}
 
 	@DisplayName("fetch messages")
@@ -98,7 +99,6 @@ class XtaClientRemoteITCase {
 	class TestFetchMessages {
 
 		private List<XtaMessage> sendMessages;
-		private List<String> sendMessageIds;
 
 		@BeforeEach
 		void setup() {
@@ -258,10 +258,23 @@ class XtaClientRemoteITCase {
 		void shouldReturn(String messageLabel) {
 			XtaMessage xtaMessage = createXdomeaMessage(loadMessage(messageLabel).messageFile());
 
-			var result = testClient.sendMessage(xtaMessage);
+			var result = sendMessage(xtaMessage);
 
 			assertThat(result.status()).isEqualTo(XtaMessageStatus.OPEN);
 		}
+
+		@SneakyThrows
+		private XtaTransportReport sendMessage(XtaMessage xtaMessage) {
+			var report = testClient.sendMessage(xtaMessage);
+			recordMessageIdForCleanup(report);
+			return report;
+		}
+
+		private void recordMessageIdForCleanup(XtaTransportReport report) {
+			var messageId = report.metaData().messageId();
+			assertThat(messageId).isNotNull();
+			sendMessageIds = List.of(messageId);
+		}
 	}
 
 	private XtaMessage createMessage(String messageLabel, XtaIdentifier author, XtaIdentifier reader) {
diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java
index 0432d3445846171a7908c47377e0d1b32baa48be..cdd531f78bf541920f2d62089efe29bd83b62f36 100644
--- a/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java
+++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java
@@ -119,6 +119,12 @@ public class XtaServerSetupExtensionTestUtil {
 		var messageIds = result.messages().stream()
 				.map(XtaMessageMetaData::messageId)
 				.toList();
+		closeMessagesById(config, clientId, messageIds);
+	}
+
+	@SneakyThrows
+	public static void closeMessagesById(XtaClientConfig config, XtaIdentifier clientId, List<String> messageIds) {
+		var wrappedService = createWrappedService(config);
 		for (var messageId : messageIds) {
 			wrappedService.close(messageId, clientId);
 		}