diff --git a/src/main/java/de/ozgcloud/xta/client/FetchMessageParameterFactory.java b/src/main/java/de/ozgcloud/xta/client/FetchMessageParameterFactory.java
deleted file mode 100644
index 34f32976ad1a9faf8760317436134bdc687ac3f6..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/client/FetchMessageParameterFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.xta.client;
-
-import java.util.Collections;
-import java.util.function.Consumer;
-
-import de.ozgcloud.xta.client.model.XtaIdentifier;
-import de.ozgcloud.xta.client.model.XtaMessage;
-import lombok.Builder;
-
-@Builder
-class FetchMessageParameterFactory {
-
-	public FetchMessageParameter create(XtaIdentifier clientIdentifier, Consumer<XtaMessage> processMessage) {
-		return new FetchMessageParameter(clientIdentifier,  processMessage, Collections.emptySet());
-	}
-}
diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
index 3a25a8fd115a4c742bc135881494a560f709ca11..16216282fe7a61ddabb650ff6f8a4ff47627f8e8 100644
--- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java
+++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.xta.client;
 
+import static java.util.Collections.*;
+
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Consumer;
@@ -32,7 +34,6 @@ public class XtaClient {
 
 	private final XtaClientService service;
 	private final XtaClientConfig config;
-	private final FetchMessageParameterFactory fetchMessageParameterFactory;
 	private final XtaExceptionHandler exceptionHandler;
 
 	static final String NO_MESSAGE_CLOSED_WARNING = "No message has been closed although more are pending. Try increasing max list items.";
@@ -52,11 +53,15 @@ public class XtaClient {
 	List<XtaTransportReport> fetchMessagesRaw(Consumer<XtaMessage> processMessage) {
 		return config.getClientIdentifiers().stream()
 				.filter(service::checkAccountActive)
-				.map(clientIdentifier -> fetchMessageParameterFactory.create(clientIdentifier, processMessage))
+				.map(clientIdentifier -> initializeFetchMessageParameter(clientIdentifier, processMessage))
 				.flatMap(this::fetchMessagesForClientIdentifier)
 				.toList();
 	}
 
+	FetchMessageParameter initializeFetchMessageParameter(XtaIdentifier clientIdentifier, Consumer<XtaMessage> processMessage) {
+		return new FetchMessageParameter(clientIdentifier, processMessage, emptySet());
+	}
+
 	Stream<XtaTransportReport> fetchMessagesForClientIdentifier(FetchMessageParameter parameter) {
 		return service.getStatusList(parameter.clientIdentifier())
 				.map(listing -> {
diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
index 81d0fa5b1fb564dc298ecb6a682c7c24acd06a22..e5429aec7a7c5ee0762362333985eab6b22a74d4 100644
--- a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
+++ b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
@@ -15,7 +15,6 @@ public class XtaClientFactory {
 	private final XtaConfigValidator configValidator;
 	private final XtaClientServiceFactory xtaClientServiceFactory;
 	private final XtaClientConfig config;
-	private final FetchMessageParameterFactory fetchMessageParameterFactory;
 	private final XtaExceptionHandlerFactory exceptionHandlerFactory;
 
 	public static XtaClientFactory from(final XtaClientConfig config) {
@@ -23,7 +22,6 @@ public class XtaClientFactory {
 				.config(config)
 				.configValidator(XtaConfigValidator.builder().build())
 				.xtaClientServiceFactory(XtaClientServiceFactory.from(config))
-				.fetchMessageParameterFactory(FetchMessageParameterFactory.builder().build())
 				.exceptionHandlerFactory(XtaExceptionHandlerFactory.builder().build())
 				.build();
 	}
@@ -33,7 +31,6 @@ public class XtaClientFactory {
 		return XtaClient.builder()
 				.config(config)
 				.service(xtaClientServiceFactory.create())
-				.fetchMessageParameterFactory(fetchMessageParameterFactory)
 				.exceptionHandler(exceptionHandlerFactory.create())
 				.build();
 	}
diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientFactoryTest.java b/src/test/java/de/ozgcloud/xta/client/XtaClientFactoryTest.java
index 1e3dbfcb7924306ca7bc604632bb68d7f97f1ab7..6b21c7fc4143e0aab2cce55dc37146067d32f0ba 100644
--- a/src/test/java/de/ozgcloud/xta/client/XtaClientFactoryTest.java
+++ b/src/test/java/de/ozgcloud/xta/client/XtaClientFactoryTest.java
@@ -24,8 +24,6 @@ class XtaClientFactoryTest {
 	private XtaClientServiceFactory xtaClientServiceFactory;
 	@Mock
 	private XtaClientConfig config;
-	@Mock
-	private FetchMessageParameterFactory fetchMessageParameterFactory;
 
 	@InjectMocks
 	private XtaClientFactory factory;
@@ -61,7 +59,6 @@ class XtaClientFactoryTest {
 					.isEqualTo(XtaClient.builder()
 							.config(config)
 							.service(service)
-							.fetchMessageParameterFactory(fetchMessageParameterFactory)
 							.build());
 		}
 	}
diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java
index 181f3db8a79bf81812a746d117357b78454effbe..6b4cba4aae4b457d21fbb58f380c053a9a0408ca 100644
--- a/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java
+++ b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java
@@ -30,6 +30,7 @@ import de.ozgcloud.xta.client.core.XtaExceptionHandler;
 import de.ozgcloud.xta.client.exception.ClientRuntimeException;
 import de.ozgcloud.xta.client.exception.XtaClientException;
 import de.ozgcloud.xta.client.factory.ClientRuntimeExceptionTestFactory;
+import de.ozgcloud.xta.client.factory.XtaClientExceptionTestFactory;
 import de.ozgcloud.xta.client.factory.XtaMessageMetaDataListingTestFactory;
 import de.ozgcloud.xta.client.factory.XtaMessageMetaDataTestFactory;
 import de.ozgcloud.xta.client.factory.XtaMessageTestFactory;
@@ -49,9 +50,6 @@ class XtaClientTest {
 	@Mock
 	private XtaClientConfig config;
 
-	@Mock
-	private FetchMessageParameterFactory fetchMessageParameterFactory;
-
 	@Mock
 	private XtaExceptionHandler exceptionHandler;
 
@@ -86,16 +84,13 @@ class XtaClientTest {
 		@Mock
 		private XtaTransportReport transportReport;
 
-		@Mock
-		private XtaClientException exception;
-
 		@DisplayName("should return")
 		@Test
 		@SneakyThrows
 		void shouldReturn() {
 			doReturn(List.of(transportReport)).when(client).fetchMessagesRaw(processMessage);
 
-			var result = client.fetchMessagesRaw(processMessage);
+			var result = client.fetchMessages(processMessage);
 
 			assertThat(result).containsExactly(transportReport);
 		}
@@ -103,12 +98,13 @@ class XtaClientTest {
 		@DisplayName("should throw checked exception on runtime exception")
 		@Test
 		void shouldThrowCheckedExceptionOnRuntimeException() {
+			var clientException = XtaClientExceptionTestFactory.create();
 			var runTimeException = ClientRuntimeExceptionTestFactory.create();
-			doThrow(runTimeException).when(client).sendMessageRaw(message);
-			when(exceptionHandler.deriveXtaClientException(runTimeException)).thenReturn(exception);
+			doThrow(runTimeException).when(client).fetchMessagesRaw(processMessage);
+			when(exceptionHandler.deriveXtaClientException(runTimeException)).thenReturn(clientException);
 
-			assertThatThrownBy(() -> client.fetchMessagesRaw(processMessage))
-					.isEqualTo(exception);
+			assertThatThrownBy(() -> client.fetchMessages(processMessage))
+					.isEqualTo(clientException);
 		}
 
 	}
@@ -139,7 +135,7 @@ class XtaClientTest {
 			@Test
 			void shouldFetchMessagesForClientIdentifier() {
 				doReturn(true).when(service).checkAccountActive(SELF_IDENTIFIER);
-				when(fetchMessageParameterFactory.create(SELF_IDENTIFIER, processMessage)).thenReturn(parameter);
+				doReturn(parameter).when(client).initializeFetchMessageParameter(SELF_IDENTIFIER, processMessage);
 				doReturn(Stream.of(transportReport)).when(client).fetchMessagesForClientIdentifier(parameter);
 
 				var result = fetchMessages();
@@ -169,6 +165,42 @@ class XtaClientTest {
 		}
 	}
 
+	@DisplayName("initialize fetch message parameter")
+	@Nested
+	class TestInitializeFetchMessageParameter {
+
+		@Mock
+		private Consumer<XtaMessage> processMessage;
+
+		@DisplayName("should init empty viewed message ids")
+		@Test
+		void shouldInitEmptyViewedMessageIds() {
+			var result = initializeFetchMessageParameter();
+
+			assertThat(result.viewedMessageIds()).isEmpty();
+		}
+
+		@DisplayName("should set client identifier")
+		@Test
+		void shouldSetClientIdentifier() {
+			var result = initializeFetchMessageParameter();
+
+			assertThat(result.clientIdentifier()).isEqualTo(SELF_IDENTIFIER);
+		}
+
+		@DisplayName("should set process message")
+		@Test
+		void shouldSetProcessMessage() {
+			var result = initializeFetchMessageParameter();
+
+			assertThat(result.processMessage()).isEqualTo(processMessage);
+		}
+
+		FetchMessageParameter initializeFetchMessageParameter() {
+			return client.initializeFetchMessageParameter(SELF_IDENTIFIER, processMessage);
+		}
+	}
+
 	@DisplayName("fetch messages for client identifier")
 	@Nested
 	class TestFetchMessagesForClientIdentifier {
@@ -634,9 +666,6 @@ class XtaClientTest {
 		@Mock
 		private XtaTransportReport transportReport;
 
-		@Mock
-		private XtaClientException exception;
-
 		@DisplayName("should return")
 		@Test
 		@SneakyThrows
@@ -648,15 +677,18 @@ class XtaClientTest {
 			assertThat(result).isEqualTo(transportReport);
 		}
 
+
 		@DisplayName("should throw checked exception on runtime exception")
 		@Test
+		@SneakyThrows
 		void shouldThrowCheckedExceptionOnRuntimeException() {
+			var clientException = XtaClientExceptionTestFactory.create();
 			var runtimeException = ClientRuntimeExceptionTestFactory.create();
 			doThrow(runtimeException).when(client).sendMessageRaw(message);
-			when(exceptionHandler.deriveXtaClientException(runtimeException)).thenReturn(exception);
+			when(exceptionHandler.deriveXtaClientException(runtimeException)).thenReturn(clientException);
 
 			assertThatThrownBy(() -> client.sendMessage(message))
-					.isEqualTo(exception);
+					.isEqualTo(clientException);
 		}
 	}
 
diff --git a/src/test/java/de/ozgcloud/xta/client/factory/XtaClientExceptionTestFactory.java b/src/test/java/de/ozgcloud/xta/client/factory/XtaClientExceptionTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac6767647f556c06078c2ac90025f966ba5207a4
--- /dev/null
+++ b/src/test/java/de/ozgcloud/xta/client/factory/XtaClientExceptionTestFactory.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.xta.client.factory;
+
+import de.ozgcloud.xta.client.exception.XtaClientException;
+
+public class XtaClientExceptionTestFactory {
+
+	public static final String CLIENT_EXCEPTION_MESSAGE = "CLIENT_EXCEPTION_MESSAGE";
+
+	public static XtaClientException create() {
+		return new XtaClientException(CLIENT_EXCEPTION_MESSAGE, ClientRuntimeExceptionTestFactory.create().getCause());
+	}
+}