diff --git a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java
index d89a8e6c355aae1046c03fc65cc7eada627d91ee..999b6e01d1e5293c5d20e988ea43cb27fdb4508d 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java
@@ -7,6 +7,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import org.springframework.stereotype.Component;
 
@@ -49,13 +50,18 @@ public class XtaMessageRepository {
 		}
 	}
 
-	public List<XtaMessage> findAllLimitedTo(int maxListItems) {
-		return messages.values().stream()
+	public List<XtaMessage> findByReaderIdentifierValueLimitedTo(String readerIdentifierValue, int maxListItems) {
+		return findByReaderIdentifierValue(readerIdentifierValue)
 				.limit(maxListItems)
 				.toList();
 	}
 
-	public BigInteger count() {
-		return BigInteger.valueOf(messages.size());
+	public BigInteger countByReaderIdentifierValue(String readerIdentifierValue) {
+		return BigInteger.valueOf(findByReaderIdentifierValue(readerIdentifierValue).count());
+	}
+
+	Stream<XtaMessage> findByReaderIdentifierValue(String readerIdentifierValue) {
+		return messages.values().stream()
+				.filter(m -> m.metaData().readerIdentifier().value().equals(readerIdentifierValue));
 	}
 }
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 2b26ca69ec5e190a75659d67ca9e8079a7b6ed11..54598c3d9c61028e1dae762434fb92261757121b 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
@@ -1,17 +1,25 @@
 package de.ozgcloud.xta.test.app.mapper;
 
 import de.ozgcloud.xta.test.app.exception.TechnicalException;
+import de.ozgcloud.xta.test.app.model.Identifier;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
+import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
 import genv3.de.xoev.transport.xta.x211.ContentType;
 import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
 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;
+
 import jakarta.activation.DataHandler;
+
+import org.mapstruct.Condition;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
+import org.mapstruct.Named;
 import org.mapstruct.ReportingPolicy;
 
 import java.io.File;
@@ -29,7 +37,10 @@ public interface RequestMapper {
 	XtaMessage mapXtaMessageFromGenericContentContainer(GenericContentContainer genericContainer, MessageMetaData messageMetaData);
 
 	@Mapping(target = "service", source = "qualifier.service")
-	@Mapping(target = "businessScenario", source = "qualifier.businessScenario")
+	@Mapping(target = "businessScenarioCode", source = "qualifier.businessScenario", qualifiedByName = "mapBusinessScenarioCode")
+	@Mapping(target = "businessScenarioName", source = "qualifier.businessScenario.defined.name")
+	@Mapping(target = "businessScenarioListUri", source = "qualifier.businessScenario.defined.listURI")
+	@Mapping(target = "businessScenarioListVersionId", source = "qualifier.businessScenario.defined.listVersionID")
 	@Mapping(target = "messageTypeCode", source = "qualifier.messageType.code")
 	@Mapping(target = "messageTypePayloadSchema", source = "qualifier.messageType.payloadSchema")
 	@Mapping(target = "messageId", source = "msgIdentification.messageID.value")
@@ -38,21 +49,9 @@ public interface RequestMapper {
 	@Mapping(target = "messageSize", source = "msgSize")
 	XtaMessageMetaData mapXtaMessageMetaData(MessageMetaData messageMetaData);
 
-	default XtaMessageMetaData.BusinessScenario mapBusinessScenarioFromQualifierTypeBusinessScenario(QualifierType.BusinessScenario businessScenario){
-		if (businessScenario.getDefined() != null && businessScenario.getDefined().getCode() != null) {
-			var definedKeyCode = businessScenario.getDefined();
-			return new XtaMessageMetaData.BusinessScenario(
-					definedKeyCode.getCode(),
-					definedKeyCode.getName(),
-					definedKeyCode.getListURI(),
-					definedKeyCode.getListVersionID(),
-					true);
-		}
-		else {
-			String businessScenarioCode = businessScenario.getUndefined() == null ? "" : businessScenario.getUndefined();
-			return new XtaMessageMetaData.BusinessScenario(
-					businessScenarioCode, null, null, null, false);
-		}
+	@Named("mapBusinessScenarioCode")
+	default String mapBusinessScenarioCode(QualifierType.BusinessScenario businessScenario) {
+		return businessScenario.getDefined() != null ? businessScenario.getDefined().getCode() : businessScenario.getUndefined();
 	}
 
 	@Mapping(target = "file", source = "value")
@@ -60,14 +59,13 @@ public interface RequestMapper {
 	@Mapping(target = "language", source = "lang")
 	XtaFile mapXtaFileFromContentType(ContentType contentType);
 
-	default File persistToTempFile(DataHandler dataHandler){
+	default File persistToTempFile(DataHandler dataHandler) {
 		try {
 			var file = File.createTempFile("xta", ".data");
 			file.deleteOnExit();
-			var out = new FileOutputStream(file);
-			dataHandler.writeTo(out);
-			out.flush();
-			out.close();
+			try (var out = new FileOutputStream(file)) {
+				dataHandler.writeTo(out);
+			}
 			return file;
 		} catch (IOException e) {
 			throw new TechnicalException("Error writing Attachment to temp file", e);
@@ -77,4 +75,21 @@ public interface RequestMapper {
 	default String mapMessageIdFromMsgBoxFetchRequest(MsgBoxFetchRequest fetchRequest) {
 		return fetchRequest.getMsgSelector().getMessageID().getFirst().getValue();
 	}
+
+	default int mapMaxListItems(MsgBoxStatusListRequestType fetchRequest) {
+		int maxListItems;
+		try {
+			maxListItems = fetchRequest.getMaxListItems().intValueExact();
+		} catch (ArithmeticException e) {
+			maxListItems = Integer.MAX_VALUE;
+		}
+		if (maxListItems <= 0) {
+			maxListItems = Integer.MAX_VALUE;
+		}
+		return maxListItems;
+	}
+
+	@Mapping(target = "clientIdentifierValue", source = "clientIdentifier.identifier.value")
+	@Mapping(target = "maxListItems", source = "fetchRequest.maxListItems")
+	XtaMessageMetaDataListingRequest mapMessageMetaDataListingRequest(MsgBoxStatusListRequestType fetchRequest, PartyType clientIdentifier);
 }
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 968c2c579e44317dece90e596414783460611fee..7ac472b3d954073ad42f51211287532ec272dfc6 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
@@ -8,21 +8,28 @@ import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
 import genv3.de.xoev.transport.xta.x211.ContentType;
 import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType;
-import genv3.eu.osci.ws.x2014.x10.transport.*;
+import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType;
+import genv3.eu.osci.ws.x2014.x10.transport.KeyCodeType;
+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.QualifierType;
 
 import jakarta.activation.DataHandler;
 import jakarta.activation.FileDataSource;
 
 import lombok.SneakyThrows;
+
 import org.mapstruct.Condition;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
+import org.mapstruct.Named;
 import org.mapstruct.ReportingPolicy;
 import org.mapstruct.SourcePropertyName;
 import org.mapstruct.TargetPropertyName;
 
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
+
 import java.io.File;
 import java.math.BigInteger;
 import java.time.LocalDateTime;
@@ -37,6 +44,8 @@ public interface ResponseMapper {
 	String IDENTIFIER_TYPE = "xoev";
 	String MESSAGE_TYPE_LIST_URI = "urn:de:payloadSchema:elementName";
 	String MESSAGE_TYPE_LIST_VERSION_ID = "1.0";
+	String REQUEST_ID = "1";
+	String NO_MESSAGES_REASON = "Keine Nachrichten gefunden.";
 	Identifier SENDER_IDENTIFIER = Identifier.builder()
 			.name("xta-test-server")
 			.value("xta-test-server")
@@ -44,7 +53,7 @@ public interface ResponseMapper {
 			.build();
 
 	@Mapping(target = "qualifier.service", source = "service")
-	@Mapping(target = "qualifier.businessScenario", source = "businessScenario")
+	@Mapping(target = "qualifier.businessScenario", source = ".", qualifiedByName = "mapBusinessScenario")
 	@Mapping(target = "qualifier.messageType", source = ".")
 	@Mapping(target = "msgIdentification.messageID.value", source = "messageId")
 	@Mapping(target = "originators.author.identifier", source = "authorIdentifier")
@@ -56,22 +65,27 @@ public interface ResponseMapper {
 	@Mapping(target = "messageProperties", ignore = true)
 	MessageMetaData mapMessageMetaDataFromXtaMessageMetaData(XtaMessageMetaData xtaMessageMetaData);
 
-	default QualifierType.BusinessScenario mapQualifierBusinessScenarioFromBusinessScenario(XtaMessageMetaData.BusinessScenario businessScenario) {
-		var qualifierBusinessScenario = new QualifierType.BusinessScenario();
-		if (businessScenario.isDefinedCode()) {
-			var definedKeyCode = new KeyCodeType();
-			definedKeyCode.setCode(businessScenario.businessScenarioCode());
-			definedKeyCode.setName(businessScenario.name());
-			definedKeyCode.setListURI(businessScenario.listURI());
-			definedKeyCode.setListVersionID(businessScenario.listVersionID());
-			qualifierBusinessScenario.setDefined(definedKeyCode);
-		} else {
-			qualifierBusinessScenario.setDefined(null);
-			qualifierBusinessScenario.setUndefined(businessScenario.businessScenarioCode());
-		}
-		return qualifierBusinessScenario;
+	@Named("mapBusinessScenario")
+	default QualifierType.BusinessScenario mapBusinessScenario(XtaMessageMetaData xtaMessageMetaData) {
+		return xtaMessageMetaData.businessScenarioListUri() != null
+				? mapDefinedBusinessScenario(xtaMessageMetaData)
+				: mapUndefinedBusinessScenario(xtaMessageMetaData);
 	}
 
+	@Mapping(target = "defined", expression = "java(null)")
+	@Mapping(target = "undefined", source = "businessScenarioCode")
+	QualifierType.BusinessScenario mapUndefinedBusinessScenario(XtaMessageMetaData xtaMessageMetaData);
+
+	@Mapping(target = "defined", source = ".")
+	@Mapping(target = "undefined", expression = "java(null)")
+	QualifierType.BusinessScenario mapDefinedBusinessScenario(XtaMessageMetaData xtaMessageMetaData);
+
+	@Mapping(target = "code", source = "businessScenarioCode")
+	@Mapping(target = "name", source = "businessScenarioName")
+	@Mapping(target = "listURI", source = "businessScenarioListUri")
+	@Mapping(target = "listVersionID", source = "businessScenarioListVersionId")
+	KeyCodeType mapKeyCodeType(XtaMessageMetaData xtaMessageMetaData);
+
 	@Mapping(target = "code", source = "messageTypeCode")
 	@Mapping(target = "name", ignore = true)
 	@Mapping(target = "payloadSchema", source = "messageTypePayloadSchema")
@@ -80,7 +94,7 @@ public interface ResponseMapper {
 	QualifierType.MessageType mapMessageTypeQualifierType(XtaMessageMetaData xtaMessageMetaData);
 
 	@Mapping(target = "type", constant = IDENTIFIER_TYPE)
-	PartyIdentifierType mapPartyIdentifierTypeFromIdentifier(Identifier value);
+	PartyIdentifierType mapPartyIdentifierType(Identifier value);
 
 	@Mapping(target = "encryptedData", expression = "java(null)")
 	@Mapping(target = "contentContainer.message", source = "messageFile")
@@ -121,9 +135,16 @@ public interface ResponseMapper {
 	MsgBoxResponseType mapMsgBoxResponseTypeFromRequestID(String requestId);
 
 	@Mapping(target = "itemsPending", source = "pendingMessageCount")
-	@Mapping(target = "msgBoxRequestID", source = "requestId")
-	@Mapping(target = "noMessageAvailable", source = "messages")
-	MsgBoxResponseType mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(XtaMessageMetaDataListing xtaMessageMetaDataListing);
+	@Mapping(target = "msgBoxRequestID", constant = REQUEST_ID)
+	@Mapping(target = "noMessageAvailable", source = "messages", qualifiedByName = "mapNoMessageAvailableReason")
+	MsgBoxResponseType mapMsgBoxResponseType(XtaMessageMetaDataListing listing);
+
+	@Named("mapNoMessageAvailableReason")
+	default MsgBoxResponseType.NoMessageAvailable mapNoMessageAvailableReason(List<XtaMessageMetaData> messages) {
+		return messages.isEmpty() ? createNoMessageAvailableWithReason(NO_MESSAGES_REASON) : null;
+	}
+
+	MsgBoxResponseType.NoMessageAvailable createNoMessageAvailableWithReason(String reason);
 
 	@Condition
 	default boolean pendingMessagesCountIsNotZero(BigInteger pendingMessageCount, @TargetPropertyName String targetPropertyName,
@@ -135,13 +156,12 @@ public interface ResponseMapper {
 		return true;
 	}
 
-	default MsgBoxResponseType.NoMessageAvailable mapNoMessageAvailableFromXtaMessageMetaDataListing(
-			List<XtaMessageMetaData> messages) {
-		if (messages.isEmpty()) {
-			var noMessagesAvailable = new MsgBoxResponseType.NoMessageAvailable();
-			noMessagesAvailable.setReason("NoMatch: No message fits the criteria from the message-selector.");
-			return noMessagesAvailable;
-		} else
-			return null;
-	}
+	@Mapping(target = "messageMetaData", source = "messages")
+	@Mapping(target = "msgAttributes", ignore = true)
+	MsgStatusListType mapMsgStatusListType(XtaMessageMetaDataListing listing);
+
+	@Mapping(target = "msgBoxRequestID", constant = REQUEST_ID)
+	@Mapping(target = "itemsPending", ignore = true)
+	@Mapping(target = "noMessageAvailable.reason", source = "errorString")
+	MsgBoxResponseType mapMsgBoxResponseTypeError(String errorString);
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
index f08a8c217002b379e736cb5d9474fca6fb6d1790..e48bf9962d1303af0170afcd07cf40cd62bb4349 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
@@ -2,6 +2,7 @@ package de.ozgcloud.xta.test.app.model;
 
 import java.math.BigInteger;
 
+import jakarta.annotation.Nullable;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
@@ -12,7 +13,10 @@ import lombok.Builder;
 @Builder(toBuilder = true)
 public record XtaMessageMetaData(
 		@NotBlank String service,
-		@NotNull BusinessScenario businessScenario,
+		@NotNull @NotBlank String businessScenarioCode,
+		@Nullable String businessScenarioName,
+		@Nullable String businessScenarioListUri,
+		@Nullable String businessScenarioListVersionId,
 		@NotBlank String messageTypeCode,
 		@NotBlank String messageTypePayloadSchema,
 		@NotBlank String messageId,
@@ -20,12 +24,4 @@ public record XtaMessageMetaData(
 		@NotNull @Valid Identifier readerIdentifier,
 		@PositiveOrZero BigInteger messageSize
 ) {
-	public record BusinessScenario(
-			@NotBlank String businessScenarioCode,
-			String name,
-			String listURI,
-			String listVersionID,
-			boolean isDefinedCode
-	) {
-	}
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java
index 76c57823e8df95ce5512f1b7b8ff25c80df971dd..72f1977c4b282334d6acccef5a0230b29997f381 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java
@@ -12,7 +12,6 @@ import lombok.Builder;
 
 @Builder
 public record XtaMessageMetaDataListing(
-		@NotBlank String requestId,
 		@NotNull @PositiveOrZero BigInteger pendingMessageCount,
 		@NotNull @Valid List<XtaMessageMetaData> messages
 ) {
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
new file mode 100644
index 0000000000000000000000000000000000000000..279014fb4fe85325d03b34115d211f87eebadc8a
--- /dev/null
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.xta.test.app.model;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+
+import lombok.Builder;
+
+@Builder
+public record XtaMessageMetaDataListingRequest(
+		@NotBlank String clientIdentifierValue,
+		@Positive int maxListItems
+) {
+}
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 6fd385701407e9b8b5e4e206d4b6cd371d276ab7..cc840a1b16f487a152ee8327e7153112941732bb 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
@@ -12,7 +12,6 @@ import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.xta.test.app.model.XtaMessage;
-import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
 import de.ozgcloud.xta.test.app.service.ParameterValidatorService;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
@@ -21,7 +20,6 @@ import de.ozgcloud.xta.test.app.service.XtaParameter;
 import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
 
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
-import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgSelector;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType;
@@ -39,7 +37,6 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 
 	private final RequestMapper requestMapper;
 	private final ResponseMapper responseMapper;
-	private final XtaIdGenerator xtaIdGenerator;
 	private final XtaMessageService messageService;
 
 	/*
@@ -110,24 +107,19 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		log.info("Executing operation getStatusList");
 		validateGetStatusListRequest(statusListRequest);
 
-		String msgBoxRequestId = xtaIdGenerator.generateRequestId().toString();
-		MsgStatusListType statusListResponse = new MsgStatusListType();
-
 		if (validator.isNotNull(statusListRequest.getMsgSelector(), "msgSelector")) {
-			msgBoxResponseHeader.value = createInvalidSearchArgsResponseHeader(msgBoxRequestId);
-			return statusListResponse;
+			msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseTypeError(
+					"SearchArgsInvalid: This test server doesn't support message selection in the 'getStatusList' operation.");
+			return new MsgStatusListType();
 		}
 
-		int maxListItems = getMaxListItemsOrThrow(statusListRequest);
-		XtaMessageMetaDataListing messageMetaDataListing = messageService.getStatusList(msgBoxRequestId, maxListItems);
-		messageMetaDataListing.messages().forEach(
-				m -> statusListResponse.getMessageMetaData().add(responseMapper.mapMessageMetaDataFromXtaMessageMetaData(m))
-		);
-
-		msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(messageMetaDataListing);
-		return statusListResponse;
+		var request = requestMapper.mapMessageMetaDataListingRequest(statusListRequest, authorIdentifier);
+		var listing = messageService.getStatusList(request);
+		msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseType(listing);
+		return responseMapper.mapMsgStatusListType(listing);
 	}
 
+
 	private void validateGetStatusListRequest(MsgBoxStatusListRequestType statusListRequest) throws XTAWSTechnicalProblemException {
 		if (!(
 				validator.isNotNull(statusListRequest.getListForm(), "listForm")
@@ -149,15 +141,6 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		}
 	}
 
-	private MsgBoxResponseType createInvalidSearchArgsResponseHeader(String msgBoxRequestId) {
-		var responseHeader = new MsgBoxResponseType();
-		responseHeader.setMsgBoxRequestID(msgBoxRequestId);
-		var noMessagesAvailable = new MsgBoxResponseType.NoMessageAvailable();
-		noMessagesAvailable.setReason("SearchArgsInvalid: This test server doesn't support message selection in the 'getStatusList' operation.");
-		responseHeader.setNoMessageAvailable(noMessagesAvailable);
-		return responseHeader;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see genv3.de.xoev.transport.xta.x211.MsgBoxPortType#getNextMessage(genv3.eu.osci.ws.x2008.x05.transport.
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 cd8315d8baab8b9bfe69bc21dbd028dbe182b717..6889933d45aaa11ed521fd919822033d2ae822f1 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
@@ -9,6 +9,7 @@ import de.ozgcloud.xta.test.app.data.XtaMessageRepository;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
+import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
 import lombok.RequiredArgsConstructor;
 
 @Service
@@ -20,11 +21,12 @@ public class XtaMessageService {
 		messageRepository.save(message);
 	}
 
-	public XtaMessageMetaDataListing getStatusList(String requestId, int maxListItems) {
+	public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) {
 		return XtaMessageMetaDataListing.builder()
-				.requestId(requestId)
-				.pendingMessageCount(messageRepository.count())
-				.messages(getMetaData(messageRepository.findAllLimitedTo(maxListItems)))
+				.pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifierValue()))
+				.messages(getMetaData(messageRepository.findByReaderIdentifierValueLimitedTo(
+						listingRequest.clientIdentifierValue(),
+						listingRequest.maxListItems())))
 				.build();
 	}
 
diff --git a/src/main/resources/wsdl/XTA.wsdl b/src/main/resources/wsdl/XTA.wsdl
index fe3599a9482dcef7346e5079f534b57055f67fc1..069b63877c8ac674d9d549d8c43ad3db58723032 100644
--- a/src/main/resources/wsdl/XTA.wsdl
+++ b/src/main/resources/wsdl/XTA.wsdl
@@ -15,7 +15,7 @@
           <sp:MustSupportRefIssuerSerial/>
           <sp:MustSupportRefThumbprint/>
           <sp:MustSupportRefEncryptedKey/>
-          <sp:RequireSignatureConfirmation/>
+          <!-- <sp:RequireSignatureConfirmation/> -->
         </wsp:Policy>
       </sp:Wss11>
       <sp:Trust13>
diff --git a/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java
index 1a5b149807682d85c2f95aa789aef418ac916094..9aca5302125f5629e9c99543858c0ac7b6c7abee 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java
@@ -1,9 +1,12 @@
 package de.ozgcloud.xta.test.app.data;
 
-import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.*;
+import static de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory.*;
+import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 import java.util.List;
+import java.util.stream.Stream;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -11,23 +14,25 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
 
-import de.ozgcloud.xta.test.app.factory.XtaFileTestFactory;
-import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory;
+import de.ozgcloud.xta.test.app.mapper.XtaFileTestFactory;
+import de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory;
+import de.ozgcloud.xta.test.app.model.Identifier;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
+import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory;
 
 public class XtaMessageRepositoryTest {
 
+	@Spy
+	@InjectMocks
 	private XtaMessageRepository xtaMessageRepository;
 
 	@DisplayName("save")
 	@Nested
 	class TestSave {
-		@BeforeEach
-		void beforeEach() {
-			xtaMessageRepository = new XtaMessageRepository();
-		}
 
 		@Test
 		void shouldSaveMessage() {
@@ -73,13 +78,12 @@ public class XtaMessageRepositoryTest {
 
 		@BeforeEach
 		void beforeEach() {
-			messageFile = XtaFileTestFactory.createXtaFile();
-			attachmentFile = XtaFileTestFactory.createXtaFile();
-			XtaMessage message = XtaMessageTestFactory.createBuilder(MESSAGE_ID)
+			messageFile = XtaFileTestFactory.create();
+			attachmentFile = XtaFileTestFactory.create();
+			var message = XtaMessageTestFactory.createBuilder(MESSAGE_ID)
 					.messageFile(messageFile)
 					.attachmentFiles(List.of(attachmentFile))
 					.build();
-			xtaMessageRepository = new XtaMessageRepository();
 			xtaMessageRepository.save(message);
 		}
 
@@ -95,12 +99,12 @@ public class XtaMessageRepositoryTest {
 		}
 	}
 
-	@DisplayName("find all limited to")
+	@DisplayName("find by reader identifier value limited to")
 	@Nested
-	class TestFindAllLimitedTo {
+	class TestFindByReaderIdentifierValueLimitedTo {
+
 		@BeforeEach
 		void beforeEach() {
-			xtaMessageRepository = new XtaMessageRepository();
 			xtaMessageRepository.save(XtaMessageTestFactory.create("1"));
 			xtaMessageRepository.save(XtaMessageTestFactory.create("2"));
 			xtaMessageRepository.save(XtaMessageTestFactory.create("3"));
@@ -110,7 +114,7 @@ public class XtaMessageRepositoryTest {
 		@ParameterizedTest
 		@ValueSource(ints = { 0, 1, 2 })
 		void shouldReturnLimit(int limit) {
-			var result = xtaMessageRepository.findAllLimitedTo(limit);
+			var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit);
 
 			assertThat(result).hasSize(limit);
 		}
@@ -119,27 +123,81 @@ public class XtaMessageRepositoryTest {
 		@ParameterizedTest
 		@ValueSource(ints = { 3, 4, 5 })
 		void shouldReturnAll(int limit) {
-			var result = xtaMessageRepository.findAllLimitedTo(limit);
+			var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit);
 
 			assertThat(result).hasSize(3);
 		}
 
+		@DisplayName("should not find any with unknown reader identifier")
+		@Test
+		void shouldNotFindAnyWithUnknownReaderIdentifier() {
+			var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo("unknown", 1);
+
+			assertThat(result).isEmpty();
+		}
+
+	}
+
+	@DisplayName("count by reader identifier value")
+	@Nested
+	class TestCountByReaderIdentifierValue {
+		@BeforeEach
+		void beforeEach() {
+			doReturn(Stream.of(XtaMessageTestFactory.create("1"), XtaMessageTestFactory.create("2"),
+					XtaMessageTestFactory.create("3"))).when(xtaMessageRepository).findByReaderIdentifierValue(READER_IDENTIFIER.value());
+		}
+
+		@DisplayName("should return")
+		@Test
+		void shouldReturn() {
+			var count = xtaMessageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value());
+
+			assertThat(count).isEqualTo(3);
+		}
+
 	}
 
-	@DisplayName("count")
+	@DisplayName("find by reader identifier value")
 	@Nested
-	class TestCount {
+	class TestFindByReaderIdentifierValue {
+		private static final String OTHER_READER_IDENTIFIER = "readerIdentifier";
+
 		@BeforeEach
 		void beforeEach() {
 			xtaMessageRepository = new XtaMessageRepository();
 			xtaMessageRepository.save(XtaMessageTestFactory.create("1"));
 			xtaMessageRepository.save(XtaMessageTestFactory.create("2"));
 			xtaMessageRepository.save(XtaMessageTestFactory.create("3"));
+			xtaMessageRepository.save(XtaMessageTestFactory.createBuilder()
+					.metaData(XtaMessageMetaDataTestFactory.createBuilder()
+							.readerIdentifier(Identifier.builder().value(OTHER_READER_IDENTIFIER).build())
+							.build())
+					.build());
+		}
+
+		@DisplayName("should return message for reader identifier")
+		@Test
+		void shouldReturnMessageForReaderIdentifier() {
+			var result = xtaMessageRepository.findByReaderIdentifierValue(READER_IDENTIFIER.value()).toList();
+
+			assertThat(result).hasSize(3);
 		}
 
+		@DisplayName("should return messages for other reader identifier")
 		@Test
-		void shouldReturnCount() {
-			assertThat(xtaMessageRepository.count()).isEqualTo(3);
+		void shouldReturnMessagesForOtherReaderIdentifier() {
+			var result = xtaMessageRepository.findByReaderIdentifierValue(OTHER_READER_IDENTIFIER).toList();
+
+			assertThat(result).hasSize(1);
 		}
+
+		@DisplayName("should return no messages for unknown reader identifier")
+		@Test
+		void shouldReturnNoMessagesForUnknownReaderIdentifier() {
+			var result = xtaMessageRepository.findByReaderIdentifierValue("unknown").toList();
+
+			assertThat(result).isEmpty();
+		}
+
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaFileTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaFileTestFactory.java
index 47b8ae9ef35612880c11e46261855bcab8a9aa7b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaFileTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaFileTestFactory.java
@@ -1,26 +0,0 @@
-package de.ozgcloud.xta.test.app.factory;
-
-import java.io.File;
-import java.math.BigInteger;
-
-import de.ozgcloud.xta.test.app.model.XtaFile;
-
-public class XtaFileTestFactory {
-	public static final String NAME = "Test_File";
-	public static final String XTA_CONTENT = "slkafj3jifsdasx";
-	public static final String ZIP_CONTENT_TYPE = "application/zip";
-
-	public static XtaFile createXtaFile() {
-		return createXtaFileBuilder().build();
-	}
-
-	public static XtaFile.XtaFileBuilder createXtaFileBuilder() {
-		File tfile = TempFileTestFactory.createFile(XTA_CONTENT);
-		return XtaFile.builder()
-				.name(NAME)
-				.contentType(ZIP_CONTENT_TYPE)
-				.file(tfile)
-				.size(BigInteger.valueOf(tfile.getTotalSpace()));
-	}
-
-}
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 deee01f77108feed12e997f1916167046f64eab3..2fb00a4a9b63586c24195e4b7228d4dd8cbdc332 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
@@ -6,6 +6,7 @@ import de.ozgcloud.xta.test.app.model.Identifier;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 
 public class XtaMessageMetaDataTestFactory {
+	public static final String DEFAULT_MESSAGE_ID = "defaultMessageId";
 	public static final Identifier AUTHOR_IDENTIFIER = createIdentifier("author", "AUTHOR");
 	public static final Identifier READER_IDENTIFIER = createIdentifier("reader", "READER");
 	public static final String SERVICE = "Service";
@@ -15,39 +16,31 @@ 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();
+	}
 
 	public static XtaMessageMetaData create(String messageId) {
-		return createBuilder(messageId).build();
+		return createBuilder()
+				.messageId(messageId)
+				.build();
 	}
 
-	public static XtaMessageMetaData.XtaMessageMetaDataBuilder createBuilder(String messageId) {
+	public static XtaMessageMetaData.XtaMessageMetaDataBuilder createBuilder() {
 		return XtaMessageMetaData.builder()
-				.messageId(messageId)
+				.messageId(DEFAULT_MESSAGE_ID)
 				.authorIdentifier(AUTHOR_IDENTIFIER)
 				.readerIdentifier(READER_IDENTIFIER)
 				.service(SERVICE)
-				.businessScenario(createUndefinedBusinessScenario())
+				.businessScenarioCode(BUSINESS_SCENARIO_CODE)
+				.businessScenarioName(BUSINESS_SCENARIO_NAME)
+				.businessScenarioListUri(BUSINESS_SCENARIO_LIST_URI)
+				.businessScenarioListVersionId(BUSINESS_SCENARIO_LIST_VERSION_ID)
 				.messageTypeCode(MESSAGE_TYPE_CODE)
 				.messageTypePayloadSchema(MESSAGE_PAYLOAD_SCHEMA)
-				.messageSize(BigInteger.ZERO);
-	}
-
-	public static XtaMessageMetaData.BusinessScenario createDefinedBusinessScenario() {
-		return new XtaMessageMetaData.BusinessScenario(
-				BUSINESS_SCENARIO_CODE,
-				BUSINESS_SCENARIO_NAME,
-				BUSINESS_SCENARIO_LIST_URI,
-				BUSINESS_SCENARIO_LIST_VERSION_ID,
-				true);
-	}
-
-	public static XtaMessageMetaData.BusinessScenario createUndefinedBusinessScenario() {
-		return new XtaMessageMetaData.BusinessScenario(
-				BUSINESS_SCENARIO_CODE,
-				null,
-				null,
-				null,
-				false);
+				.messageSize(MESSAGE_SIZE);
 	}
 
 	private static Identifier createIdentifier(String value, String category) {
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageTestFactory.java
index 62a388203029dc65a539bbf3ad9983ae8dc681db..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageTestFactory.java
@@ -1,21 +0,0 @@
-package de.ozgcloud.xta.test.app.factory;
-
-import java.util.List;
-
-import de.ozgcloud.xta.test.app.model.XtaMessage;
-
-public class XtaMessageTestFactory {
-	public static final String MESSAGE_ID_1 = "status_1";
-	public static final String MESSAGE_ID_2 = "status_2";
-
-	public static XtaMessage create(String messageId) {
-		return createBuilder(messageId).build();
-	}
-
-	public static XtaMessage.XtaMessageBuilder createBuilder(String messageId) {
-		return XtaMessage.builder()
-				.metaData(XtaMessageMetaDataTestFactory.create(messageId))
-				.messageFile(XtaFileTestFactory.createXtaFile())
-				.attachmentFiles(List.of(XtaFileTestFactory.createXtaFile()));
-	}
-}
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4f6486898ee9d44073323f558972eb9b6f9ab28
--- /dev/null
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java
@@ -0,0 +1,25 @@
+package de.ozgcloud.xta.test.app.mapper;
+
+
+import static de.ozgcloud.xta.test.app.service.MessageMetaDataTestFactory.*;
+
+import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
+import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
+
+public class PartyTypeTestFactory {
+
+	public static PartyType create() {
+		var partyIdentifier = new PartyType();
+		partyIdentifier.setIdentifier(createIdentifier());
+		return partyIdentifier;
+	}
+
+	private static PartyIdentifierType createIdentifier() {
+		var identifier = new PartyIdentifierType();
+		identifier.setName(READER_IDENTIFIER.getName());
+		identifier.setCategory(READER_IDENTIFIER.getCategory());
+		identifier.setValue(READER_IDENTIFIER.getValue());
+		return identifier;
+	}
+
+}
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 e835fb1d983fe6eed6aaa9e8f8155017eb11bd91..ebeed8da5bf28ba28b410a50b00032b59e554bdc 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
@@ -1,6 +1,7 @@
 package de.ozgcloud.xta.test.app.mapper;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*;
+import static org.assertj.core.api.Assertions.*;
 
 import java.nio.file.Files;
 
@@ -11,6 +12,7 @@ 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 lombok.SneakyThrows;
+
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -18,13 +20,23 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
 
-import de.ozgcloud.xta.test.app.factory.AttributedURITypeTestFactory;
-import de.ozgcloud.xta.test.app.factory.ContentTypeTestFactory;
-import de.ozgcloud.xta.test.app.factory.GenericContentContainerTestFactory;
-import de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory;
-import de.ozgcloud.xta.test.app.factory.QualifierTypeBusinessScenarioTestFactory;
 import de.ozgcloud.xta.test.app.model.Identifier;
 import de.ozgcloud.xta.test.app.model.XtaFile;
+import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
+import de.ozgcloud.xta.test.app.service.AttributedURITypeTestFactory;
+import de.ozgcloud.xta.test.app.service.ContentTypeTestFactory;
+import de.ozgcloud.xta.test.app.service.GenericContentContainerTestFactory;
+import de.ozgcloud.xta.test.app.service.MessageMetaDataTestFactory;
+import de.ozgcloud.xta.test.app.service.MsgBoxStatusListRequestTypeTestFactory;
+import de.ozgcloud.xta.test.app.service.QualifierTypeBusinessScenarioTestFactory;
+import genv3.de.xoev.transport.xta.x211.ContentType;
+import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
+import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
+import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType;
+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 lombok.SneakyThrows;
 
 public class RequestMapperTest {
 
@@ -107,13 +119,12 @@ public class RequestMapperTest {
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
 			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
-			var mappedBusinessScenario = xtaMessageMetaData.businessScenario();
 
-			assertThat(mappedBusinessScenario.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
-			assertThat(mappedBusinessScenario.name()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME);
-			assertThat(mappedBusinessScenario.listURI()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_URI);
-			assertThat(mappedBusinessScenario.listVersionID()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID);
-			assertThat(mappedBusinessScenario.isDefinedCode()).isTrue();
+			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
+			assertThat(xtaMessageMetaData.businessScenarioName()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME);
+			assertThat(xtaMessageMetaData.businessScenarioListUri()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_URI);
+			assertThat(xtaMessageMetaData.businessScenarioListVersionId()).isEqualTo(
+					QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID);
 		}
 
 		@DisplayName("Should map an undefined business scenario from MessageMetaData")
@@ -123,10 +134,9 @@ public class RequestMapperTest {
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
 			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
-			var mappedBusinessScenario = xtaMessageMetaData.businessScenario();
 
-			assertThat(mappedBusinessScenario.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
-			assertThat(mappedBusinessScenario.isDefinedCode()).isFalse();
+			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
+			assertThat(xtaMessageMetaData.businessScenarioListUri()).isNull();
 		}
 	}
 
@@ -156,4 +166,67 @@ public class RequestMapperTest {
 		}
 	}
 
+	@Nested
+	class MapMaxListItems {
+		private MsgBoxStatusListRequestType fetchRequest;
+
+		@DisplayName("Should map max list items from MsgBoxStatusListRequestType")
+		@Test
+		void shouldMapMaxListItems() {
+			fetchRequest = MsgBoxStatusListRequestTypeTestFactory.create(10);
+
+			var maxListItems = requestMapper.mapMaxListItems(fetchRequest);
+
+			assertThat(maxListItems).isEqualTo(10);
+		}
+
+		@DisplayName("Should map unsupported negative max list items value to maximum integer value")
+		@Test
+		void shouldMapMaxListItemsToMaxValue() {
+			fetchRequest = MsgBoxStatusListRequestTypeTestFactory.create(-1);
+
+			var maxListItems = requestMapper.mapMaxListItems(fetchRequest);
+
+			assertThat(maxListItems).isEqualTo(Integer.MAX_VALUE);
+		}
+
+		@DisplayName("Should map unsupported large max list items value to maximum integer value")
+		@Test
+		void shouldMapMaxListItemsToMaxValueWhenOverflowing() {
+			fetchRequest = MsgBoxStatusListRequestTypeTestFactory.create(Long.MAX_VALUE);
+
+			var maxListItems = requestMapper.mapMaxListItems(fetchRequest);
+
+			assertThat(maxListItems).isEqualTo(Integer.MAX_VALUE);
+		}
+	}
+
+	@DisplayName("map message meta data listing request")
+	@Nested
+	class TestMapMessageMetaDataListingRequest {
+		private static final int MAX_LIST_ITEMS = 10;
+
+		@DisplayName("should map client identifier value")
+		@Test
+		void shouldMapClientIdentifierValue() {
+			var result = doMapping();
+
+			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+		}
+
+		@DisplayName("should map max list items")
+		@Test
+		void shouldMaxMaxListItems() {
+			var result = doMapping();
+
+			assertThat(result.maxListItems()).isEqualTo(MAX_LIST_ITEMS);
+		}
+
+		private XtaMessageMetaDataListingRequest doMapping() {
+			return requestMapper.mapMessageMetaDataListingRequest(MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS),
+					PartyTypeTestFactory.create());
+		}
+
+	}
+
 }
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 8b96fa6f9fa7154a4e4f93c0c7e6833e7dd9526b..655a8bd363dd9ffb0c7f779cd161c75e0e5bcdd4 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.mapper.ResponseMapper.*;
+import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 
 import java.math.BigInteger;
@@ -19,121 +21,51 @@ import de.ozgcloud.xta.test.app.model.Identifier;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
+import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory;
 import genv3.de.xoev.transport.xta.x211.ContentType;
-import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
+import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType;
+import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
+import genv3.eu.osci.ws.x2014.x10.transport.QualifierType;
 import lombok.SneakyThrows;
 
 public class ResponseMapperTest {
 
 	private final ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class);
 
+	@DisplayName("map PartyIdentifierType")
 	@Nested
-	class MapMessageMetaDataFromXtaMessageMetaData {
-		public static final String MESSAGE_ID = "messageId";
+	class TestMapPartyIdentifierType {
 
-		private XtaMessageMetaData xtaMessageMetaData;
-
-		@DisplayName("should map messageMetaData")
+		@DisplayName("should map type")
 		@Test
-		void shouldMapMessageId() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID);
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
+		void shouldMapType() {
+			var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER);
 
-			assertThat(messageMetaData.getMsgIdentification().getMessageID().getValue()).isEqualTo(MESSAGE_ID);
-			assertThat(messageMetaData.getQualifier().getService()).isEqualTo(XtaMessageMetaDataTestFactory.SERVICE);
-			assertThat(messageMetaData.getMsgSize()).isEqualTo(xtaMessageMetaData.messageSize());
+			assertThat(result.getType()).isEqualTo(IDENTIFIER_TYPE);
 		}
 
-		@DisplayName("should map defined business scenario")
+		@DisplayName("should map value")
 		@Test
-		void shouldMapDefinedBusinessScenario() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.createBuilder(MESSAGE_ID)
-					.businessScenario(XtaMessageMetaDataTestFactory.createDefinedBusinessScenario())
-					.build();
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var businessScenario = messageMetaData.getQualifier().getBusinessScenario();
+		void shouldMapValue() {
+			var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER);
 
-			assertThat(businessScenario.getDefined().getCode()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_CODE);
-			assertThat(businessScenario.getDefined().getName()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_NAME);
-			assertThat(businessScenario.getDefined().getListURI()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_LIST_URI);
-			assertThat(businessScenario.getDefined().getListVersionID()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID);
-			assertThat(businessScenario.getUndefined()).isNull();
+			assertThat(result.getValue()).isEqualTo(AUTHOR_IDENTIFIER.value());
 		}
 
-		@DisplayName("should map undefined business scenario")
+		@DisplayName("should map category")
 		@Test
-		void shouldMapUndefinedBusinessScenario() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.createBuilder(MESSAGE_ID)
-					.businessScenario(XtaMessageMetaDataTestFactory.createUndefinedBusinessScenario())
-					.build();
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var businessScenario = messageMetaData.getQualifier().getBusinessScenario();
+		void shouldMapCategory() {
+			var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER);
 
-			assertThat(businessScenario.getDefined()).isNull();
-			assertThat(businessScenario.getUndefined()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_CODE);
+			assertThat(result.getCategory()).isEqualTo(AUTHOR_IDENTIFIER.category());
 		}
 
-		@DisplayName("should map qualifier message type")
+		@DisplayName("should map name")
 		@Test
-		void shouldMapMessageType() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID);
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var messageType = messageMetaData.getQualifier().getMessageType();
+		void shouldMapName() {
+			var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER);
 
-			assertThat(messageType.getCode()).isEqualTo(XtaMessageMetaDataTestFactory.MESSAGE_TYPE_CODE);
-			assertThat(messageType.getPayloadSchema()).isEqualTo(XtaMessageMetaDataTestFactory.MESSAGE_PAYLOAD_SCHEMA);
-			assertThat(messageType.getListURI()).isEqualTo(ResponseMapper.MESSAGE_TYPE_LIST_URI);
-			assertThat(messageType.getListVersionID()).isEqualTo(ResponseMapper.MESSAGE_TYPE_LIST_VERSION_ID);
-		}
-
-		@DisplayName("should map author and reader identifier")
-		@Test
-		void shouldMapIdentifier() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID);
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var authorIdentifier = messageMetaData.getOriginators().getAuthor().getIdentifier();
-			var readerIdentifier = messageMetaData.getDestinations().getReader().getIdentifier();
-
-			assertIdentifiersAreEqual(authorIdentifier, XtaMessageMetaDataTestFactory.AUTHOR_IDENTIFIER);
-			assertIdentifiersAreEqual(readerIdentifier, XtaMessageMetaDataTestFactory.READER_IDENTIFIER);
-		}
-
-		@DisplayName("should default sender identifier")
-		@Test
-		void shouldSetDefaultSenderIdentifier() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID);
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var senderIdentifier = messageMetaData.getOriginators().getSender().getIdentifier();
-
-			assertIdentifiersAreEqual(senderIdentifier, ResponseMapper.SENDER_IDENTIFIER);
-		}
-
-		void assertIdentifiersAreEqual(PartyIdentifierType identifierType, Identifier identifier) {
-			assertThat(identifierType.getName()).isEqualTo(identifier.name());
-			assertThat(identifierType.getCategory()).isEqualTo(identifier.category());
-			assertThat(identifierType.getValue()).isEqualTo(identifier.value());
-			assertThat(identifierType.getType()).isEqualTo(ResponseMapper.IDENTIFIER_TYPE);
-		}
-
-		@DisplayName("should set default delivery attributes")
-		@Test
-		void shouldSetDefaultDeliveryAttributes() {
-			xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID);
-
-			var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData);
-			var deliveryAttributes = messageMetaData.getDeliveryAttributes();
-
-			assertThat(deliveryAttributes).isNotNull();
-			assertThat(deliveryAttributes.getDelivery()).isNotNull();
-			assertThat(deliveryAttributes.getInitialFetch()).isNotNull();
-			assertThat(deliveryAttributes.getInitialSend()).isNotNull();
-			assertThat(deliveryAttributes.getOrigin()).isNotNull();
+			assertThat(result.getName()).isEqualTo(AUTHOR_IDENTIFIER.name());
 		}
 	}
 
@@ -144,8 +76,8 @@ public class ResponseMapperTest {
 
 		@BeforeEach
 		void beforeEach() {
-			messageXtaFile = XtaFileTestFactory.createXtaFile();
-			attachmentXtaFile = XtaFileTestFactory.createXtaFile();
+			messageXtaFile = XtaFileTestFactory.create();
+			attachmentXtaFile = XtaFileTestFactory.create();
 		}
 
 		@DisplayName("should map generic content container from xta message")
@@ -177,39 +109,275 @@ public class ResponseMapperTest {
 		}
 	}
 
+	@DisplayName("map MsgBoxResponseType error")
 	@Nested
-	class MapMsgBoxResponseTypeFromXtaMessageMetaDataListing {
-		private XtaMessageMetaDataListing xtaMessageMetaDataListing;
+	class TestMapMsgBoxResponseTypeError {
+		private static final String ERROR_STRING = "some error";
 
-		@DisplayName("should have no messages available when mapping empty XtaMetaDataListing")
+		@DisplayName("should map no message available reason")
 		@Test
-		void shouldHaveNoMessageAvailable() {
-			xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
-					.requestId("requestId")
-					.pendingMessageCount(BigInteger.ZERO)
-					.messages(List.of())
-					.build();
-
-			var msgBoxResponseType = mapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(xtaMessageMetaDataListing);
+		void shouldMapNoMessageAvailableReason() {
+			var result = mapper.mapMsgBoxResponseTypeError(ERROR_STRING);
 
-			assertThat(msgBoxResponseType.getNoMessageAvailable()).isNotNull();
-			assertThat(msgBoxResponseType.getNoMessageAvailable().getReason()).startsWith("NoMatch");
-			assertThat(msgBoxResponseType.getItemsPending()).isNull();
+			assertThat(result.getNoMessageAvailable().getReason()).isEqualTo(ERROR_STRING);
 		}
 
-		@DisplayName("should have items pending when mapping filled XtaMetaDatalisting")
+		@DisplayName("should map request id")
 		@Test
-		void shouldHaveItemsPending() {
+		void shouldMapRequestId() {
+			var result = mapper.mapMsgBoxResponseTypeError(ERROR_STRING);
+
+			assertThat(result.getMsgBoxRequestID()).isEqualTo(ResponseMapper.REQUEST_ID);
+		}
+	}
+
+	@DisplayName("map MsgStatusListType")
+	@Nested
+	class TestMapMsgStatusListType {
+		private XtaMessageMetaDataListing xtaMessageMetaDataListing;
+
+		@BeforeEach
+		void beforeEach() {
 			xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
-					.requestId("requestId")
 					.pendingMessageCount(BigInteger.ONE)
-					.messages(List.of(XtaMessageMetaDataTestFactory.create("messageId")))
+					.messages(List.of(XtaMessageMetaDataTestFactory.create()))
 					.build();
+		}
+
+		@DisplayName("should map message meta data")
+		@Test
+		void shouldMapMessageMetaData() {
+			var result = mapper.mapMsgStatusListType(xtaMessageMetaDataListing);
+
+			assertThat(result.getMessageMetaData()).hasSize(1);
+		}
+
+		@DisplayName("should map message size")
+		@Test
+		void shouldMapMessageSize() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getMsgSize()).isEqualTo(MESSAGE_SIZE);
+		}
+
+		@DisplayName("should map service")
+		@Test
+		void shouldMapService() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getQualifier().getService()).isEqualTo(SERVICE);
+		}
+
+		@DisplayName("with defined business scenario")
+		@Nested
+		class TestWithDefinedBusinessScenario {
+
+			@BeforeEach
+			void beforeEach() {
+				xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
+						.pendingMessageCount(BigInteger.ONE)
+						.messages(List.of(XtaMessageMetaDataTestFactory.create()))
+						.build();
+			}
+
+			@DisplayName("should map code")
+			@Test
+			void shouldMapCode() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getDefined().getCode()).isEqualTo(BUSINESS_SCENARIO_CODE);
+			}
+
+			@DisplayName("should map name")
+			@Test
+			void shouldMapName() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getDefined().getName()).isEqualTo(BUSINESS_SCENARIO_NAME);
+			}
+
+			@DisplayName("should map list uri")
+			@Test
+			void shouldMapListUri() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getDefined().getListURI()).isEqualTo(BUSINESS_SCENARIO_LIST_URI);
+			}
+
+			@DisplayName("should map list version id")
+			@Test
+			void shouldMapListVersionId() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getDefined().getListVersionID()).isEqualTo(BUSINESS_SCENARIO_LIST_VERSION_ID);
+			}
+		}
+
+		@DisplayName("with undefined business scenario")
+		@Nested
+		class TestWithUndefinedBusinessScenario {
+			@BeforeEach
+			void mock() {
+				xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
+						.pendingMessageCount(BigInteger.ONE)
+						.messages(List.of(XtaMessageMetaDataTestFactory.createBuilder()
+								.businessScenarioListUri(null)
+								.build()))
+						.build();
+
+			}
+
+			@DisplayName("should map code")
+			@Test
+			void shouldMapCode() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getUndefined()).isEqualTo(BUSINESS_SCENARIO_CODE);
+			}
+
+			@DisplayName("should map defined null")
+			@Test
+			void shouldMapDefinedNull() {
+				var result = mapFirstMessageMetaDataBusinessScenario();
+
+				assertThat(result.getDefined()).isNull();
+			}
+		}
+
+		@DisplayName("should map message type code")
+		@Test
+		void shouldMapMessageTypeCode() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getQualifier().getMessageType().getCode()).isEqualTo(MESSAGE_TYPE_CODE);
+		}
+
+		@DisplayName("should map message type list uri")
+		@Test
+		void shouldMapMessageTypeListUri() {
+			var result = mapFirstMessageMetaData();
 
-			var msgBoxResponseType = mapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(xtaMessageMetaDataListing);
+			assertThat(result.getQualifier().getMessageType().getListURI()).isEqualTo(MESSAGE_TYPE_LIST_URI);
+		}
+
+		@DisplayName("should map message type list version id")
+		@Test
+		void shouldMapMessageTypeListVersionId() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getQualifier().getMessageType().getListVersionID()).isEqualTo(MESSAGE_TYPE_LIST_VERSION_ID);
+		}
+
+		@DisplayName("should map author identifier")
+		@Test
+		void shouldMapAuthorIdentifier() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getOriginators().getAuthor().getIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER));
+		}
+
+		@DisplayName("should default sender identifier")
+		@Test
+		void shouldSetDefaultSenderIdentifier() {
+			// TODO
+		}
+
+		@DisplayName("should map reader identifier")
+		@Test
+		void shouldMapReaderIdentifier() {
+			var result = mapFirstMessageMetaData();
+
+			assertThat(result.getDestinations().getReader().getIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(mapper.mapPartyIdentifierType(READER_IDENTIFIER));
+		}
+
+		@DisplayName("should set default delivery attribute delivery")
+		@Test
+		void shouldSetDefaultDeliveryAttributeDelivery() {
+			// TODO
+		}
+
+		@DisplayName("should set default delivery attribute inital fetch")
+		@Test
+		void shouldSetDefaultDeliveryAttributeInitialFetch() {
+			// TODO
+		}
+
+		private MsgStatusListType doMapping() {
+			return mapper.mapMsgStatusListType(xtaMessageMetaDataListing);
+		}
+
+		private MessageMetaData mapFirstMessageMetaData() {
+			return doMapping().getMessageMetaData().getFirst();
+		}
+
+		private QualifierType.BusinessScenario mapFirstMessageMetaDataBusinessScenario() {
+			return mapFirstMessageMetaData().getQualifier().getBusinessScenario();
+		}
+	}
+
+	@DisplayName("map MsgBoxResponseType")
+	@Nested
+	class TestMapMsgBoxResponseType {
+		private XtaMessageMetaDataListing xtaMessageMetaDataListing;
+
+		@DisplayName("with no pending messages")
+		@Nested
+		class TestWithNoPendingMessages {
+			@BeforeEach
+			void beforeEach() {
+				xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
+						.pendingMessageCount(BigInteger.ZERO)
+						.messages(List.of())
+						.build();
+			}
+
+			@DisplayName("should set no message available reason")
+			@Test
+			void shouldSetNoMessageAvailableReason() {
+				var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing);
+
+				assertThat(msgBoxResponseType.getNoMessageAvailable().getReason()).isEqualTo(ResponseMapper.NO_MESSAGES_REASON);
+			}
+
+			@DisplayName("should set items pending to null")
+			@Test
+			void shouldSetItemsPendingToNull() {
+				var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing);
+
+				assertThat(msgBoxResponseType.getItemsPending()).isNull();
+			}
+		}
 
-			assertThat(msgBoxResponseType.getItemsPending()).isEqualTo(BigInteger.ONE);
-			assertThat(msgBoxResponseType.getNoMessageAvailable()).isNull();
+		@DisplayName("with pending messages")
+		@Nested
+		class TestWithPendingMessages {
+			@BeforeEach
+			void beforeEach() {
+				xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder()
+						.pendingMessageCount(BigInteger.ONE)
+						.messages(List.of(XtaMessageMetaDataTestFactory.create()))
+						.build();
+			}
+
+			@DisplayName("should set items pending")
+			@Test
+			void shouldSetItemsPending() {
+				var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing);
+
+				assertThat(msgBoxResponseType.getItemsPending()).isEqualTo(BigInteger.ONE);
+			}
+
+			@DisplayName("should set no message available to null")
+			@Test
+			void shouldSetNoMessageAvailableToNull() {
+				var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing);
+
+				assertThat(msgBoxResponseType.getNoMessageAvailable()).isNull();
+			}
 		}
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaFileTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaFileTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..0234360c9a7aeecc579063303b7fc05e70395915
--- /dev/null
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.xta.test.app.mapper;
+
+import java.util.List;
+
+import de.ozgcloud.xta.test.app.model.XtaMessage;
+import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory;
+
+public class XtaMessageTestFactory {
+	public static final String MESSAGE_ID_1 = "status_1";
+	public static final String MESSAGE_ID_2 = "status_2";
+
+	public static XtaMessage create(String messageId) {
+		return createBuilder(messageId).build();
+	}
+
+	public static XtaMessage.XtaMessageBuilder createBuilder() {
+		return XtaMessage.builder()
+				.metaData(XtaMessageMetaDataTestFactory.create())
+				.messageFile(XtaFileTestFactory.create())
+				.attachmentFiles(List.of(XtaFileTestFactory.create()));
+	}
+
+	public static XtaMessage.XtaMessageBuilder createBuilder(String messageId) {
+		return XtaMessage.builder()
+				.metaData(XtaMessageMetaDataTestFactory.create(messageId))
+				.messageFile(XtaFileTestFactory.create())
+				.attachmentFiles(List.of(XtaFileTestFactory.create()));
+	}
+}
\ No newline at end of file
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 f1c01bd397d50d9892773d412fbbceb2b2ab920d..08fecc6dfedf7dc21599285b9f51c0fa5e85c833 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
@@ -1,6 +1,7 @@
 package de.ozgcloud.xta.test.app.service;
 
-import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.*;
+import static de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory.*;
+import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
@@ -15,9 +16,10 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
 import de.ozgcloud.xta.test.app.data.XtaMessageRepository;
-import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory;
+import de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
+import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
 
 public class XtaMessageServiceTest {
 	@Mock
@@ -47,10 +49,15 @@ public class XtaMessageServiceTest {
 
 	@Nested
 	class GetStatusList {
-		public static final String REQUEST_ID = "request_1";
+
 		private final int MAX_LIST_ITEMS = 50;
 		private final int MESSAGE_COUNT = 2;
 
+		private final XtaMessageMetaDataListingRequest messageMetaDataListingRequest = XtaMessageMetaDataListingRequest.builder()
+				.clientIdentifierValue(READER_IDENTIFIER.value())
+				.maxListItems(MAX_LIST_ITEMS)
+				.build();
+
 		private XtaMessage message1;
 		private XtaMessage message2;
 
@@ -58,15 +65,9 @@ public class XtaMessageServiceTest {
 		void beforeEach() {
 			message1 = XtaMessageTestFactory.create(MESSAGE_ID_1);
 			message2 = XtaMessageTestFactory.create(MESSAGE_ID_2);
-			when(messageRepository.findAllLimitedTo(MAX_LIST_ITEMS)).thenReturn(List.of(message1, message2));
-			when(messageRepository.count()).thenReturn(BigInteger.valueOf(MESSAGE_COUNT));
-		}
-
-		@Test
-		void shouldSetRequestId() {
-			var statusList = getStatusList();
 
-			assertThat(statusList.requestId()).isEqualTo(REQUEST_ID);
+			when(messageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), MAX_LIST_ITEMS)).thenReturn(List.of(message1, message2));
+			when(messageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value())).thenReturn(BigInteger.valueOf(MESSAGE_COUNT));
 		}
 
 		@Test
@@ -80,11 +81,11 @@ public class XtaMessageServiceTest {
 		void shouldSetPendingMessageToMessageCount() {
 			var statusList = getStatusList();
 
-			assertThat(statusList.pendingMessageCount()).isEqualTo(2);
+			assertThat(statusList.pendingMessageCount()).isEqualTo(MESSAGE_COUNT);
 		}
 
 		private XtaMessageMetaDataListing getStatusList() {
-			return service.getStatusList(REQUEST_ID, MAX_LIST_ITEMS);
+			return service.getStatusList(messageMetaDataListingRequest);
 		}
 
 	}