diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index df3d8156aa9ba4e2fce017a55f79fe257d80fe98..8f1a2a9b9b7e9e07bb4bdce3240f6a9e75082e91 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -16,7 +16,6 @@
 
 	<properties>
 		<vorgang-manager.version>2.17.0-SNAPSHOT</vorgang-manager.version>
-		<nachrichten-manager.version>2.9.0</nachrichten-manager.version>
 		<nachrichten-manager.version>2.14.0-SNAPSHOT</nachrichten-manager.version>
 		<document-manager.version>1.0.0-SNAPSHOT</document-manager.version>
 		<api-lib.version>0.13.0-SNAPSHOT</api-lib.version>
diff --git a/vorgang-manager-server/lombok.config b/vorgang-manager-server/lombok.config
index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..a06fa130e8af26b659f2d3a0cb1114cd966a9b0e 100644
--- a/vorgang-manager-server/lombok.config
+++ b/vorgang-manager-server/lombok.config
@@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR
 lombok.log.log4j.flagUsage = ERROR
 lombok.data.flagUsage = ERROR
 lombok.nonNull.exceptionType = IllegalArgumentException
-lombok.addLombokGeneratedAnnotation = true
\ No newline at end of file
+lombok.addLombokGeneratedAnnotation = true
+lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
\ No newline at end of file
diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml
index befeabf44fbf36f8a0a910a59bdb267bfb596592..da1d4cc8fce14c3291d29f10b9c0c2b6499228f1 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -60,7 +60,7 @@
 		<notification-manager.version>2.12.0-SNAPSHOT</notification-manager.version>
 		<collaboration-manager.version>0.4.0-SNAPSHOT</collaboration-manager.version>
 
-		<zip.version>2.11.1</zip.version>
+		<zip.version>2.11.5</zip.version>
 		<jsoup.version>1.15.3</jsoup.version>
 		<mongock.version>5.3.4</mongock.version>
 		<testcontainer.version>1.17.3</testcontainer.version>
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java
index bb28f0f25b66a1cc2d6065009c4df9b259270fa4..7a246482ed04591f236090b75f878ecec3e7f8c8 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java
@@ -49,7 +49,7 @@ public class ExceptionHandler {
 
 	@GrpcExceptionHandler
 	public StatusException handleNotFoundException(NotFoundException e) {
-		LOG.error(ERROR_MESSAGE, e);
+		LOG.warn(ERROR_MESSAGE, e);
 		return createStatusException(buildNotFoundStatus(e), buildMetadata(e));
 	}
 
@@ -112,7 +112,7 @@ public class ExceptionHandler {
 	public StatusException handleNotFoundException(de.ozgcloud.apilib.common.errorhandling.NotFoundException e) {
 		var exceptionId = createExceptionId();
 		var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId);
-		LOG.error("Grpc internal server error: {}", messageWithExceptionId, e);
+		LOG.warn("Grpc internal server error: {}", messageWithExceptionId, e);
 
 		var status = Status.NOT_FOUND.withDescription(messageWithExceptionId).withCause(e.getCause());
 		return createStatusException(status, buildMetadata(exceptionId));
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java
index 3424a6f908f5386f5c98f0fab87a926b5a6bf3d4..f5cdfdeda15cc7c695484d67a8d3735ba212b317 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java
@@ -21,9 +21,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.gridfs.GridFsTemplate;
+import org.springframework.security.saml2.core.Saml2Error;
 import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.annotation.DirtiesContext;
 
+import com.google.protobuf.ByteString;
+
 import de.ozgcloud.apilib.common.errorhandling.NotFoundException;
 import de.ozgcloud.common.test.DataITCase;
 import de.ozgcloud.common.test.TestUtils;
@@ -33,13 +37,17 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
 import de.ozgcloud.nachrichten.postfach.osi.ReplyOption;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
+import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem.VorgangAttachedItemBuilder;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory;
+import de.ozgcloud.vorgang.files.GridFsTestFactory;
+import de.ozgcloud.vorgang.files.OzgFileTestFactory;
 import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory;
 import de.ozgcloud.vorgang.servicekonto.ServiceKonto;
 import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory;
 import de.ozgcloud.vorgang.vorgang.Vorgang;
 import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory;
 import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
+import io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 
 @SpringBootTest(classes = { VorgangManagerServerApplication.class }, properties = {
@@ -53,6 +61,7 @@ import io.grpc.stub.StreamObserver;
 		"grpc.client.command-manager.address=in-process:antragraumitcase",
 		"grpc.client.info-manager.address=in-process:antragraumitcase",
 		"grpc.client.vorgang-manager.address=in-process:antragraumitcase",
+		"grpc.client.file-manager.address=in-process:antragraumitcase"
 })
 @WithMockUser
 @DataITCase
@@ -63,6 +72,8 @@ class AntragraumITCase {
 	private AntragraumGrpcService grpcService;
 	@Autowired
 	private MongoOperations mongoOperations;
+	@Autowired
+	private GridFsTemplate gridFsTemplate;
 
 	@MockBean
 	private Saml2Decrypter decrypter;
@@ -73,6 +84,8 @@ class AntragraumITCase {
 	void prepareDatabase() {
 		mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
 		mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME);
+		mongoOperations.dropCollection("fs.files");
+		mongoOperations.dropCollection("fs.chunks");
 	}
 
 	@DisplayName("Find rueckfragen")
@@ -87,7 +100,8 @@ class AntragraumITCase {
 
 		@BeforeEach
 		void mock() {
-			when(decrypter.decryptPostfachId(any())).thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
 			when(verifier.verify(any())).thenReturn(Collections.emptyList());
 		}
 
@@ -101,10 +115,12 @@ class AntragraumITCase {
 			@BeforeEach
 			void prepareDatabase() {
 				vorgangTrustLevel3 = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME);
-				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel3.getId()), VorgangAttachedItem.COLLECTION_NAME);
+				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel3.getId()),
+						VorgangAttachedItem.COLLECTION_NAME);
 
 				vorgangTrustLevel2 = mongoOperations.save(createVorgang(TrustLevel.LEVEL_2), Vorgang.COLLECTION_NAME);
-				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel2.getId()), VorgangAttachedItem.COLLECTION_NAME);
+				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel2.getId()),
+						VorgangAttachedItem.COLLECTION_NAME);
 			}
 
 			@Test
@@ -141,7 +157,8 @@ class AntragraumITCase {
 			@BeforeEach
 			void prepareDatabase() {
 				var vorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME);
-				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgang.getId()), VorgangAttachedItem.COLLECTION_NAME);
+				mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgang.getId()),
+						VorgangAttachedItem.COLLECTION_NAME);
 			}
 
 			@Test
@@ -180,14 +197,15 @@ class AntragraumITCase {
 
 		private List<GrpcRueckfrageHead> findRueckfragen() {
 			grpcService.findRueckfragen(
-					GrpcFindRueckfrageRequestTestFactory.createBuilder().setSamlToken(TestUtils.loadTextFile("SamlResponse.xml")).build(),
+					GrpcFindRueckfrageRequestTestFactory.createBuilder()
+							.setSamlToken(TestUtils.loadTextFile("SamlResponse.xml")).build(),
 					responseObserver);
 			verify(responseObserver, timeout(30000)).onNext(captor.capture());
 			return captor.getValue().getRueckfrageHeadList();
 		}
 	}
 
-	@DisplayName("Ger rueckfrage")
+	@DisplayName("Get rueckfrage")
 	@Nested
 	class TestGetRueckfrage {
 
@@ -202,17 +220,19 @@ class AntragraumITCase {
 
 		@BeforeEach
 		void prepareDatabase() {
-			savedVorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), Vorgang.COLLECTION_NAME);
+			savedVorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(),
+					Vorgang.COLLECTION_NAME);
 			vorgangAttachedItem = mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()),
 					VorgangAttachedItem.COLLECTION_NAME);
 
 			when(verifier.verify(any())).thenReturn(Collections.emptyList());
-			when(decrypter.decryptTrustLevel(any())).thenReturn("STORK-QAA-Level-1");
+			when(decrypter.decryptTrustLevel(any())).thenReturn(ServiceKontoTestFactory.TRUST_LEVEL);
 		}
 
 		@Test
 		void shouldReturnOnMatchingPostfachId() {
-			when(decrypter.decryptPostfachId(any())).thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
 			var request = GrpcGetRueckfrageRequestTestFactory.createBuilder()
 					.setId(vorgangAttachedItem.getId())
 					.setSamlToken(TestUtils.loadTextFile("SamlResponse.xml"))
@@ -239,11 +259,260 @@ class AntragraumITCase {
 		}
 	}
 
+	@Nested
+	class TestGetAttachmentMetadata {
+
+		private static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
+
+		@Mock
+		private StreamObserver<GrpcGetAttachmentMetadataResponse> responseObserver;
+
+		@Captor
+		private ArgumentCaptor<GrpcGetAttachmentMetadataResponse> captor;
+
+		private VorgangAttachedItem vorgangAttachedItem;
+		private VorgangAttachedItem vorgangAttachedItemDifferentAttachment;
+		private String fileId;
+
+		@BeforeEach
+		void prepareDatabase() {
+			fileId = gridFsTemplate.store(GridFsTestFactory.createUpload()).toString();
+			var savedVorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME);
+			vorgangAttachedItem = mongoOperations.save(
+					createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId(), fileId),
+					VorgangAttachedItem.COLLECTION_NAME);
+			vorgangAttachedItemDifferentAttachment = mongoOperations.save(
+					createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()),
+					VorgangAttachedItem.COLLECTION_NAME);
+		}
+
+		@Test
+		void shouldSendMetadata() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentMetadataRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+			var expectedMetadata = GrpcFileMetadata.newBuilder()
+					.setContentType(OzgFileTestFactory.CONTENT_TYPE)
+					.setName(OzgFileTestFactory.NAME)
+					.setSize(OzgFileTestFactory.CONTENT.length)
+					.build();
+
+			grpcService.getAttachmentMetadata(request, responseObserver);
+
+			verify(responseObserver, timeout(30000)).onNext(captor.capture());
+			assertThat(captor.getValue().getFileMetadata()).isEqualTo(expectedMetadata);
+		}
+
+		@Test
+		void shouldFailDueToInvalidToken() {
+			when(verifier.verify(any())).thenReturn(List.of(new Saml2Error("invalid_signature", "Signature missing")));
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentMetadataRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver))
+					.isInstanceOf(SecurityException.class)
+					.hasMessageContaining("Signature missing")
+					.hasMessageContaining("invalid_signature");
+
+		}
+
+		@Test
+		void shouldFailDueIncorrectPostfachId() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any())).thenReturn("wrong ID");
+			var request = GrpcGetAttachmentMetadataRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver))
+					.isInstanceOf(NotFoundException.class)
+					.hasMessageContaining("PostfachNachricht")
+					.hasMessageContaining(vorgangAttachedItem.getId());
+		}
+
+		@Test
+		void shouldFailDueToTrustLevelTooLow() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_2.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentMetadataRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver))
+					.isInstanceOf(NotFoundException.class)
+					.hasMessageContaining("PostfachNachricht")
+					.hasMessageContaining(vorgangAttachedItem.getId());
+		}
+
+		@Test
+		void shouldFailDueToFileIdNotInPostfachNachricht() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentMetadataRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItemDifferentAttachment.getId())
+					.setFileId(fileId)
+					.build();
+
+			assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver))
+					.isInstanceOf(NotFoundException.class)
+					.hasMessageContaining("PostfachNachricht")
+					.hasMessageContaining(vorgangAttachedItemDifferentAttachment.getId());
+		}
+
+	}
+
+	@Nested
+	class TestGetAttachmentContent {
+
+		private static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
+
+		@Mock
+		private CallStreamObserver<GrpcGetAttachmentContentResponse> responseObserver;
+
+		@Captor
+		private ArgumentCaptor<GrpcGetAttachmentContentResponse> captor;
+
+		private VorgangAttachedItem vorgangAttachedItem;
+		private VorgangAttachedItem vorgangAttachedItemDifferentAttachment;
+		private String fileId;
+
+		@BeforeEach
+		void prepareDatabase() {
+			fileId = gridFsTemplate.store(GridFsTestFactory.createUpload()).toString();
+			var savedVorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME);
+			vorgangAttachedItem = mongoOperations.save(
+					createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId(), fileId),
+					VorgangAttachedItem.COLLECTION_NAME);
+			vorgangAttachedItemDifferentAttachment = mongoOperations.save(
+					createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()),
+					VorgangAttachedItem.COLLECTION_NAME);
+		}
+
+		@BeforeEach
+		void mockObserver() {
+			when(responseObserver.isReady()).thenReturn(true);
+			doAnswer(invocation -> {
+				((Runnable) invocation.getArgument(0)).run();
+				return null;
+			}).when(responseObserver).setOnReadyHandler(any());
+		}
+
+		@Test
+		void shouldSendContent() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentContentRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+			var expectedContent = ByteString.copyFrom(OzgFileTestFactory.CONTENT);
+
+			grpcService.getAttachmentContent(request, responseObserver);
+
+			verify(responseObserver, timeout(30000)).onNext(captor.capture());
+			assertThat(captor.getValue().getFileContent()).isEqualTo(expectedContent);
+		}
+
+		@Test
+		void shouldFailDueToInvalidToken() {
+			when(verifier.verify(any())).thenReturn(List.of(new Saml2Error("invalid_signature", "Signature missing")));
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentContentRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			grpcService.getAttachmentContent(request, responseObserver);
+
+			verify(responseObserver, never()).onNext(any());
+
+		}
+
+		@Test
+		void shouldFailDueIncorrectPostfachId() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any())).thenReturn("wrong ID");
+			var request = GrpcGetAttachmentContentRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			grpcService.getAttachmentContent(request, responseObserver);
+
+			verify(responseObserver, never()).onNext(any());
+		}
+
+		@Test
+		void shouldFailDueToTrustLevelTooLow() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_2.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentContentRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItem.getId())
+					.setFileId(fileId)
+					.build();
+
+			grpcService.getAttachmentContent(request, responseObserver);
+
+			verify(responseObserver, never()).onNext(any());
+		}
+
+		@Test
+		void shouldFailDueToFileIdNotInPostfachNachricht() {
+			when(verifier.verify(any())).thenReturn(Collections.emptyList());
+			when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue());
+			when(decrypter.decryptPostfachId(any()))
+					.thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+			var request = GrpcGetAttachmentContentRequest.newBuilder()
+					.setSamlToken(SAML_TOKEN)
+					.setNachrichtId(vorgangAttachedItemDifferentAttachment.getId())
+					.setFileId(fileId)
+					.build();
+
+			grpcService.getAttachmentContent(request, responseObserver);
+
+			verify(responseObserver, never()).onNext(any());
+		}
+	}
+
 	private Vorgang createVorgang(TrustLevel trustLevel) {
 		return VorgangTestFactory.createBuilder()
 				.id(null)
 				.version(0)
-				.header(VorgangHeadTestFactory.createBuilder().serviceKonto(createBayernIdServiceKonto(trustLevel)).build())
+				.header(VorgangHeadTestFactory.createBuilder().serviceKonto(createBayernIdServiceKonto(trustLevel))
+						.build())
 				.build();
 	}
 
@@ -251,15 +520,30 @@ class AntragraumITCase {
 		return ServiceKontoTestFactory.createBuilder().type("BAYERN_ID").trustLevel(trustLevel.getValue()).build();
 	}
 
+	private VorgangAttachedItem createPostfachNachrichtVorgangAttachedItem(String vorgangId, String fileId) {
+		return createPostfachNachrichtVorgangAttachedItemBuilder(vorgangId)
+				.item(createBayernIdPostfachNachrichtItem(vorgangId, fileId))
+				.build();
+	}
+
 	private VorgangAttachedItem createPostfachNachrichtVorgangAttachedItem(String vorgangId) {
+		return createPostfachNachrichtVorgangAttachedItemBuilder(vorgangId).build();
+	}
+
+	private VorgangAttachedItemBuilder createPostfachNachrichtVorgangAttachedItemBuilder(String vorgangId) {
 		return VorgangAttachedItemTestFactory.createBuilder()
 				.id(null)
 				.version(0)
 				.vorgangId(vorgangId)
 				.itemName("PostfachMail")
 				.client("OzgCloud_NachrichtenManager")
-				.item(createBayernIdPostfachNachrichtItem(vorgangId))
-				.build();
+				.item(createBayernIdPostfachNachrichtItem(vorgangId));
+	}
+
+	private Map<String, Object> createBayernIdPostfachNachrichtItem(String vorgangId, String fileId) {
+		var nachrichtItem = createBayernIdPostfachNachrichtItem(vorgangId);
+		nachrichtItem.put("attachments", List.of(fileId));
+		return nachrichtItem;
 	}
 
 	private Map<String, Object> createBayernIdPostfachNachrichtItem(String vorgangId) {
@@ -271,7 +555,8 @@ class AntragraumITCase {
 				PostfachAddress.TYPE_FIELD, 0,
 				PostfachAddress.VERSION_FIELD, 1,
 				PostfachAddress.IDENTIFIER_FIELD,
-				Map.of(PostfachAddress.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE),
+				Map.of(PostfachAddress.FIELD_POSTFACH_ID,
+						PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE),
 				PostfachAddress.SERVICEKONTO_TYPE_FIELD, "BAYERN_ID"));
 		return nachrichtItem;
 	}