diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
index 559a6743882e28f3e5d78227291811f01f60f8d0..b8c7ff6a103d896ff8b295fe34e9313ad929ccd5 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
@@ -15,6 +15,7 @@ import de.ozgcloud.xta.test.app.exception.TechnicalException;
 import de.ozgcloud.xta.test.app.model.XtaCloseRequest;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
+import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
@@ -26,6 +27,7 @@ import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxCloseRequestType;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType;
 import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
+import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 import genv3.eu.osci.ws.x2014.x10.transport.QualifierType;
 
@@ -79,20 +81,22 @@ public interface RequestMapper {
 		return fetchRequest.getMsgSelector().getMessageID().getFirst().getValue();
 	}
 
-	@Mapping(target = "clientIdentifierValue", source = "clientIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "clientIdentifier.identifier")
 	@Mapping(target = "maxListItems", source = "fetchRequest.maxListItems")
 	XtaMessageMetaDataListingRequest mapMessageMetaDataListingRequest(MsgBoxStatusListRequestType fetchRequest, PartyType clientIdentifier);
 
+	XtaIdentifier mapXtaIdentifier(PartyIdentifierType partyType);
+
 	@Mapping(target = "messageId", source = "closeRequest.lastMsgReceived.first.value")
-	@Mapping(target = "clientIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "authorIdentifier.identifier")
 	XtaCloseRequest mapXtaCloseRequest(MsgBoxCloseRequestType closeRequest, PartyType authorIdentifier);
 
 	@Mapping(target = "messageId", source = "fetchRequest.msgSelector.messageID.first.value")
-	@Mapping(target = "clientIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "authorIdentifier.identifier")
 	XtaGetMessageRequest mapXtaGetMessageRequest(MsgBoxFetchRequest fetchRequest, PartyType authorIdentifier);
 
 	@Mapping(target = "service", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.serviceType")
-	@Mapping(target = "readerIdentifierValue", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.reader.identifier.value")
-	@Mapping(target = "authorIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "readerIdentifier", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.reader.identifier")
+	@Mapping(target = "authorIdentifier", source = "authorIdentifier.identifier")
 	XtaLookupServiceRequest mapXtaLookupServiceRequest(LookupServiceRequest lookupServiceRequest, PartyType authorIdentifier);
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
index c7608a297f104f34e079b714b95687f30a91b2c4..44b84a51228f55e941a15002a6490afffc2567df 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
@@ -170,7 +170,7 @@ public interface ResponseMapper {
 
 	@Mapping(target = "isServiceAvailableValue.serviceIsAvailable", expression = "java( true )")
 	@Mapping(target = "serviceType", source = "service")
-	@Mapping(target = "reader.identifier.value", source = "readerIdentifierValue")
+	@Mapping(target = "reader.identifier", source = "readerIdentifier")
 	@Mapping(target = "serviceParameter", ignore = true)
 	LookupServiceResultType mapLookupServiceResultType(XtaLookupServiceRequest xtaLookupServiceRequest);
 
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
index 627be8ba0a8bd336a430c316bcc329218901b402..d6d2ac2b43b6d109fc81c4781543c3557b98359b 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
@@ -2,6 +2,7 @@ package de.ozgcloud.xta.test.app.model;
 
 import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 
@@ -11,6 +12,6 @@ import lombok.Builder;
 @Builder
 public record XtaCloseRequest(
 		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
-		@NotNull @NotBlank String clientIdentifierValue
+		@NotNull @Valid XtaIdentifier clientIdentifier
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
index c632b5f934e93aa864c83c85e267263cb79bf1c6..443a9c61edb79faefd74efeea7800f88ee07a14c 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
@@ -2,7 +2,9 @@ package de.ozgcloud.xta.test.app.model;
 
 import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 
 import de.ozgcloud.xta.test.app.validation.ValidXtaId;
 import lombok.Builder;
@@ -10,6 +12,6 @@ import lombok.Builder;
 @Builder
 public record XtaGetMessageRequest(
 		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
-		@NotBlank String clientIdentifierValue
+		@NotNull @Valid XtaIdentifier clientIdentifier
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
index 02572b41827dd6527093b94a5accba193c66a0cc..ab46e3b2f1c9d0b41d0bf498a0a0c35c15c10b4d 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
@@ -1,13 +1,15 @@
 package de.ozgcloud.xta.test.app.model;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 
 import lombok.Builder;
 
 @Builder
 public record XtaLookupServiceRequest(
 		@NotBlank String service,
-		@NotBlank String readerIdentifierValue,
-		@NotBlank String authorIdentifierValue
+		@NotNull @Valid XtaIdentifier readerIdentifier,
+		@NotNull @Valid XtaIdentifier authorIdentifier
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
index 279014fb4fe85325d03b34115d211f87eebadc8a..c19441db3217c06ae165f976cf914d3af69b1622 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
@@ -1,13 +1,15 @@
 package de.ozgcloud.xta.test.app.model;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Positive;
 
 import lombok.Builder;
 
 @Builder
 public record XtaMessageMetaDataListingRequest(
-		@NotBlank String clientIdentifierValue,
+		@NotNull @Valid XtaIdentifier clientIdentifier,
 		@Positive int maxListItems
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
index f709010c81d7020b89103f6d966071af25a83808..d47d13465fa68e0f1db6e523a19a77e27e847b5a 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
+import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.CancelDeniedException;
 import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
@@ -30,6 +31,7 @@ public class ManagementPortImpl implements ManagementPortType {
 
 	private final ResponseMapper responseMapper;
 	private final RequestMapper requestMapper;
+	private final RequestValidator requestValidator;
 	private final XtaMessageService xtaMessageService;
 
 	/*
@@ -72,8 +74,8 @@ public class ManagementPortImpl implements ManagementPortType {
 			final genv3.eu.osci.ws.x2014.x10.transport.PartyType authorIdentifier)
 			throws XTAWSTechnicalProblemException, PermissionDeniedException, ParameterIsNotValidException {
 		log.info("Executing operation lookupService");
-
 		var request = requestMapper.mapXtaLookupServiceRequest(lookupServiceRequest, authorIdentifier);
+		requestValidator.validate(request);
 
 		return responseMapper.mapLookupServiceResponse(request);
 	}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java
index 8f24819ad20340a542bd2a80cefdadd24d4b6d7f..6e43533453efffd463ccef3c380f5d33b2136fc3 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java
@@ -50,7 +50,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		requestValidator.validate(request);
 
 		var message = messageService.getMessage(request)
-				.orElseThrow(() -> createInvalidMessageIdException(request.messageId(), request.clientIdentifierValue()));
+				.orElseThrow(() -> createInvalidMessageIdException(request.messageId(), request.clientIdentifier().value()));
 
 		messageMetaData.value = responseMapper.mapMessageMetaData(message.metaData());
 		fetchResponseHeader.value = responseMapper.mapMsgBoxResponseTypeFromRequestId(
@@ -131,7 +131,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		requestValidator.validate(request);
 
 		if (!messageService.closeMessage(request)) {
-			throw createInvalidMessageIdException(request.messageId(), request.clientIdentifierValue());
+			throw createInvalidMessageIdException(request.messageId(), request.clientIdentifier().value());
 		}
 	}
 
diff --git a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
index e4cffea58c1ea08992ebf16fad475eac22cddf9d..79864e4fce2136fb06d23e29f0a2796991b32553 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
@@ -4,8 +4,6 @@ import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -33,9 +31,9 @@ public class XtaMessageService {
 
 	public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) {
 		return XtaMessageMetaDataListing.builder()
-				.pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifierValue()))
+				.pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifier().value()))
 				.messages(getMetaData(messageRepository.findByReaderIdentifierValueLimitedTo(
-						listingRequest.clientIdentifierValue(),
+						listingRequest.clientIdentifier().value(),
 						listingRequest.maxListItems())))
 				.build();
 	}
@@ -48,7 +46,7 @@ public class XtaMessageService {
 
 	public Optional<XtaMessage> getMessage(XtaGetMessageRequest request) {
 		return messageRepository.get(request.messageId())
-				.filter(isAuthorOrReaderOfMessage(request.clientIdentifierValue()));
+				.filter(isAuthorOrReaderOfMessage(request.clientIdentifier().value()));
 	}
 
 	Predicate<XtaMessage> isAuthorOrReaderOfMessage(String clientIdentifierValue) {
@@ -59,7 +57,7 @@ public class XtaMessageService {
 	public boolean closeMessage(XtaCloseRequest request) {
 		return messageRepository.deleteByMessageIdAndReaderIdentifierValue(
 				request.messageId(),
-				request.clientIdentifierValue()
+				request.clientIdentifier().value()
 		);
 	}
 
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
index b36a0ea802f05400233148421310af440c7ce1c3..0c083b256a432314f357172b87486d5d3dc6c218 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
+
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
 import genv3.de.xoev.transport.xta.x211.LookupServiceType;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@@ -7,7 +9,6 @@ import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 public class LookupServiceRequestTestFactory {
 	public static final String SERVICE_TYPE = "http://www.osci.de/xmeld181/xmeld181Rueckmeldung.wsdl";
 	public static final PartyType READER_PARTY_TYPE = createReaderPartyType();
-	public static final String LOOKUP_SERVICE_REQUEST_READER = "gae:reader";
 
 	public static LookupServiceRequest create() {
 		var lookupServiceRequest = new LookupServiceRequest();
@@ -32,8 +33,7 @@ public class LookupServiceRequestTestFactory {
 
 	private static PartyType createReaderPartyType() {
 		var readerPartyType = new PartyType();
-		var readerIdentifier = PartyIdentifierTypeTestFactory.createReader(LOOKUP_SERVICE_REQUEST_READER);
-		readerPartyType.setIdentifier(readerIdentifier);
+		readerPartyType.setIdentifier(READER_PARTY_IDENTIFIER);
 		return readerPartyType;
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
index 085b4137ada7a1e6d0e5b7bc63cfb0ed1b2e68c4..99db136548c538dbd89ef4b43e51f0a43d7e65cb 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
@@ -1,28 +1,27 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
+
 import java.math.BigInteger;
 
 import org.apache.cxf.ws.addressing.AttributedURIType;
 
 import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
 import genv3.eu.osci.ws.x2014.x10.transport.MsgIdentificationType;
-import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 import genv3.eu.osci.ws.x2014.x10.transport.QualifierType;
 
 public class MessageMetaDataTestFactory {
-	public static final BigInteger MESSAGE_SIZE = BigInteger.TEN;
+	public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(3000);
 	public static final String QUALIFER_SERVICE = "service";
 	public static final String QUALIFER_SUBJECT = "subject";
 	public static final String QUALIFER_MESSAGE_TYPE_CODE = "code";
 	public static final String QUALIFER_MESSAGE_TYPE_PAYLOAD_SCHEMA = "payloadSchema";
 	public static final String MESSAGE_ID = "de:xta:messageid:test-id";
-	public static final PartyIdentifierType AUTHOR_IDENTIFIER = PartyIdentifierTypeTestFactory.createAuthor("author");
-	public static final PartyIdentifierType READER_IDENTIFIER = PartyIdentifierTypeTestFactory.createReader("reader");
 
 	public static MessageMetaData create() {
 		var metaData = new MessageMetaData();
-		metaData.getOriginators().getAuthor().setIdentifier(AUTHOR_IDENTIFIER);
-		metaData.getDestinations().getReader().setIdentifier(READER_IDENTIFIER);
+		metaData.getOriginators().getAuthor().setIdentifier(AUTHOR_PARTY_IDENTIFIER);
+		metaData.getDestinations().getReader().setIdentifier(READER_PARTY_IDENTIFIER);
 		metaData.setMsgIdentification(createMsgIdentificationType(AttributedURITypeTestFactory.create(MESSAGE_ID)));
 		metaData.setQualifier(createQualifierType(new QualifierType.BusinessScenario()));
 		metaData.setMsgSize(MESSAGE_SIZE);
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
index d7e4d21a6b68a6cc595091141b62f02996ec823f..6f33f6da90ad140b26589505afb3da0cfcacea11 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
@@ -4,23 +4,22 @@ import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 
 public class PartyIdentifierTypeTestFactory {
 	public static final String PARTY_IDENTIFIER_TYPE = "xoev";
-	public static final String PARTY_IDENTIFIER_CATEGORY_AUTHOR = "AUTHOR";
-	public static final String PARTY_IDENTIFIER_CATEGORY_READER = "READER";
+	public static final String PARTY_IDENTIFIER_CATEGORY_READER = "READER-category";
+	public static final String PARTY_IDENTIFIER_NAME_READER = "READER-name";
+	public static final String PARTY_IDENTIFIER_VALUE_READER = "READER-value";
+	public static final String PARTY_IDENTIFIER_CATEGORY_AUTHOR = "AUTHOR-category";
+	public static final String PARTY_IDENTIFIER_NAME_AUTHOR = "AUTHOR-name";
+	public static final String PARTY_IDENTIFIER_VALUE_AUTHOR = "AUTHOR-value";
 
-	public static PartyIdentifierType createAuthor(String value) {
-		return create(value, PARTY_IDENTIFIER_CATEGORY_AUTHOR);
-	}
-
-	public static PartyIdentifierType createReader(String value) {
-		return create(value, PARTY_IDENTIFIER_CATEGORY_READER);
-	}
+	public static final PartyIdentifierType AUTHOR_PARTY_IDENTIFIER = create(PARTY_IDENTIFIER_VALUE_AUTHOR, PARTY_IDENTIFIER_NAME_AUTHOR, PARTY_IDENTIFIER_CATEGORY_AUTHOR);
+	public static final PartyIdentifierType READER_PARTY_IDENTIFIER = create(PARTY_IDENTIFIER_VALUE_READER, PARTY_IDENTIFIER_NAME_READER, PARTY_IDENTIFIER_CATEGORY_READER);
 
-	public static PartyIdentifierType create(String value, String category) {
+	private static PartyIdentifierType create(String value, String name, String category) {
 		var partyIdentifierType = new PartyIdentifierType();
-		partyIdentifierType.setName(value);
 		partyIdentifierType.setValue(value);
-		partyIdentifierType.setType(PARTY_IDENTIFIER_TYPE);
+		partyIdentifierType.setName(name);
 		partyIdentifierType.setCategory(category);
+		partyIdentifierType.setType(PARTY_IDENTIFIER_TYPE);
 		return partyIdentifierType;
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
index 78e2af6de1dd58b7c53c3716a3f2e9a3aa8d5942..ab1da303c5182f304515c6a4080408b6d58d34d3 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.xta.test.app.factory;
 
-import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 
@@ -8,14 +8,13 @@ public class PartyTypeTestFactory {
 
 	public static PartyType create() {
 		var partyIdentifier = new PartyType();
-		partyIdentifier.setIdentifier(READER_IDENTIFIER);
+		partyIdentifier.setIdentifier(READER_PARTY_IDENTIFIER);
 		return partyIdentifier;
 	}
 
 	public static PartyType createWithAuthor() {
 		var partyIdentifier = new PartyType();
-		partyIdentifier.setIdentifier(AUTHOR_IDENTIFIER);
+		partyIdentifier.setIdentifier(AUTHOR_PARTY_IDENTIFIER);
 		return partyIdentifier;
 	}
-
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
index 01815f032e20f0ed478cd9ddb650a89f4667fcd1..4c787394927f131fae3762d0346cd7f845b23687 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
@@ -1,11 +1,12 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaCloseRequest;
 
 public class XtaCloseRequestTestFactory {
 
 	public static final String CLOSE_REQUEST_MESSAGE_ID = "close-request-message-id";
-	public static final String READER_IDENTIFIER_VALUE = "reader-identifier";
 
 	public static XtaCloseRequest create() {
 		return createBuilder().build();
@@ -14,6 +15,6 @@ public class XtaCloseRequestTestFactory {
 	public static XtaCloseRequest.XtaCloseRequestBuilder createBuilder() {
 		return XtaCloseRequest.builder()
 				.messageId(CLOSE_REQUEST_MESSAGE_ID)
-				.clientIdentifierValue(READER_IDENTIFIER_VALUE);
+				.clientIdentifier(READER_IDENTIFIER);
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
index 1062e28577d0926d6f0aa8ad7ae44d22cfbbee75..32f798491dd93f9f9a6e3114da3b5b6bd7032db6 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
@@ -1,12 +1,12 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 
 public class XtaLookupServiceRequestTestFactory {
 
 	public static String LOOKUP_SERVICE_SERVICE = "lookup-request-service";
-	public static String LOOKUP_SERVICE_READER_IDENTIFIER_VALUE = "reader-identifier-value";
-	public static String LOOKUP_SERVICE_AUTHOR_IDENTIFIER_VALUE = "author-identifier-value";
 
 	public static XtaLookupServiceRequest create() {
 		return createBuilder().build();
@@ -15,7 +15,7 @@ public class XtaLookupServiceRequestTestFactory {
 	public static XtaLookupServiceRequest.XtaLookupServiceRequestBuilder createBuilder() {
 		return XtaLookupServiceRequest.builder()
 				.service(LOOKUP_SERVICE_SERVICE)
-				.readerIdentifierValue(LOOKUP_SERVICE_READER_IDENTIFIER_VALUE)
-				.authorIdentifierValue(LOOKUP_SERVICE_AUTHOR_IDENTIFIER_VALUE);
+				.readerIdentifier(READER_IDENTIFIER)
+				.authorIdentifier(AUTHOR_IDENTIFIER);
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
index bc265306a9986173af4df462effdc6cc68034a8c..b6cdda74d9d0c96ac677e933a240592b4fecc9db 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
@@ -1,14 +1,23 @@
 package de.ozgcloud.xta.test.app.factory;
 
-import java.math.BigInteger;
+import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 
 import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 
 public class XtaMessageMetaDataTestFactory {
 	public static final String DEFAULT_MESSAGE_ID = "defaultMessageId";
-	public static final XtaIdentifier AUTHOR_IDENTIFIER = createIdentifier("author", "AUTHOR");
-	public static final XtaIdentifier READER_IDENTIFIER = createIdentifier("reader", "READER");
+	public static final XtaIdentifier AUTHOR_IDENTIFIER = XtaIdentifier.builder()
+			.value(PARTY_IDENTIFIER_VALUE_AUTHOR)
+			.name(PARTY_IDENTIFIER_NAME_AUTHOR)
+			.category(PARTY_IDENTIFIER_CATEGORY_AUTHOR)
+			.build();
+	public static final XtaIdentifier READER_IDENTIFIER = XtaIdentifier.builder()
+			.value(PARTY_IDENTIFIER_VALUE_READER)
+			.name(PARTY_IDENTIFIER_NAME_READER)
+			.category(PARTY_IDENTIFIER_CATEGORY_READER)
+			.build();
 	public static final String SERVICE = "Service";
 	public static final String BUSINESS_SCENARIO_CODE = "BusinessScenarioCode";
 	public static final String BUSINESS_SCENARIO_NAME = "BusinessScenarioName";
@@ -16,7 +25,6 @@ public class XtaMessageMetaDataTestFactory {
 	public static final String BUSINESS_SCENARIO_LIST_VERSION_ID = "BusinessScenarioListVersionID";
 	public static final String MESSAGE_TYPE_CODE = "MessageTypeCode";
 	public static final String MESSAGE_PAYLOAD_SCHEMA = "MessageTypePayloadSchema";
-	public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(3000);
 
 	public static XtaMessageMetaData create() {
 		return createBuilder().build();
@@ -43,11 +51,4 @@ public class XtaMessageMetaDataTestFactory {
 				.messageSize(MESSAGE_SIZE);
 	}
 
-	private static XtaIdentifier createIdentifier(String value, String category) {
-		return XtaIdentifier.builder()
-				.value(value)
-				.name(value)
-				.category(category)
-				.build();
-	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java
index ac1006d711264f2f49c0324644fa05184363b971..0e6128c38f8ef5ffe70927050d5bb0715c4c8c3b 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java
@@ -3,6 +3,7 @@ package de.ozgcloud.xta.test.app.mapper;
 import static de.ozgcloud.xta.test.app.factory.LookupServiceRequestTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.MsgBoxCloseRequestTypeTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.MsgBoxFetchRequestTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 
@@ -37,12 +38,45 @@ import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgSelector;
 import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
-import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 import lombok.SneakyThrows;
 
 public class RequestMapperTest {
 
-	private final RequestMapper requestMapper = Mappers.getMapper(RequestMapper.class);
+	private final RequestMapper mapper = Mappers.getMapper(RequestMapper.class);
+
+	@DisplayName("map XtaIdentifier")
+	@Nested
+	class TestMapXtaIdentifier {
+		private static final PartyIdentifierType CLIENT_IDENTIFIER = PartyTypeTestFactory.create().getIdentifier();
+
+		@DisplayName("should map name")
+		@Test
+		void shouldMapName() {
+			var result = doMapping();
+
+			assertThat(result.name()).isEqualTo(CLIENT_IDENTIFIER.getName());
+		}
+
+		@DisplayName("should map category")
+		@Test
+		void shouldMapCategory() {
+			var result = doMapping();
+
+			assertThat(result.category()).isEqualTo(CLIENT_IDENTIFIER.getCategory());
+		}
+
+		@DisplayName("should map value")
+		@Test
+		void shouldMapValue() {
+			var result = doMapping();
+
+			assertThat(result.value()).isEqualTo(CLIENT_IDENTIFIER.getValue());
+		}
+
+		private XtaIdentifier doMapping() {
+			return mapper.mapXtaIdentifier(CLIENT_IDENTIFIER);
+		}
+	}
 
 	@Nested
 	class MapXtaMessageFromGenericContentContainer {
@@ -65,7 +99,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map message and attachment files from content container")
 		@Test
 		void shouldMapFiles() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var messageFile = xtaMessage.messageFile();
 			var attachmentFiles = xtaMessage.attachmentFiles();
 
@@ -87,7 +121,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map XtaMessageMetaData from MessageMetaData")
 		@Test
 		void shouldMapMetaData() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var xtaMessageMetaData = xtaMessage.metaData();
 
 			assertThat(xtaMessageMetaData.service()).isEqualTo(MessageMetaDataTestFactory.QUALIFER_SERVICE);
@@ -100,12 +134,12 @@ public class RequestMapperTest {
 		@DisplayName("Should map author and reader identifiers from MessageMetaData")
 		@Test
 		void shouldMapIdentifier() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var authorIdentifier = xtaMessage.metaData().authorIdentifier();
 			var readerIdentifier = xtaMessage.metaData().readerIdentifier();
 
-			assertIdentifiersAreEqual(authorIdentifier, MessageMetaDataTestFactory.AUTHOR_IDENTIFIER);
-			assertIdentifiersAreEqual(readerIdentifier, MessageMetaDataTestFactory.READER_IDENTIFIER);
+			assertIdentifiersAreEqual(authorIdentifier, AUTHOR_PARTY_IDENTIFIER);
+			assertIdentifiersAreEqual(readerIdentifier, READER_PARTY_IDENTIFIER);
 		}
 
 		void assertIdentifiersAreEqual(XtaIdentifier identifier, PartyIdentifierType identifierType) {
@@ -120,7 +154,7 @@ public class RequestMapperTest {
 			var businessScenario = QualifierTypeBusinessScenarioTestFactory.createDefinedBusinessScenario();
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
-			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
+			var xtaMessageMetaData = mapper.mapXtaMessageMetaData(messageMetaData);
 
 			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
 			assertThat(xtaMessageMetaData.businessScenarioName()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME);
@@ -135,7 +169,7 @@ public class RequestMapperTest {
 			var businessScenario = QualifierTypeBusinessScenarioTestFactory.createUndefinedBusinessScenario();
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
-			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
+			var xtaMessageMetaData = mapper.mapXtaMessageMetaData(messageMetaData);
 
 			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
 			assertThat(xtaMessageMetaData.businessScenarioListUri()).isNull();
@@ -162,7 +196,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map message id from MsgBoxRequest")
 		@Test
 		void shouldMapMessageId() {
-			var messageId = requestMapper.mapMessageIdFromMsgBoxFetchRequest(fetchRequest);
+			var messageId = mapper.mapMessageIdFromMsgBoxFetchRequest(fetchRequest);
 
 			assertThat(messageId).isEqualTo(MESSAGE_ID);
 		}
@@ -173,12 +207,14 @@ public class RequestMapperTest {
 	class TestMapMessageMetaDataListingRequest {
 		private static final int MAX_LIST_ITEMS = 10;
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		@DisplayName("should map max list items")
@@ -190,8 +226,10 @@ public class RequestMapperTest {
 		}
 
 		private XtaMessageMetaDataListingRequest doMapping() {
-			return requestMapper.mapMessageMetaDataListingRequest(MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS),
-					PartyTypeTestFactory.create());
+			return mapper.mapMessageMetaDataListingRequest(
+					MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS),
+					READER_PARTY_TYPE
+			);
 		}
 	}
 
@@ -206,16 +244,18 @@ public class RequestMapperTest {
 			assertThat(result.messageId()).isEqualTo(CLOSE_REQUEST_MESSAGE_ID);
 		}
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		private XtaCloseRequest doMapping() {
-			return requestMapper.mapXtaCloseRequest(MsgBoxCloseRequestTypeTestFactory.create(),
+			return mapper.mapXtaCloseRequest(MsgBoxCloseRequestTypeTestFactory.create(),
 					PartyTypeTestFactory.create());
 		}
 	}
@@ -231,16 +271,18 @@ public class RequestMapperTest {
 			assertThat(result.messageId()).isEqualTo(GET_MESSAGE_REQUEST_MESSAGE_ID);
 		}
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		private XtaGetMessageRequest doMapping() {
-			return requestMapper.mapXtaGetMessageRequest(MsgBoxFetchRequestTestFactory.create(),
+			return mapper.mapXtaGetMessageRequest(MsgBoxFetchRequestTestFactory.create(),
 					PartyTypeTestFactory.create());
 		}
 	}
@@ -248,7 +290,6 @@ public class RequestMapperTest {
 	@DisplayName("map xta lookup service request")
 	@Nested
 	class TestMapXtaLookupServiceRequest {
-		private static final PartyType partyType = PartyTypeTestFactory.create();
 
 		@DisplayName("should map service")
 		@Test
@@ -258,12 +299,14 @@ public class RequestMapperTest {
 			assertThat(result.service()).isEqualTo(SERVICE_TYPE);
 		}
 
-		@DisplayName("should map reader identifier value")
+		@DisplayName("should map reader identifier")
 		@Test
-		void shouldMapReaderIdentifierValue() {
+		void shouldMapReaderIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.readerIdentifierValue()).isEqualTo(LOOKUP_SERVICE_REQUEST_READER);
+			assertThat(result.readerIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		@DisplayName("should map author identifier value")
@@ -271,12 +314,14 @@ public class RequestMapperTest {
 		void shouldMapAuthorIdentifierValue() {
 			var result = doMapping();
 
-			assertThat(result.authorIdentifierValue()).isEqualTo(partyType.getIdentifier().getValue());
+			assertThat(result.authorIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(AUTHOR_IDENTIFIER);
 		}
 
 		private XtaLookupServiceRequest doMapping() {
-			return requestMapper.mapXtaLookupServiceRequest(LookupServiceRequestTestFactory.create(),
-					partyType);
+			return mapper.mapXtaLookupServiceRequest(LookupServiceRequestTestFactory.create(),
+					PartyTypeTestFactory.createWithAuthor());
 		}
 	}
 
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
index 07d8b77efc8cecbaf3bcf9635eef59d22f7e9ac1..fee8821f41034c3b4506724114dfcecec86e94b7 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.xta.test.app.mapper;
 
+import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*;
@@ -452,12 +454,14 @@ public class ResponseMapperTest {
 			assertThat(result.getServiceType()).isEqualTo(LOOKUP_SERVICE_SERVICE);
 		}
 
-		@DisplayName("should map reader identifier value")
+		@DisplayName("should map reader identifier")
 		@Test
-		void shouldMapReaderIdentifierValue() {
+		void shouldMapReaderIdentifier() {
 			var result = getFirstLookupServiceResult();
 
-			assertThat(result.getReader().getIdentifier().getValue()).isEqualTo(LOOKUP_SERVICE_READER_IDENTIFIER_VALUE);
+			assertThat(result.getReader().getIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_PARTY_IDENTIFIER);
 		}
 
 		@DisplayName("should map service is available value")
diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
index 9e83bfcf56a0720c4ba657cedd96ce55ded176f0..65741330a0c51de32724284959fe827644b8bdce 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
@@ -16,6 +16,7 @@ import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
+import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResponse;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@@ -32,6 +33,8 @@ public class ManagementPortImplTest {
 	private ResponseMapper responseMapper;
 	@Mock
 	private RequestMapper requestMapper;
+	@Mock
+	private RequestValidator requestValidator;
 
 	@DisplayName("create message id")
 	@Nested
@@ -92,6 +95,15 @@ public class ManagementPortImplTest {
 			when(responseMapper.mapLookupServiceResponse(request)).thenReturn(response);
 		}
 
+		@DisplayName("should validate request")
+		@Test
+		@SneakyThrows
+		void shouldValidateRequest() {
+			managementPortImpl.lookupService(lookupServiceRequest, authorIdentifier);
+
+			verify(requestValidator).validate(request);
+		}
+
 		@DisplayName("should return")
 		@Test
 		@SneakyThrows
diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java
index 96c321e353cf29cd3b58469e10f1d96ddbd71021..0caf89774c2e0e9a35b69acc1517a8c57ef27b8e 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.xta.test.app.server;
 
 import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
@@ -62,7 +63,6 @@ public class MsgBoxPortImplTest {
 	@Nested
 	class TestGetMessage {
 		private static final String MESSAGE_ID = "message-id";
-		private static final String CLIENT_IDENTIFIER_VALUE = "client-identifier";
 
 		@Mock
 		private MsgBoxFetchRequest fetchRequest;
@@ -85,7 +85,7 @@ public class MsgBoxPortImplTest {
 		void mock() {
 			request = XtaGetMessageRequest.builder()
 					.messageId(MESSAGE_ID)
-					.clientIdentifierValue(CLIENT_IDENTIFIER_VALUE)
+					.clientIdentifier(READER_IDENTIFIER)
 					.build();
 
 			messageMetaDataHolder = new Holder<>();
@@ -268,7 +268,7 @@ public class MsgBoxPortImplTest {
 		void mock() {
 			request = XtaCloseRequest.builder()
 					.messageId(MESSAGE_ID)
-					.clientIdentifierValue(TestGetMessage.CLIENT_IDENTIFIER_VALUE)
+					.clientIdentifier(READER_IDENTIFIER)
 					.build();
 			when(requestMapper.mapXtaCloseRequest(closeRequest, authorIdentifier)).thenReturn(request);
 		}
diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
index 80599eec0ba843241443b26d17bad9c66546e60e..495193ac23e661adbc370eb11c8c2a264bfe8531 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
@@ -67,7 +67,7 @@ public class XtaMessageServiceTest {
 		private final int MESSAGE_COUNT = 2;
 
 		private final XtaMessageMetaDataListingRequest messageMetaDataListingRequest = XtaMessageMetaDataListingRequest.builder()
-				.clientIdentifierValue(READER_IDENTIFIER.value())
+				.clientIdentifier(READER_IDENTIFIER)
 				.maxListItems(MAX_LIST_ITEMS)
 				.build();
 
@@ -109,7 +109,7 @@ public class XtaMessageServiceTest {
 	class TestGetMessage {
 		private static final XtaGetMessageRequest GET_MESSAGE_REQUEST = XtaGetMessageRequest.builder()
 				.messageId(MESSAGE_ID_1)
-				.clientIdentifierValue(READER_IDENTIFIER.value())
+				.clientIdentifier(READER_IDENTIFIER)
 				.build();
 		private static final Predicate<XtaMessage> IS_AUTHOR_OR_READER = m -> true;
 		private static final Predicate<XtaMessage> IS_NOT_AUTHOR_OR_READER = m -> false;
@@ -195,7 +195,7 @@ public class XtaMessageServiceTest {
 		void shouldReturn(boolean deleted) {
 			var request = XtaCloseRequestTestFactory.create();
 			when(messageRepository.deleteByMessageIdAndReaderIdentifierValue(
-					request.messageId(), request.clientIdentifierValue())
+					request.messageId(), request.clientIdentifier().value())
 			).thenReturn(deleted);
 
 			boolean result = service.closeMessage(request);
diff --git a/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java b/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
index 23e1264662d7708b41a6581aadbc66eae21c45e8..a8775f27ebf046c6b65e31356a8000cd8aa51cef 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
@@ -11,6 +11,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
 import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
+import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
 import lombok.SneakyThrows;
 
@@ -33,7 +34,11 @@ class RequestValidatorTest {
 		@Test
 		@SneakyThrows
 		void shouldReturn() {
-			validator.validate(XtaGetMessageRequestTestFactory.create());
+			validator.validate(XtaGetMessageRequestTestFactory.createBuilder()
+					.clientIdentifier(XtaIdentifier.builder()
+							.value("not blank")
+							.build())
+					.build());
 		}
 
 		@DisplayName("should throw if null")
@@ -73,11 +78,13 @@ class RequestValidatorTest {
 				assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
 			}
 
-			@DisplayName("should throw if clientIdentifierValue is null")
+			@DisplayName("should throw if clientIdentifier value is null")
 			@Test
 			void shouldThrowIfClientIdentifierValueIsNull() {
 				var request = XtaGetMessageRequestTestFactory.createBuilder()
-						.clientIdentifierValue(null)
+						.clientIdentifier(XtaIdentifier.builder()
+								.value(null)
+								.build())
 						.build();
 
 				assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
diff --git a/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
index 7ec8f61169b244646b5604915e8ef0de51e06b9c..e410ffc06211cc96298024fb7b4f8e03a3f71773 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
@@ -1,15 +1,16 @@
 package de.ozgcloud.xta.test.app.validation;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
 
 public class XtaGetMessageRequestTestFactory {
 	public static String VALID_MESSAGE_ID = "urn:de:xta:messageid:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16";
-	public static String VALID_CLIENT_IDENTIFIER_VALUE = "prefix:someValue";
 
 	public static XtaGetMessageRequest.XtaGetMessageRequestBuilder createBuilder() {
 		return XtaGetMessageRequest.builder()
 				.messageId(VALID_MESSAGE_ID)
-				.clientIdentifierValue(VALID_CLIENT_IDENTIFIER_VALUE);
+				.clientIdentifier(READER_IDENTIFIER);
 	}
 
 	public static XtaGetMessageRequest create() {