diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
index deb3050505bb39ad70d676571a3038df0261b95d..f259383d0672427547f8f3ed01871c74bd97922b 100644
--- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java
+++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
@@ -14,9 +14,9 @@ import lombok.Builder;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
-@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
-@Builder(access = AccessLevel.PROTECTED)
-@Getter(AccessLevel.PROTECTED)
+@RequiredArgsConstructor(access = AccessLevel.MODULE)
+@Builder(access = AccessLevel.MODULE)
+@Getter(AccessLevel.MODULE)
 public class XtaClient {
 
 	private final WrappedXtaService service;
diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
index 241815df4e475a81c735ba7e47b40adb8d6d058a..8d9c3ec43f972419a8b33ee3dd2335d0fb51ba01 100644
--- a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
+++ b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java
@@ -17,6 +17,7 @@ public class XtaClientFactory {
 
 	public static XtaClientFactory from(final XtaClientConfig config) {
 		return XtaClientFactory.builder()
+				.config(config)
 				.configValidator(XtaConfigValidator.builder().build())
 				.wrappedXtaServiceFactory(WrappedXtaServiceFactory.from(config))
 				.build();
diff --git a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
index 1918f5066d532c30e0785c8f23a8f101b64fb585..96ee5fde82dd75cec63e94ddde95eb0c01792d8d 100644
--- a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
+++ b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
@@ -31,7 +31,7 @@ import lombok.ToString;
 public class XtaClientConfig {
 
 	@NotEmpty(message = "at least one client identifier is required")
-	private final List<String> clientIdentifiers;
+	private final List<@NotBlank String> clientIdentifiers;
 
 	@NotBlank
 	private final String managementServiceUrl;
@@ -41,14 +41,19 @@ public class XtaClientConfig {
 	private final String msgBoxServiceUrl;
 
 	@Positive
-	private final int maxListItems;
+	@Builder.Default
+	private final int maxListItems = 50;
 
 	@Valid
-	private final KeyStore clientCertKeystore;
+	@Builder.Default
+	private final KeyStore clientCertKeystore = null;
 
-	private final boolean schemaValidation;
-	private final boolean logSoapRequests;
-	private final boolean logSoapResponses;
+	@Builder.Default
+	private final boolean schemaValidation = true;
+	@Builder.Default
+	private final boolean logSoapRequests = false;
+	@Builder.Default
+	private final boolean logSoapResponses = false;
 
 	@RequiredArgsConstructor
 	@Getter
diff --git a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java
index d9408b49fda21cc0bb4ade0665b2ebee5ff24f30..7aa74b7b14019b77338596786bbae12c1472a34d 100644
--- a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java
+++ b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java
@@ -11,12 +11,12 @@ import lombok.RequiredArgsConstructor;
 @Builder
 public class WrappedXtaServiceFactory {
 
-	private final XTAServiceFactory xtaServiceFactory;
+	private final XTAPortTripleFactory xtaServiceFactory;
 	private final WebServiceTypeMapper typeMapper;
 
 	public static WrappedXtaServiceFactory from(final XtaClientConfig config) {
 		return WrappedXtaServiceFactory.builder()
-				.xtaServiceFactory(XTAServiceFactory.from(config))
+				.xtaServiceFactory(XTAPortTripleFactory.from(config))
 				.typeMapper(Mappers.getMapper(WebServiceTypeMapper.class))
 				.build();
 	}
diff --git a/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java b/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java
index b9e9285663d5dcf76367d11bd514bd5dcb0d38b8..b9348e7c3f669e22ed0da6488dc82620e452d9da 100644
--- a/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java
+++ b/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java
@@ -38,7 +38,7 @@ public class XtaTLSClientParametersFactory {
 		return parameters;
 	}
 
-	SSLContext createXtaSslContext() throws ClientInitializationException {
+	public SSLContext createXtaSslContext() throws ClientInitializationException {
 		try {
 			var sslContextBuilder = createSSLContextBuilder();
 			var clientCertKeystore = config.getClientCertKeystore();
diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java
index c25cda1bb0813f064158ea4b847804a68153a424..01b2c684b55069ddf44759ebacc21816abfc22eb 100644
--- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java
+++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java
@@ -3,13 +3,14 @@ package de.ozgcloud.xta.client.model;
 import java.util.List;
 
 import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
 
 import lombok.Builder;
 
 @Builder
 public record XtaMessage(
-		@Valid XtaMessageMetaData metaData,
-		@Valid XtaFile messageFile,
-		@Valid List<XtaFile> attachments
+		@NotNull @Valid XtaMessageMetaData metaData,
+		@NotNull @Valid XtaFile messageFile,
+		@NotNull List<@Valid XtaFile> attachments
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java
index b60fd63dfc739e81109ae0ab5e3aa914ef5a0099..5f1943e41d77cfc1f8124595efd23f59f730bc12 100644
--- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java
+++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java
@@ -4,6 +4,7 @@ import java.math.BigInteger;
 
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
 
 import lombok.Builder;
@@ -15,8 +16,8 @@ public record XtaMessageMetaData(
 		@NotBlank String messageTypeCode,
 		@NotBlank String messageTypePayloadSchema,
 		@NotBlank String messageId,
-		@Valid Identifier authorIdentifier,
-		@Valid Identifier readerIdentifier,
+		@NotNull @Valid Identifier authorIdentifier,
+		@NotNull @Valid Identifier readerIdentifier,
 		@PositiveOrZero BigInteger messageSize
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java
index cdbc82147a390035d3a55a979431886849643faf..b8af0b8ddfe5b4525caf3c7e15399adbb6301490 100644
--- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java
+++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java
@@ -4,6 +4,7 @@ import java.math.BigInteger;
 import java.util.List;
 
 import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
 
 import lombok.Builder;
@@ -11,6 +12,6 @@ import lombok.Builder;
 @Builder
 public record XtaMessageMetaDataListing(
 		@PositiveOrZero BigInteger pendingMessageCount,
-		@Valid List<XtaMessageMetaData> messages
+		@NotNull @Valid List<XtaMessageMetaData> messages
 ) {
 }
diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1e87d592db38b75b234537a3ec06b0f70e0758e
--- /dev/null
+++ b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java
@@ -0,0 +1,76 @@
+package de.ozgcloud.xta.client;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.io.Files;
+
+import de.ozgcloud.xta.client.config.XtaClientConfig;
+import lombok.SneakyThrows;
+
+class XtaClientITCase {
+
+	private XtaClient client;
+
+	private static final String CLIENT_IDENTIFIER = "afmsh:010600000000_Online-Dienste";
+
+	private static final String BASE_URL = "https://li33-0005.dp.dsecurecloud.de/MB_XTA-WS/XTA210";
+
+	private static final XtaClientFactory clientFactory;
+
+	private static final XtaClientConfig CONFIG;
+
+	static {
+		var clientCertKeyStore = XtaClientConfig.KeyStore.builder()
+				.content(readBytesFromFile("/path/to/KOP_SH_KIEL_DEV.p12"))
+				.type("PKCS12")
+				.password("***".toCharArray())
+				.build();
+		CONFIG = XtaClientConfig.builder()
+				.clientIdentifiers(List.of(CLIENT_IDENTIFIER))
+				.managementServiceUrl(BASE_URL + "managementPort.svc")
+				.sendServiceUrl(BASE_URL + "sendPort.svc")
+				.msgBoxServiceUrl(BASE_URL + "msgBoxPort.svc")
+				.clientCertKeystore(clientCertKeyStore)
+				.logSoapRequests(true)
+				.logSoapResponses(true)
+				.build();
+		clientFactory = XtaClientFactory.from(CONFIG);
+	}
+
+	@BeforeEach
+	@SneakyThrows
+	void mock() {
+		client = clientFactory.create();
+	}
+
+	@DisplayName("get status list")
+	@Nested
+	class TestGetStatusList {
+
+		@DisplayName("should return with no pending messages")
+		@Test
+		@SneakyThrows
+		void shouldReturnWithNoPendingMessages() {
+			var result = client.getMessagesMetadata(CLIENT_IDENTIFIER);
+
+			assertThat(result.pendingMessageCount()).isZero();
+		}
+	}
+
+	private static byte[] readBytesFromFile(String path) {
+		try {
+			return Files.toByteArray(new File(path));
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java
index d6eec9bae0b5e5396d1fe567ffd299af967612d6..486ee8e15ab3ef48e93072def1a89d156b46d757 100644
--- a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java
+++ b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java
@@ -20,7 +20,7 @@ import lombok.SneakyThrows;
 class WrappedXtaServiceFactoryTest {
 
 	@Mock
-	private XTAServiceFactory xtaServiceFactory;
+	private XTAPortTripleFactory xtaServiceFactory;
 	@Mock
 	private WebServiceTypeMapper typeMapper;
 	@Mock
diff --git a/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java b/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java
index 6d71e60906e7108d118e00b6f8b364f237de227b..ad1a9564b18d94b989a0121af8ce71320282f610 100644
--- a/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java
+++ b/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.xta.client.core;
 
-import static de.ozgcloud.xta.client.core.XTAServiceFactory.*;
+import static de.ozgcloud.xta.client.core.XTAPortTripleFactory.*;
 import static org.assertj.core.api.AssertionsForClassTypes.*;
 import static org.mockito.Mockito.*;
 
@@ -52,7 +52,7 @@ class XTAServiceFactoryTest {
 
 	@Spy
 	@InjectMocks
-	private XTAServiceFactory factory;
+	private XTAPortTripleFactory factory;
 
 	@DisplayName("create")
 	@Nested
@@ -198,6 +198,7 @@ class XTAServiceFactoryTest {
 
 		@DisplayName("should keep old")
 		@Test
+		@SneakyThrows
 		void shouldKeepOld() {
 			factory.configureRequestContext(endpointUrl, requestContext);
 
@@ -216,6 +217,7 @@ class XTAServiceFactoryTest {
 		@DisplayName("should add schema validation")
 		@ParameterizedTest
 		@ValueSource(booleans = { true, false })
+		@SneakyThrows
 		void shouldAddSchemaValidation(boolean validation) {
 			reset(config);
 			when(config.isSchemaValidation()).thenReturn(validation);