diff --git a/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto b/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto
index 282543d0303eaf7f5eae47245f936f1d1d75fb46..80234a7f435bc161ae2df951c7f0226d2503d9c9 100644
--- a/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto
+++ b/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto
@@ -61,6 +61,7 @@ message GrpcRueckfrageAnswer {
   string rueckfrageId = 1;
   string answerText = 2;
   repeated string attachmentFileId = 3;
+  string sentAt = 4;
 }
 
 message GrpcSendRueckfrageAnswerResponse {
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
index fc8b30283be549db5c634fdc032b169cd3017348..3684ce3c2f2c29b5dda1966a5e48bcc4d1ed0cbd 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
@@ -24,11 +24,13 @@
 package de.ozgcloud.nachrichten.antragraum;
 
 import java.time.ZonedDateTime;
+import java.util.List;
 import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import io.grpc.stub.StreamObserver;
 import lombok.RequiredArgsConstructor;
@@ -43,27 +45,25 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB
 
 	@Override
 	public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) {
-		var rueckfragen = buildGrpcRueckfrage(request.getSamlToken());
-		var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen.toList()).build();
+		var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken())
+				.map(mapper::toGrpc)
+				.map(rueckfrage -> addAnswers(request.getSamlToken(), rueckfrage));
 
-		streamObserver.onNext(response);
+		streamObserver.onNext(buildFindRueckfragenResponse(rueckfragen));
 		streamObserver.onCompleted();
 	}
 
-	Stream<GrpcRueckfrage> buildGrpcRueckfrage(String samlToken) {
-		return antragraumService.findRueckfragen(samlToken).map(mapper::toGrpc)
-				.map(rueckfrage -> addAnswers(samlToken, rueckfrage));
-
+	private GrpcRueckfrage addAnswers(String samlToken, GrpcRueckfrage rueckfrage) {
+		return rueckfrage.toBuilder().addAllAnswers(findRueckfrageAnswers(samlToken, rueckfrage.getId())).build();
 	}
 
-	private GrpcRueckfrage addAnswers(String samlToken, GrpcRueckfrage rueckfrage) {
-		return rueckfrage.toBuilder()
-				.addAllAnswers(buildGrpcRueckfrageAnswer(samlToken, rueckfrage.getId()).toList())
-				.build();
+	List<GrpcRueckfrageAnswer> findRueckfrageAnswers(String samlToken, String rueckfrageId) {
+		return antragraumService.findAnswers(samlToken, rueckfrageId).map(mapper::toRueckfrageAnswer).toList();
 	}
 
-	Stream<GrpcRueckfrageAnswer> buildGrpcRueckfrageAnswer(String samlToken, String rueckfrageId) {
-		return antragraumService.findAnswers(samlToken, rueckfrageId).map(mapper::toRueckfrageAnswer);
+	private GrpcFindRueckfragenResponse buildFindRueckfragenResponse(Stream<GrpcRueckfrage> rueckfragen) {
+		return GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen.toList()).build();
+
 	}
 
 	@Override
@@ -77,13 +77,14 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB
 		streamObserver.onCompleted();
 	}
 
-	PostfachNachricht getRueckfrage(String samlToken, String postfachNachrichtId) {
+	Rueckfrage getRueckfrage(String samlToken, String postfachNachrichtId) {
 		return antragraumService.findRueckfragen(samlToken)
-				.filter(postfachNachricht -> StringUtils.equals(postfachNachricht.getId(), postfachNachrichtId))
-				.toList().getFirst();
+				.filter(rueckfrage -> StringUtils.equals(rueckfrage.getId(), postfachNachrichtId))
+				.findFirst()
+				.orElseThrow(() -> new TechnicalException(String.format("No rueckfrage found for answer with id %s", postfachNachrichtId)));
 	}
 
-	PostfachNachricht enrichRueckfrageAnswer(PostfachNachricht answer, PostfachNachricht rueckfrage) {
+	PostfachNachricht enrichRueckfrageAnswer(PostfachNachricht answer, Rueckfrage rueckfrage) {
 		return answer.toBuilder()
 				.vorgangId(rueckfrage.getVorgangId())
 				.postfachAddress(rueckfrage.getPostfachAddress())
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
index 25500e8ea808c7e719814d097e7b25587873e8ff..a85826691734ae04456d98860d7f77c6a620fdd6 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
@@ -33,7 +33,6 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 
 @Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
 interface AntragraumNachrichtMapper {
-	String DEFAULT_STATUS = "NEU";
 
 	@Mapping(target = "mergeFrom", ignore = true)
 	@Mapping(target = "clearField", ignore = true)
@@ -53,12 +52,9 @@ interface AntragraumNachrichtMapper {
 	@Mapping(target = "answersBuilderList", ignore = true)
 	@Mapping(target = "answersList", ignore = true)
 	@Mapping(target = "answersOrBuilderList", ignore = true)
-	@Mapping(source = "sentAt", target = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss")
-	@Mapping(source = "mailBody", target = "text")
-	@Mapping(source = "subject", target = "vorgangName")
-	@Mapping(source = "attachments", target = "attachmentFileIdList")
-	@Mapping(target = "status", constant = DEFAULT_STATUS)
-	GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht);
+	@Mapping(target = "sentAt", source = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss")
+	@Mapping(target = "attachmentFileIdList", source = "attachments")
+	GrpcRueckfrage toGrpc(Rueckfrage rueckfrage);
 
 	@Mapping(target = "referencedNachricht", ignore = true)
 	@Mapping(target = "mailBody", source = "answerText")
@@ -72,7 +68,6 @@ interface AntragraumNachrichtMapper {
 	@Mapping(target = "postfachAddress", ignore = true)
 	@Mapping(target = "postfachId", ignore = true)
 	@Mapping(target = "replyOption", constant = "FORBIDDEN")
-	@Mapping(target = "sentAt", ignore = true)
 	@Mapping(target = "sentSuccessful", constant = "true")
 	@Mapping(target = "subject", constant = "Antwort") // TODO klären
 	@Mapping(target = "vorgangId", ignore = true)
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
index a8e360bb49179070e1878c31810a10d5f9eac6f0..28365c34793bf7e58cd938809bb65afc9d7184d9 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
@@ -25,6 +25,10 @@ package de.ozgcloud.nachrichten.antragraum;
 
 import static java.util.Objects.*;
 
+import java.time.ZonedDateTime;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import jakarta.annotation.PostConstruct;
@@ -34,6 +38,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
+import de.ozgcloud.nachrichten.common.vorgang.VorgangService;
 import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import lombok.RequiredArgsConstructor;
@@ -45,12 +50,7 @@ import lombok.extern.log4j.Log4j2;
 @ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
 public class AntragraumService {
 
-	static final String BAYERN_ID = "BayernID";
-
-	private final PersistPostfachNachrichtService postfachNachrichtService;
-	private final Saml2Verifier verifier;
-	private final Saml2Parser parser;
-	private final Saml2Decrypter decrypter;
+	static final String BAYERN_ID_SERVICE_KONTO_TYPE = "BayernID";
 
 	static final String USER_NOTIFICATION_TEMPLATE = """
 			Guten Tag,
@@ -63,8 +63,15 @@ public class AntragraumService {
 			Ihre digitale Verwaltung
 			""";
 
+	private final PersistPostfachNachrichtService postfachNachrichtService;
+	private final Saml2Verifier verifier;
+	private final Saml2Parser parser;
+	private final Saml2Decrypter decrypter;
+
 	private final AntragraumProperties properties;
 	private final NachrichtenManagerProperties nachrichtenManagerProperties;
+	private final RueckfrageMapper rueckfrageMapper;
+	private final VorgangService vorgangService;
 
 	@PostConstruct
 	void init() {
@@ -86,11 +93,38 @@ public class AntragraumService {
 		return USER_NOTIFICATION_TEMPLATE.formatted(getAntragsraumUrl());
 	}
 
-	public Stream<PostfachNachricht> findRueckfragen(String samlToken) {
+	public Stream<Rueckfrage> findRueckfragen(String samlToken) {
 		verifyToken(samlToken);
-		var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken));
 
-		return postfachNachrichtService.findRueckfragen(BAYERN_ID, postfachId);
+		var rueckfragen = postfachNachrichtService.findRueckfragen(BAYERN_ID_SERVICE_KONTO_TYPE, getPostfachId(samlToken))
+				.map(rueckfrageMapper::fromPostfachNachricht)
+				.map(rueckfrage -> enrichByAnswers(rueckfrage, samlToken)).toList();
+		return enrichRueckfragen(rueckfragen);
+	}
+
+	Rueckfrage enrichByAnswers(Rueckfrage rueckfrage, String samlToken) {
+		var rueckfrageBuilder = rueckfrage.toBuilder();
+
+		getFirstSentAt(findAnswers(samlToken, rueckfrage.getId()))
+				.ifPresent(firstSentAt -> rueckfrageBuilder.answeredAt(firstSentAt).status(RueckfrageStatus.ANSWERED));
+
+		return rueckfrageBuilder.build();
+	}
+
+	Optional<ZonedDateTime> getFirstSentAt(Stream<PostfachNachricht> answers) {
+		return answers.sorted(Comparator.comparing(PostfachNachricht::getSentAt)).map(PostfachNachricht::getSentAt).findFirst();
+	}
+
+	Stream<Rueckfrage> enrichRueckfragen(List<Rueckfrage> rueckfragen) {
+		if (rueckfragen.isEmpty()) {
+			return Stream.empty();
+		}
+		return addVorgangName(rueckfragen, rueckfragen.getFirst().getVorgangId());
+	}
+
+	Stream<Rueckfrage> addVorgangName(List<Rueckfrage> rueckfragen, String vorgangId) {
+		var vorgang = vorgangService.getVorgang(vorgangId);
+		return rueckfragen.stream().map(rueckfrage -> rueckfrage.toBuilder().vorgangName(vorgang.getName()).build());
 	}
 
 	public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) {
@@ -101,9 +135,8 @@ public class AntragraumService {
 
 	public Stream<PostfachNachricht> findAnswers(String samlToken, String rueckfrageId) {
 		verifyToken(samlToken);
-		var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken));
 
-		return postfachNachrichtService.findAnswers(BAYERN_ID, postfachId, rueckfrageId);
+		return postfachNachrichtService.findAnswers(BAYERN_ID_SERVICE_KONTO_TYPE, getPostfachId(samlToken), rueckfrageId);
 	}
 
 	void verifyToken(String token) {
@@ -113,4 +146,7 @@ public class AntragraumService {
 		}
 	}
 
+	String getPostfachId(String samlToken) {
+		return decrypter.decryptPostfachId(parser.parse(samlToken));
+	}
 }
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9526d0badf420305fb2c8b34af3bfedc64c498a
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java
@@ -0,0 +1,30 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+import java.time.ZonedDateTime;
+import java.util.Collections;
+import java.util.List;
+
+import de.ozgcloud.nachrichten.postfach.PostfachAddress;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder(toBuilder = true)
+class Rueckfrage {
+
+	private String id;
+	private String vorgangId;
+	private String vorgangName;
+
+	private PostfachAddress postfachAddress;
+	private ZonedDateTime sentAt;
+	private ZonedDateTime answeredAt;
+
+	@Builder.Default
+	private RueckfrageStatus status = RueckfrageStatus.NEW;
+	private String text;
+
+	@Builder.Default
+	private List<String> attachments = Collections.emptyList();
+
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..439961c766b90a6952961e916a0117210115dc63
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
+
+@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
+		unmappedTargetPolicy = ReportingPolicy.WARN, //
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+interface RueckfrageMapper {
+
+	@Mapping(target = "answeredAt", ignore = true)
+	@Mapping(target = "status", ignore = true)
+	@Mapping(target = "text", source = "mailBody")
+	@Mapping(target = "vorgangName", ignore = true)
+	Rueckfrage fromPostfachNachricht(PostfachNachricht postfachNachricht);
+
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageStatus.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..57d19462a4c20591ed619f4583318d79fe7571d2
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageStatus.java
@@ -0,0 +1,5 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+enum RueckfrageStatus {
+	NEW, ANSWERED
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/Vorgang.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/Vorgang.java
new file mode 100644
index 0000000000000000000000000000000000000000..881bcaa9be2912afa4b5c4824489875bc60b42ca
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/Vorgang.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class Vorgang {
+
+	private String id;
+	private String name;
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce9a492ae09e8f2207a848f1aa018ae4825b983c
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapper.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
+interface VorgangMapper {
+
+	Vorgang fromVorgangWithEingang(GrpcVorgangWithEingang vorgangWithEingang);
+}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/VorgangRemoteService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteService.java
similarity index 77%
rename from nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/VorgangRemoteService.java
rename to nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteService.java
index 73342e11305eeb33c6813434e3b5d8203a82ce8b..890beb2cda4f9cbc38d9f965f46beaa68040f185 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/VorgangRemoteService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteService.java
@@ -21,16 +21,19 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach;
+package de.ozgcloud.nachrichten.common.vorgang;
 
 import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.nachrichten.common.grpc.NachrichtenCallContextAttachingInterceptor;
+import de.ozgcloud.nachrichten.postfach.FindVorgangIterator;
+import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
 import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader;
 import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
 import net.devh.boot.grpc.client.inject.GrpcClient;
@@ -40,6 +43,8 @@ class VorgangRemoteService {
 
 	@GrpcClient("vorgang-manager")
 	private VorgangServiceBlockingStub vorgangServiceStub;
+	@Autowired
+	private VorgangMapper mapper;
 
 	public Stream<String> findVorgangIds(String servicekontoType, String postfachId) {
 		return buildStream(servicekontoType, postfachId).map(GrpcVorgangHeader::getId);
@@ -54,7 +59,16 @@ class VorgangRemoteService {
 		return new FindVorgangIterator(getVorgangServiceStub(), servicekontoType, postfachId);
 	}
 
+	public Vorgang getVorgang(String vorgangId) {
+		var response = getVorgangServiceStub().findVorgangWithEingang(buildFindVorgangWithEingangRequest(vorgangId));
+		return mapper.fromVorgangWithEingang(response.getVorgangWithEingang());
+	}
+
 	VorgangServiceBlockingStub getVorgangServiceStub() {
 		return vorgangServiceStub.withInterceptors(new NachrichtenCallContextAttachingInterceptor());
 	}
-}
+
+	GrpcFindVorgangWithEingangRequest buildFindVorgangWithEingangRequest(String vorgangId) {
+		return GrpcFindVorgangWithEingangRequest.newBuilder().setId(vorgangId).build();
+	}
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangService.java
new file mode 100644
index 0000000000000000000000000000000000000000..f89f448d7d5358675cb2e1187107417701012357
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/common/vorgang/VorgangService.java
@@ -0,0 +1,24 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import java.util.stream.Stream;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import lombok.RequiredArgsConstructor;
+
+@Service
+@RequiredArgsConstructor
+public class VorgangService {
+
+	@Qualifier("findVorgangRemoteService")
+	private final VorgangRemoteService remoteService;
+
+	public Stream<String> findVorgangIds(String servicekontoType, String postfachId) {
+		return remoteService.findVorgangIds(servicekontoType, postfachId);
+	}
+
+	public Vorgang getVorgang(String vorgangId) {
+		return remoteService.getVorgang(vorgangId);
+	}
+}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java
index a4d9682eb1ed6ea4437fabfeb3534b35e9ef2515..aedd1434632b2a94e75bf3ee9d9b4a94a4ea7607 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java
@@ -39,6 +39,7 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
 import de.ozgcloud.nachrichten.NachrichtenManagerConfiguration;
+import de.ozgcloud.nachrichten.common.vorgang.VorgangService;
 
 @Service
 @Primary
@@ -56,8 +57,7 @@ public class PersistPostfachNachrichtServiceImpl implements PersistPostfachNachr
 	static final String ITEM_FIELD = "item";
 
 	@Autowired
-	@Qualifier("findVorgangRemoteService")
-	private VorgangRemoteService vorgangRemoteService;
+	private VorgangService vorgangService;
 
 	@Autowired
 	@Qualifier(NachrichtenManagerConfiguration.OZG_CLOUD_COMMAND_SERVICE_NAME)
@@ -124,7 +124,7 @@ public class PersistPostfachNachrichtServiceImpl implements PersistPostfachNachr
 
 	@Override
 	public Stream<PostfachNachricht> findRueckfragen(String servicekontoType, String postfachId) {
-		return vorgangRemoteService.findVorgangIds(servicekontoType, postfachId)
+		return vorgangService.findVorgangIds(servicekontoType, postfachId)
 				.flatMap(attachedItemRemoteService::findReplyAllowedPostfachNachrichts);
 	}
 
@@ -157,12 +157,12 @@ public class PersistPostfachNachrichtServiceImpl implements PersistPostfachNachr
 
 	@Override
 	public Stream<PostfachNachricht> findAnswers(String serviceKontoType, String postfachId, String rueckfrageId) {
-		return findPostfachNachricht(serviceKontoType, postfachId, rueckfrageId)
+		return findPostfachNachricht(serviceKontoType, postfachId)
 				.filter(postfachNachricht -> hasMatchingReferenceNachrichtId(postfachNachricht, rueckfrageId));
 	}
 
-	private Stream<PostfachNachricht> findPostfachNachricht(String serviceKontoType, String postfachId, String rueckfrageId) {
-		return vorgangRemoteService.findVorgangIds(serviceKontoType, postfachId).flatMap(attachedItemRemoteService::findByVorgangId);
+	private Stream<PostfachNachricht> findPostfachNachricht(String serviceKontoType, String postfachId) {
+		return vorgangService.findVorgangIds(serviceKontoType, postfachId).flatMap(attachedItemRemoteService::findByVorgangId);
 	}
 
 	private boolean hasMatchingReferenceNachrichtId(PostfachNachricht postfachNachricht, String postfachNachrichtId) {
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
index 2d30f00558cde6cf423a3760c2e05c17bd95331d..c2783a9fbe16fea8bf94b4740b5f304e937d3547 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
@@ -71,7 +71,6 @@ public abstract class PostfachNachrichtMapper {
 		return StringBasedIdentifier.builder().postfachId(postfachId).build();
 	}
 
-	@SuppressWarnings("unchecked")
 	public GrpcPostfachMail fromMap(Map<String, Object> mailMap) {
 		var postfachMailBuilder = GrpcPostfachMail.newBuilder()
 				.setId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID))
@@ -86,8 +85,12 @@ public abstract class PostfachNachrichtMapper {
 				.setDirection(GrpcDirection.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION)))
 				.setSubject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT))
 				.setMailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY))
-				.setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION))
-				.addAllAttachment(getAttachments(mailMap));
+				.setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION));
+
+		Optional.ofNullable(mailMap.get(PostfachNachricht.FIELD_ATTACHMENTS))
+				.filter(this::doesAttachmentsExists)
+				.map(this::getAttachments)
+				.ifPresent(postfachMailBuilder::addAllAttachment);
 
 		Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD))
 				.filter(MapUtils::isNotEmpty)
@@ -97,13 +100,15 @@ public abstract class PostfachNachrichtMapper {
 		return postfachMailBuilder.build();
 	}
 
-	private Iterable<String> getAttachments(Map<String, Object> map) {
-		var attachments = map.getOrDefault(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList());
+	private boolean doesAttachmentsExists(Object attachments) {
+		return (attachments instanceof String attachment && StringUtils.isNotBlank(attachment)) || attachments instanceof Collection;
+	}
+
+	private Iterable<String> getAttachments(Object attachments) {
 		if (attachments instanceof String attachment) {
 			return Collections.singletonList(attachment);
 		}
 		return (Iterable<String>) attachments;
-
 	}
 
 	GrpcPostfachAddress buildGrpcPostfachAddress(Map<String, Object> postfachAddressMap) {
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
index e14177a773180e00b35acb87b676af648a5eb2e2..6b96cc3be43f4a2797608efb1350768c1c50f502 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
@@ -37,6 +37,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
 import io.grpc.stub.StreamObserver;
@@ -44,53 +45,50 @@ import io.grpc.stub.StreamObserver;
 class AntragraumGrpcServiceTest {
 	@Spy
 	@InjectMocks
-	private AntragraumGrpcService antragsraumGrpcService;
+	private AntragraumGrpcService grpcService;
 	@Mock
-	private AntragraumService antragraumService;
+	private AntragraumService service;
 	@Mock
-	private AntragraumNachrichtMapper mapper;
+	private AntragraumNachrichtMapper nachrichtMapper;
 
 	@Nested
 	class TestFindRueckfragen {
 
-		@Nested
-		class TestFindRueckfrageGrpc {
-			@Mock
-			private StreamObserver<GrpcFindRueckfragenResponse> streamObserver;
+		@Mock
+		private StreamObserver<GrpcFindRueckfragenResponse> streamObserver;
 
-			@BeforeEach
-			void setup() {
-				when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(PostfachNachrichtTestFactory.create()));
-				when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrageTestFactory.create());
-			}
+		@BeforeEach
+		void setup() {
+			when(service.findRueckfragen(any())).thenReturn(Stream.of(RueckfrageTestFactory.create()));
+			when(nachrichtMapper.toGrpc(any(Rueckfrage.class))).thenReturn(GrpcRueckfrageTestFactory.create());
+		}
 
-			@Test
-			void shouldCallMapper() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
+		@Test
+		void shouldCallMapper() {
+			grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
 
-				verify(mapper).toGrpc(any(PostfachNachricht.class));
-			}
+			verify(nachrichtMapper).toGrpc(any(Rueckfrage.class));
+		}
 
-			@Test
-			void shouldCallOnNext() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
+		@Test
+		void shouldCallOnNext() {
+			grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
 
-				verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class));
-			}
+			verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class));
+		}
 
-			@Test
-			void shouldCallOnCompleted() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
+		@Test
+		void shouldCallOnCompleted() {
+			grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
 
-				verify(streamObserver).onCompleted();
-			}
+			verify(streamObserver).onCompleted();
+		}
 
-			@Test
-			void shouldLoadAnswers() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
+		@Test
+		void shouldLoadAnswers() {
+			grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
 
-				verify(antragraumService).findAnswers(GrpcFindRueckfrageRequestTestFactory.SAML_TOKEN, GrpcRueckfrageTestFactory.ID);
-			}
+			verify(service).findAnswers(GrpcFindRueckfrageRequestTestFactory.SAML_TOKEN, GrpcRueckfrageTestFactory.ID);
 		}
 	}
 
@@ -100,28 +98,29 @@ class AntragraumGrpcServiceTest {
 		@Mock
 		private StreamObserver<GrpcSendRueckfrageAnswerResponse> streamObserver;
 		private PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
+		private Rueckfrage rueckfrage = RueckfrageTestFactory.create();
 
 		@BeforeEach
 		void setup() {
-			when(mapper.fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class))).thenReturn(postfachNachricht);
-			when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)))
+			when(nachrichtMapper.fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class))).thenReturn(postfachNachricht);
+			when(service.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)))
 					.thenReturn(UUID.randomUUID().toString());
-			doReturn(postfachNachricht).when(antragsraumGrpcService).enrichRueckfrageAnswer(any(), any());
-			doReturn(postfachNachricht).when(antragsraumGrpcService).getRueckfrage(any(), any());
+			doReturn(postfachNachricht).when(grpcService).enrichRueckfrageAnswer(any(), any());
+			doReturn(rueckfrage).when(grpcService).getRueckfrage(any(), any());
 		}
 
 		@Test
 		void shouldCallMapper() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
+			grpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
 
-			verify(mapper).fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class));
+			verify(nachrichtMapper).fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class));
 		}
 
 		@Test
 		void shouldGetRueckfrage() {
 			sendRueckfrageAnswer();
 
-			verify(antragsraumGrpcService).getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
+			verify(grpcService).getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
 					GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID);
 		}
 
@@ -129,32 +128,32 @@ class AntragraumGrpcServiceTest {
 		void shouldEnrichPostfachNachricht() {
 			sendRueckfrageAnswer();
 
-			verify(antragsraumGrpcService).enrichRueckfrageAnswer(postfachNachricht, postfachNachricht);
+			verify(grpcService).enrichRueckfrageAnswer(postfachNachricht, rueckfrage);
 		}
 
 		@Test
 		void shouldCallAntragraumService() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
+			grpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
 
-			verify(antragraumService).sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class));
+			verify(service).sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class));
 		}
 
 		@Test
 		void shouldCallOnNext() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
+			grpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
 
 			verify(streamObserver).onNext(any(GrpcSendRueckfrageAnswerResponse.class));
 		}
 
 		@Test
 		void shouldCallOnCompleted() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
+			grpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
 
 			verify(streamObserver).onCompleted();
 		}
 
 		private void sendRueckfrageAnswer() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
+			grpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
 		}
 	}
 
@@ -162,32 +161,38 @@ class AntragraumGrpcServiceTest {
 	@Nested
 	class TestGetRueckfrage {
 
-		private final PostfachNachricht matchingPostfachNachricht = PostfachNachrichtTestFactory.createBuilder()
-				.id(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID)
+		private final Rueckfrage matchingRueckfrage = RueckfrageTestFactory.createBuilder().id(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID)
 				.build();
-		private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
+		private final Rueckfrage rueckfrage = RueckfrageTestFactory.create();
 
 		@BeforeEach
 		void mock() {
-			when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(postfachNachricht, matchingPostfachNachricht));
+			when(service.findRueckfragen(any())).thenReturn(Stream.of(rueckfrage, matchingRueckfrage));
 		}
 
 		@Test
 		void shouldCallService() {
 			getRueckfrage();
 
-			verify(antragraumService).findRueckfragen(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN);
+			verify(service).findRueckfragen(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN);
 		}
 
 		@Test
 		void shouldReturnMatchingPostfachNachricht() {
 			var rueckfrage = getRueckfrage();
 
-			assertThat(rueckfrage).isEqualTo(matchingPostfachNachricht);
+			assertThat(rueckfrage).isEqualTo(matchingRueckfrage);
+		}
+
+		@Test
+		void shouldThrowExceptionIfNoRueckfrageExists() {
+			when(service.findRueckfragen(any())).thenReturn(Stream.empty());
+
+			assertThatThrownBy(() -> getRueckfrage()).isInstanceOf(TechnicalException.class);
 		}
 
-		private PostfachNachricht getRueckfrage() {
-			return antragsraumGrpcService.getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
+		private Rueckfrage getRueckfrage() {
+			return grpcService.getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
 					GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID);
 		}
 	}
@@ -202,25 +207,25 @@ class AntragraumGrpcServiceTest {
 				.sentAt(null)
 				.build();
 
-		private final PostfachNachricht postfachNachrichtRueckfrage = PostfachNachrichtTestFactory.create();
+		private final Rueckfrage postfachNachrichtRueckfrage = RueckfrageTestFactory.create();
 
 		@Test
 		void shouldSetVorgangId() {
-			var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
+			var enrichedPostfachNachricht = grpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
 
 			assertThat(enrichedPostfachNachricht.getVorgangId()).isEqualTo(postfachNachrichtRueckfrage.getVorgangId());
 		}
 
 		@Test
 		void shouldSetPostfachAddresses() {
-			var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
+			var enrichedPostfachNachricht = grpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
 
 			assertThat(enrichedPostfachNachricht.getPostfachAddress()).isEqualTo(postfachNachrichtRueckfrage.getPostfachAddress());
 		}
 
 		@Test
 		void shouldSetSentAt() {
-			var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
+			var enrichedPostfachNachricht = grpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
 
 			assertThat(enrichedPostfachNachricht.getSentAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
 		}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
index 0fe3c3d3fc8b70e2dfacf2edb39a53970712b9e7..ddd404c7700604182b4c3be686bcd2ea44cdec8d 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
@@ -32,13 +32,12 @@ import org.mapstruct.factory.Mappers;
 
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
+import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption;
 import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.ReplyOption;
 
 class AntragraumNachrichtMapperTest {
 
-	AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class);
+	private final AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class);
 
 	@Nested
 	class TestMapRueckfrage {
@@ -47,28 +46,28 @@ class AntragraumNachrichtMapperTest {
 		void shouldMapVorgangId() {
 			var result = map();
 
-			assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
+			assertThat(result.getVorgangId()).isEqualTo(RueckfrageTestFactory.VORGANG_ID);
 		}
 
 		@Test
 		void shouldMapId() {
 			var result = map();
 
-			assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID);
+			assertThat(result.getId()).isEqualTo(RueckfrageTestFactory.ID);
 		}
 
 		@Test
 		void shouldMapVorgangName() {
 			var result = map();
 
-			assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT);
+			assertThat(result.getVorgangName()).isEqualTo(RueckfrageTestFactory.VORGANG_NAME);
 		}
 
 		@Test
 		void shouldMapStatus() {
 			var result = map();
 
-			assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS);
+			assertThat(result.getStatus()).isEqualTo(RueckfrageStatus.NEW.name());
 		}
 
 		@Test
@@ -89,12 +88,11 @@ class AntragraumNachrichtMapperTest {
 		void shouldMapAttachments() {
 			var result = map();
 
-			assertThat(result.getAttachmentFileIdCount()).isEqualTo(1);
-			assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0));
+			assertThat(result.getAttachmentFileIdList()).hasSize(1).first().isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0));
 		}
 
 		private GrpcRueckfrage map() {
-			return mapper.toGrpc(PostfachNachrichtTestFactory.create());
+			return mapper.toGrpc(RueckfrageTestFactory.create());
 		}
 
 	}
@@ -123,17 +121,17 @@ class AntragraumNachrichtMapperTest {
 		}
 
 		@Test
-		void shouldMapDirection() {
+		void shouldSetDirection() {
 			var result = map();
 
 			assertThat(result.getDirection()).isEqualTo(Direction.IN);
 		}
 
 		@Test
-		void shouldMapReplyOption() {
+		void shouldSetReplyOption() {
 			var result = map();
 
-			assertThat(result.getReplyOption()).hasToString(ReplyOption.FORBIDDEN.name());
+			assertThat(result.getReplyOption()).isEqualTo(ReplyOption.FORBIDDEN);
 		}
 
 		@Test
@@ -143,6 +141,13 @@ class AntragraumNachrichtMapperTest {
 			assertThat(result.getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
 		}
 
+		@Test
+		void shouldSetSentAt() {
+			var result = map();
+
+			assertThat(result.getSentAt()).isCloseTo(PostfachNachrichtTestFactory.SENT_AT, within(2, ChronoUnit.SECONDS));
+		}
+
 		private PostfachNachricht map() {
 			return mapper.fromRueckfrageAnswer(GrpcRueckfrageAnswerTestFactory.create());
 		}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
index 8ff8ca4b3c7cbf98fca3ac6f6dc9f545fb85afba..8433d492e6c79d56cc689854aca408f5099ce80c 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
@@ -4,9 +4,15 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.time.ZonedDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Stream;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -15,6 +21,8 @@ import org.mockito.Spy;
 import org.opensaml.saml.saml2.core.Response;
 
 import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
+import de.ozgcloud.nachrichten.common.vorgang.VorgangService;
+import de.ozgcloud.nachrichten.common.vorgang.VorgangTestFactory;
 import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
@@ -36,6 +44,10 @@ class AntragraumServiceTest {
 	private Saml2Parser parser;
 	@Mock
 	private Saml2Decrypter decrypter;
+	@Mock
+	private RueckfrageMapper rueckfrageMapper;
+	@Mock
+	private VorgangService vorgangService;
 
 	@Nested
 	class TestGetAntragsraumUrl {
@@ -50,43 +62,211 @@ class AntragraumServiceTest {
 
 			assertThat(url).isEqualTo(URL);
 		}
-
 	}
 
+	@DisplayName("Find rueckfragen")
 	@Nested
 	class TestFindRueckfragen {
-		static final String SAML_TOKEN = "TOKEN";
+
+		@Mock
+		private Response response;
+
+		private static final String SAML_TOKEN = "TOKEN";
+		private static final String POSTFACH_ID = "dummyPostfachId";
+
+		private final Rueckfrage rueckfrage = RueckfrageTestFactory.create();
+		private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
+
+		@BeforeEach
+		void mock() {
+			when(postfachNachrichtService.findRueckfragen(any(), any())).thenReturn(Stream.of(postfachNachricht));
+
+			when(rueckfrageMapper.fromPostfachNachricht(any())).thenReturn(rueckfrage);
+			doReturn(rueckfrage).when(service).enrichByAnswers(any(), any());
+			doReturn(Stream.of(rueckfrage)).when(service).enrichRueckfragen(any());
+			doReturn(POSTFACH_ID).when(service).getPostfachId(any());
+		}
 
 		@Test
 		void shouldCallVerify() {
-			service.findRueckfragen(SAML_TOKEN);
+			service.findRueckfragen(SAML_TOKEN).toList();
 
-			verify(service).verifyToken(anyString());
+			verify(service).verifyToken(SAML_TOKEN);
 		}
 
 		@Test
 		void shouldCallVerifier() {
-			service.findRueckfragen(SAML_TOKEN);
+			service.findRueckfragen(SAML_TOKEN).toList();
 
 			verify(verifier).verify(anyString());
 		}
 
 		@Test
-		void shouldCallDecrypt() {
-			when(parser.parse(anyString())).thenReturn(mock(Response.class));
-
-			service.findRueckfragen(SAML_TOKEN);
+		void shouldGetPostfachId() {
+			service.findRueckfragen(SAML_TOKEN).toList();
 
-			verify(decrypter).decryptPostfachId(any(Response.class));
+			verify(service).getPostfachId(SAML_TOKEN);
 		}
 
 		@Test
 		void shouldCallPostfachService() {
-			when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID);
+			service.findRueckfragen(SAML_TOKEN).toList();
 
-			service.findRueckfragen(SAML_TOKEN);
+			verify(postfachNachrichtService).findRueckfragen(AntragraumService.BAYERN_ID_SERVICE_KONTO_TYPE, POSTFACH_ID);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			service.findRueckfragen(SAML_TOKEN).toList();
+
+			verify(rueckfrageMapper).fromPostfachNachricht(postfachNachricht);
+		}
+
+		@Test
+		void shouldCallEnrichByAnswers() {
+			service.findRueckfragen(SAML_TOKEN).toList();
+
+			verify(service).enrichByAnswers(rueckfrage, SAML_TOKEN);
+		}
+
+		@Test
+		void shouldCallEnrichRueckfragen() {
+			service.findRueckfragen(SAML_TOKEN).toList();
+
+			verify(service).enrichRueckfragen(any());
+		}
+
+		@Test
+		void shouldReturnFullFilledValue() {
+			var rueckfragen = service.findRueckfragen(SAML_TOKEN).toList();
+
+			assertThat(rueckfragen).containsExactly(rueckfrage);
+		}
+	}
+
+	@DisplayName("Enrich by answers")
+	@Nested
+	class TestEnrichByAnswers {
+
+		private static final String SAML_TOKEN = "TOKEN";
+		private final Rueckfrage rueckfrage = RueckfrageTestFactory.create();
+		private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
+		private final Stream<PostfachNachricht> answers = Stream.of(postfachNachricht);
+
+		@BeforeEach
+		void mock() {
+			doReturn(Optional.of(PostfachNachrichtTestFactory.SENT_AT)).when(service).getFirstSentAt(any());
+			doReturn(answers).when(service).findAnswers(any(), any());
+		}
+
+		@Test
+		void shouldCallFindAnswers() {
+			enrichByAnswer();
 
-			verify(postfachNachrichtService).findRueckfragen(anyString(), anyString());
+			verify(service).findAnswers(SAML_TOKEN, RueckfrageTestFactory.ID);
+		}
+
+		@Test
+		void shouldSetAnsweredAt() {
+			var enrichedRueckfrage = enrichByAnswer();
+
+			assertThat(enrichedRueckfrage.getAnsweredAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT);
+		}
+
+		@Test
+		void shouldSetStatus() {
+			var enrichedRueckfrage = enrichByAnswer();
+
+			assertThat(enrichedRueckfrage.getStatus()).isEqualTo(RueckfrageStatus.ANSWERED);
+		}
+
+		@Test
+		void shouldReturnFullFilledValue() {
+			var enrichedRueckfrage = enrichByAnswer();
+
+			assertThat(enrichedRueckfrage).usingRecursiveComparison().ignoringFields("answeredAt", "vorgangId", "vorgangName", "status")
+					.isEqualTo(rueckfrage);
+		}
+
+		private Rueckfrage enrichByAnswer() {
+			return service.enrichByAnswers(rueckfrage, SAML_TOKEN);
+		}
+	}
+
+	@DisplayName("Enrich rueckfrage")
+	@Nested
+	class TestEnrichRueckgabe {
+
+		private final Rueckfrage rueckfrageWithoutVorgangName = RueckfrageTestFactory.createBuilder().vorgangName(null).build();
+		private final List<Rueckfrage> rueckfragen = Collections.singletonList(rueckfrageWithoutVorgangName);
+
+		@BeforeEach
+		void mock() {
+			doReturn(Stream.of(RueckfrageTestFactory.create())).when(service).addVorgangName(any(), any());
+		}
+
+		@Test
+		void shouldCallAddVorgangNameIfRueckfragenExists() {
+			service.enrichRueckfragen(rueckfragen);
+
+			verify(service).addVorgangName(Collections.singletonList(rueckfrageWithoutVorgangName), RueckfrageTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldReturnValue() {
+			var enrichedRueckfragen = service.enrichRueckfragen(rueckfragen);
+
+			assertThat(enrichedRueckfragen.findFirst()).get().extracting(Rueckfrage::getVorgangName).isEqualTo(RueckfrageTestFactory.VORGANG_NAME);
+		}
+	}
+
+	@DisplayName("Add vorgang name")
+	@Nested
+	class TestAddVorgangName {
+
+		private final Rueckfrage rueckfrage = RueckfrageTestFactory.createBuilder()
+				.vorgangName(null)
+				.build();
+
+		@BeforeEach
+		void mock() {
+			when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create());
+		}
+
+		@Test
+		void shouldCallGetVorgang() {
+			addVorgangName().toList();
+
+			verify(vorgangService).getVorgang(RueckfrageTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldSetVorgangName() {
+			var rueckfragenWithVorgangName = addVorgangName().toList();
+
+			assertThat(rueckfragenWithVorgangName.getFirst().getVorgangName()).isEqualTo(VorgangTestFactory.NAME);
+		}
+
+		private Stream<Rueckfrage> addVorgangName() {
+			return service.addVorgangName(Collections.singletonList(rueckfrage), RueckfrageTestFactory.VORGANG_ID);
+		}
+	}
+
+	@DisplayName("Get first sentAt")
+	@Nested
+	class TestGetFirstSentAt {
+		private static final ZonedDateTime earlyZonedDateTime = ZonedDateTime.parse("2020-01-01T10:00:10Z");
+		private static final PostfachNachricht earlyPostfachNachricht = PostfachNachrichtTestFactory.createBuilder().sentAt(earlyZonedDateTime)
+				.build();
+
+		private static final ZonedDateTime lateZonedDateTime = ZonedDateTime.parse("2021-01-01T10:00:10Z");
+		private static final PostfachNachricht latePostfachNachricht = PostfachNachrichtTestFactory.createBuilder().sentAt(lateZonedDateTime).build();
+
+		@Test
+		void shouldReturnSentAt() {
+			var firstSentAt = service.getFirstSentAt(Stream.of(PostfachNachrichtTestFactory.create(), earlyPostfachNachricht, latePostfachNachricht));
+
+			assertThat(firstSentAt).contains(earlyZonedDateTime);
 		}
 	}
 
@@ -121,6 +301,8 @@ class AntragraumServiceTest {
 	@Nested
 	class TestFindAnswer {
 
+		private static final String SAML_TOKEN = "TOKEN";
+
 		@BeforeEach
 		void init() {
 			when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID);
@@ -128,17 +310,48 @@ class AntragraumServiceTest {
 
 		@Test
 		void shouldCallVerify() {
-			service.findAnswers("TOKEN", PostfachNachrichtTestFactory.ID);
+			service.findAnswers(SAML_TOKEN, PostfachNachrichtTestFactory.ID);
 
-			verify(service).verifyToken("TOKEN");
+			verify(service).verifyToken(SAML_TOKEN);
 		}
 
 		@Test
 		void shouldCallFindAnswers() {
-			service.findAnswers("TOKEN", PostfachNachrichtTestFactory.ID);
+			service.findAnswers(SAML_TOKEN, PostfachNachrichtTestFactory.ID);
 
-			verify(postfachNachrichtService).findAnswers("BayernID", GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID,
+			verify(postfachNachrichtService).findAnswers(AntragraumService.BAYERN_ID_SERVICE_KONTO_TYPE,
+					GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID,
 					PostfachNachrichtTestFactory.ID);
 		}
 	}
+
+	@DisplayName("Get postfachId")
+	@Nested
+	class TestGetPostfachId {
+
+		@Mock
+		private Response response;
+
+		private static final String SAML_TOKEN = "TOKEN";
+
+		@BeforeEach
+		void init() {
+			when(parser.parse(anyString())).thenReturn(response);
+			when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID);
+		}
+
+		@Test
+		void shouldCallParser() {
+			service.getPostfachId(SAML_TOKEN);
+
+			verify(parser).parse(SAML_TOKEN);
+		}
+
+		@Test
+		void shouldCallDecrypter() {
+			service.getPostfachId(SAML_TOKEN);
+
+			verify(decrypter).decryptPostfachId(response);
+		}
+	}
 }
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
index 6c0fb28f113bc5e179aff00d19a9e5cd5a7a6cc9..a5a1c3d84905536ae3be2ed01e8e596095f8ff7c 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
@@ -5,6 +5,8 @@ import java.util.UUID;
 
 import com.thedeanda.lorem.LoremIpsum;
 
+import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
+
 public class GrpcRueckfrageAnswerTestFactory {
 	static final String RUECKFRAGE_ID = UUID.randomUUID().toString();
 	static final String TEXT = LoremIpsum.getInstance().getParagraphs(2, 4);
@@ -18,6 +20,7 @@ public class GrpcRueckfrageAnswerTestFactory {
 		return GrpcRueckfrageAnswer.newBuilder()
 				.setRueckfrageId(RUECKFRAGE_ID)
 				.setAnswerText(TEXT)
-				.addAllAttachmentFileId(ATTACHMENT_ID_LIST);
+				.addAllAttachmentFileId(ATTACHMENT_ID_LIST)
+				.setSentAt(PostfachNachrichtTestFactory.SENT_AT_STR);
 	}
 }
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c7e80e7db967c35727133fdac1d42cbc51cd3d3
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java
@@ -0,0 +1,75 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory;
+import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
+import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
+
+class RueckfrageMapperTest {
+
+	private final RueckfrageMapper mapper = Mappers.getMapper(RueckfrageMapper.class);
+
+	@DisplayName("From postfachNachricht")
+	@Nested
+	class TestFromPostfachNachricht {
+
+		@Test
+		void shouldMapId() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getId()).isEqualTo(PostfachNachrichtTestFactory.ID);
+		}
+
+		@Test
+		void shouldMapVorgangId() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldMapPostfachAddress() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.create());
+		}
+
+		@Test
+		void shouldMapSentAt() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT);
+		}
+
+		@Test
+		void shouldMapText() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY);
+		}
+
+		@Test
+		void shouldMapAttachments() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getAttachments()).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS);
+		}
+
+		@Test
+		void shouldHaveDefaultStatus() {
+			var mapped = mapFromPostfachNachricht();
+
+			assertThat(mapped.getStatus()).isEqualTo(RueckfrageStatus.NEW);
+		}
+
+		private Rueckfrage mapFromPostfachNachricht() {
+			return mapper.fromPostfachNachricht(PostfachNachrichtTestFactory.create());
+		}
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a60a8a4d1f15b5ebe814c10197a92afc8afe8f0
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java
@@ -0,0 +1,30 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+import java.util.UUID;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory;
+import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
+
+public class RueckfrageTestFactory {
+
+	public static final String ID = UUID.randomUUID().toString();
+	public static final String VORGANG_ID = UUID.randomUUID().toString();
+	public static final String VORGANG_NAME = LoremIpsum.getInstance().getName();
+
+	public static Rueckfrage create() {
+		return createBuilder().build();
+	}
+
+	public static Rueckfrage.RueckfrageBuilder createBuilder() {
+		return Rueckfrage.builder()
+				.id(ID)
+				.vorgangId(VORGANG_ID)
+				.vorgangName(VORGANG_NAME)
+				.postfachAddress(PostfachAddressTestFactory.create())
+				.sentAt(PostfachNachrichtTestFactory.SENT_AT)
+				.text(PostfachNachrichtTestFactory.MAIL_BODY)
+				.attachments(PostfachNachrichtTestFactory.ATTACHMENTS);
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangHeaderTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangHeaderTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e794f652d2747fdc7a460c2f90ca55cb37a40ea0
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangHeaderTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader;
+
+public class GrpcVorgangHeaderTestFactory {
+
+	public static GrpcVorgangHeader create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcVorgangHeader.Builder createBuilder() {
+		return GrpcVorgangHeader.newBuilder()
+				.setId(VorgangTestFactory.ID)
+				.setName(VorgangTestFactory.NAME);
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangWithEingangTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangWithEingangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..80e47d727ced49a1e22d2e6441d36d9bf063dae4
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/GrpcVorgangWithEingangTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
+
+public class GrpcVorgangWithEingangTestFactory {
+
+	public static GrpcVorgangWithEingang create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcVorgangWithEingang.Builder createBuilder() {
+		return GrpcVorgangWithEingang.newBuilder()
+				.setId(VorgangTestFactory.ID)
+				.setName(VorgangTestFactory.NAME);
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8c84e02d1ec21d65e134924d5370559c16f9d9e
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangMapperTest.java
@@ -0,0 +1,25 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+class VorgangMapperTest {
+
+	private final VorgangMapper mapper = Mappers.getMapper(VorgangMapper.class);
+
+	@DisplayName("From vorgang with eingang")
+	@Nested
+	class TestFromVorgangWithEingang {
+
+		@Test
+		void shouldMap() {
+			var vorgang = mapper.fromVorgangWithEingang(GrpcVorgangWithEingangTestFactory.create());
+
+			assertThat(vorgang).usingRecursiveComparison().isEqualTo(VorgangTestFactory.create());
+		}
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..79daec0dc35d431c2d674249588c814ab8c2f9e5
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangRemoteServiceTest.java
@@ -0,0 +1,89 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+
+import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
+import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse;
+import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
+import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
+
+class VorgangRemoteServiceTest {
+
+	@Spy
+	@InjectMocks
+	private VorgangRemoteService remoteService;
+	@Mock
+	private VorgangServiceBlockingStub stub;
+	@Mock
+	private VorgangMapper mapper;
+
+	@DisplayName("Find vorgangIds")
+	@Nested
+	class TestFindVorgangids {
+		// TODO
+	}
+
+	@DisplayName("Get vorgang")
+	@Nested
+	class TestGetVorgang {
+
+		private final GrpcFindVorgangWithEingangRequest request = GrpcFindVorgangWithEingangRequest.newBuilder().build();
+
+		private final GrpcVorgangWithEingang vorgangWithEingang = GrpcVorgangWithEingang.newBuilder().build();
+		private final GrpcFindVorgangWithEingangResponse response = GrpcFindVorgangWithEingangResponse.newBuilder()
+				.setVorgangWithEingang(vorgangWithEingang).build();
+
+		@BeforeEach
+		void mock() {
+			doReturn(stub).when(remoteService).getVorgangServiceStub();
+			doReturn(request).when(remoteService).buildFindVorgangWithEingangRequest(any());
+			when(stub.findVorgangWithEingang(any())).thenReturn(response);
+			when(mapper.fromVorgangWithEingang(any())).thenReturn(VorgangTestFactory.create());
+		}
+
+		@Test
+		void shouldGetStub() {
+			remoteService.getVorgang(VorgangTestFactory.ID);
+
+			verify(remoteService).getVorgangServiceStub();
+		}
+
+		@Test
+		void shouldCallBuildRequest() {
+			remoteService.getVorgang(VorgangTestFactory.ID);
+
+			verify(remoteService).buildFindVorgangWithEingangRequest(VorgangTestFactory.ID);
+		}
+
+		@Test
+		void shouldCallStub() {
+			remoteService.getVorgang(VorgangTestFactory.ID);
+
+			verify(stub).findVorgangWithEingang(request);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			remoteService.getVorgang(VorgangTestFactory.ID);
+
+			verify(mapper).fromVorgangWithEingang(vorgangWithEingang);
+		}
+
+		@Test
+		void shouldReturnMappedValue() {
+			var vorgang = remoteService.getVorgang(VorgangTestFactory.ID);
+
+			assertThat(vorgang).usingRecursiveComparison().isEqualTo(VorgangTestFactory.create());
+		}
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a841932662527c5998a97e3746b2f295b633b53
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangServiceTest.java
@@ -0,0 +1,79 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.UUID;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.nachrichten.postfach.PostfachTestFactory;
+import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
+
+class VorgangServiceTest {
+
+	@InjectMocks
+	private VorgangService service;
+	@Mock
+	private VorgangRemoteService remoteService;
+
+	@DisplayName("Find vorgangIds")
+	@Nested
+	class TestFindVorgangIds {
+
+		private final Stream<String> returnedVorgangIds = Stream.of("1");
+		private final String postfachId = UUID.randomUUID().toString();
+
+		@BeforeEach
+		void mock() {
+			when(remoteService.findVorgangIds(any(), any())).thenReturn(returnedVorgangIds);
+		}
+
+		@Test
+		void shouldCallRemoteService() {
+			service.findVorgangIds(PostfachTestFactory.POSTFACH_TYPE, postfachId);
+
+			verify(remoteService).findVorgangIds(PostfachTestFactory.POSTFACH_TYPE, postfachId);
+		}
+
+		@Test
+		void shouldReturnValue() {
+			var vorgangIds = service.findVorgangIds(PostfachTestFactory.POSTFACH_TYPE, postfachId);
+
+			assertThat(vorgangIds).isEqualTo(returnedVorgangIds);
+		}
+	}
+
+	@DisplayName("Get vorgang")
+	@Nested
+	class TestGetVorgang {
+
+		private final Vorgang returnedVorgang = VorgangTestFactory.create();
+
+		@BeforeEach
+		void mock() {
+			when(remoteService.getVorgang(any())).thenReturn(returnedVorgang);
+		}
+
+		@Test
+		void shouldCallRemoteService() {
+			service.getVorgang(MessageTestFactory.VORGANG_ID);
+
+			verify(remoteService).getVorgang(MessageTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldReturnValue() {
+			var vorgang = service.getVorgang(MessageTestFactory.VORGANG_ID);
+
+			assertThat(vorgang).isEqualTo(returnedVorgang);
+		}
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf1a3392ca1a68594fe6471921153747a157ea8d
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/common/vorgang/VorgangTestFactory.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.nachrichten.common.vorgang;
+
+import java.util.UUID;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+public class VorgangTestFactory {
+
+	public static final String ID = UUID.randomUUID().toString();
+	public static final String NAME = LoremIpsum.getInstance().getWords(5);
+
+	public static Vorgang create() {
+		return createBuilder().build();
+	}
+
+	public static Vorgang.VorgangBuilder createBuilder() {
+		return Vorgang.builder()
+				.id(ID)
+				.name(NAME);
+	}
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java
index 4b990f5ff92c8d3c17655ec97045664181c094b5..02d2d73f90b8d8147e58adcb2c19a5117aa37c0f 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java
@@ -21,6 +21,7 @@ import org.mockito.Spy;
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandId;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
+import de.ozgcloud.nachrichten.common.vorgang.VorgangService;
 import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
 
 class PersistPostfachNachrichtServiceImplTest {
@@ -29,7 +30,7 @@ class PersistPostfachNachrichtServiceImplTest {
 	@InjectMocks
 	private PersistPostfachNachrichtServiceImpl service;
 	@Mock
-	private VorgangRemoteService vorgangRemoteService;
+	private VorgangService vorgangService;
 	@Mock
 	private OzgCloudCommandService commandService;
 	@Mock
@@ -178,7 +179,7 @@ class PersistPostfachNachrichtServiceImplTest {
 
 		@BeforeEach
 		void mock() {
-			when(vorgangRemoteService.findVorgangIds(any(), any())).thenReturn(Stream.of(MessageTestFactory.VORGANG_ID));
+			when(vorgangService.findVorgangIds(any(), any())).thenReturn(Stream.of(MessageTestFactory.VORGANG_ID));
 			when(attachedItemRemoteService.findByVorgangId(any())).thenReturn(Stream.of(postfachNachrichtWithNoReferencedNachricht,
 					matchingPostfachNachricht, postfachNachrichtWithNonMatchingReferencedNachricht));
 		}
@@ -187,7 +188,7 @@ class PersistPostfachNachrichtServiceImplTest {
 		void shouldCallVorgangRemoteService() {
 			doFindAnswers().toList();
 
-			verify(vorgangRemoteService).findVorgangIds(serviceKontoType, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			verify(vorgangService).findVorgangIds(serviceKontoType, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
 		}
 
 		@Test
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
index 646aacaab83277bdbb9102da5afec10383a0dc35..40f9862129b74ab2813d04e82cdcac2d398411b1 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.*;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.commons.lang3.StringUtils;
 import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -125,6 +126,39 @@ class PostfachNachrichtMapperTest {
 
 				assertDoesNotThrow(() -> fromMap(postfachNachrichtMap));
 			}
+
+			@Test
+			void shouldProceedWithNullAsAttachments() {
+				var postfachNachrichtMap = PostfachNachrichtTestFactory.asMap();
+
+				postfachNachrichtMap.put(PostfachNachricht.FIELD_ATTACHMENTS, null);
+
+				assertDoesNotThrow(() -> fromMap(postfachNachrichtMap));
+			}
+
+			@DisplayName("on empty attachments")
+			@Nested
+			class TestOnEmptyAttachmets {
+
+				@Test
+				void shouldProceedWithEmptyAttachments() {
+					var postfachNachrichtMap = PostfachNachrichtTestFactory.asMap();
+
+					postfachNachrichtMap.put(PostfachNachricht.FIELD_ATTACHMENTS, StringUtils.EMPTY);
+
+					assertDoesNotThrow(() -> fromMap(postfachNachrichtMap));
+				}
+
+				@Test
+				void shouldKeepEmptyAttachments() {
+					var postfachNachrichtMap = PostfachNachrichtTestFactory.asMap();
+					postfachNachrichtMap.put(PostfachNachricht.FIELD_ATTACHMENTS, StringUtils.EMPTY);
+
+					var postfachNachricht = fromMap(postfachNachrichtMap);
+
+					assertThat(postfachNachricht.getAttachmentList()).isEmpty();
+				}
+			}
 		}
 
 		@DisplayName("with missing postfachAddress")
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
index a60eb1180946699746247df1c19a3b2fd6039e5e..c281353f0f1d0a667c17e2e9117c195b43978256 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
@@ -49,16 +49,16 @@ public class MessageTestFactory {
 	}
 
 	public static Message.MessageBuilder createBuilder() {
-		return Message.builder() //
-				.messageId(MESSAGE_ID) //
-				.postfachId(POSTFACH_ID) //
-				.mailBody(MAIL_BODY) //
-				.isHtml(IS_HTML) //
-				.replyOption(REPLY_OPTION) //
-				.subject(SUBJECT) //
-				.vorgangId(VORGANG_ID) //
-				.eidasLevel(EIDAS_LEVEL) //
-				.rechtsverbindlich(RECHTSVERBINDLICH) //
+		return Message.builder()
+				.messageId(MESSAGE_ID)
+				.postfachId(POSTFACH_ID)
+				.mailBody(MAIL_BODY)
+				.isHtml(IS_HTML)
+				.replyOption(REPLY_OPTION)
+				.subject(SUBJECT)
+				.vorgangId(VORGANG_ID)
+				.eidasLevel(EIDAS_LEVEL)
+				.rechtsverbindlich(RECHTSVERBINDLICH)
 				.attachments(ATTACHMENTS);
 	}
 }