diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
index 5210fc4085042c585bc0fd3e8db871443d794c1d..1d40d47706cb193303cc429ff4202c3c444b29fe 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
@@ -1,5 +1,8 @@
 package de.ozgcloud.apilib.vorgang.grpc;
 
+import java.util.ArrayList;
+import java.util.Objects;
+
 import org.mapstruct.CollectionMappingStrategy;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
@@ -18,10 +21,11 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression.Builder;
 @Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.WARN)
 public interface OzgCloudVorgangQueryMapper {
 
-	static final String FORM_ENGINE_NAME_PATH = "formEngineName";
+	static final String FORM_ENGINE_NAME_PATH = "eingangs.header.formEngineName";
 	static final String STATUS_PATH = "status";
 	static final String ORGANISATIONS_EINHEIT_ID_PATH = "eingangs.zustaendigeStelle.organisationseinheitenId";
 	static final String AKTENZEICHEN_PATH = "aktenzeichen";
+	static final String FORM_ID_PATH = "eingangs.header.formId";
 
 	default GrpcQuery toGrpc(OzgCloudVorgangQuery ozgCloudVorgangQuery) {
 		var queryBuilder = mapPropertiesToQuery(ozgCloudVorgangQuery);
@@ -38,7 +42,7 @@ public interface OzgCloudVorgangQueryMapper {
 	default GrpcQuery.Builder mapPropertiesToQuery(OzgCloudVorgangQuery query) {
 		var queryBuilder = GrpcQuery.newBuilder().setLogicalOperator(GrpcLogicalOperator.AND);
 		query.getAktenzeichen().map(this::toAktenzeichenExpression).ifPresent(queryBuilder::addExpressions);
-		query.getForm().map(this::toFormExpression).ifPresent(queryBuilder::addExpressions);
+		query.getForm().map(this::toFormExpressions).ifPresent(queryBuilder::addAllExpressions);
 		query.getStatus().map(this::toStatusExpression).ifPresent(queryBuilder::addExpressions);
 		query.getOrganisationsEinheitId().map(this::toOrganisationsEinheitIdExpression).ifPresent(queryBuilder::addExpressions);
 		return queryBuilder;
@@ -65,11 +69,29 @@ public interface OzgCloudVorgangQueryMapper {
 				.build();
 	}
 
-	default GrpcVorgangQueryExpression toFormExpression(FormIdentification formIdentification) {
-		return getEqualExpressionBuilder()
+	default Iterable<GrpcVorgangQueryExpression> toFormExpressions(FormIdentification formIdentification) {
+		var expressions = new ArrayList<GrpcVorgangQueryExpression>(2);
+		if (Objects.nonNull(formIdentification.formEngineName())) {
+			addFormEngineNameExpression(formIdentification, expressions);
+		}
+		if (Objects.nonNull(formIdentification.formId())) {
+			addFormIdExpression(formIdentification, expressions);
+		}
+		return expressions;
+	}
+
+	private void addFormEngineNameExpression(FormIdentification formIdentification, ArrayList<GrpcVorgangQueryExpression> expressions) {
+		expressions.add(getEqualExpressionBuilder()
 				.setPath(FORM_ENGINE_NAME_PATH)
 				.setOperandStringValue(formIdentification.formEngineName())
-				.build();
+				.build());
+	}
+
+	private void addFormIdExpression(FormIdentification formIdentification, ArrayList<GrpcVorgangQueryExpression> expressions) {
+		expressions.add(getEqualExpressionBuilder()
+				.setPath(FORM_ID_PATH)
+				.setOperandStringValue(formIdentification.formId())
+				.build());
 	}
 
 	private Builder getEqualExpressionBuilder() {
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
index 32e3f49a2dcf18f7076f82247c08a6ba223c9efa..f639b98071d522da640f7ccaf2b6f92e657e4eb7 100644
--- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.List;
 import java.util.Optional;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -14,6 +15,7 @@ import org.mockito.Spy;
 
 import de.ozgcloud.apilib.vorgang.FormIdentificationTestFactory;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.FormIdentification;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.Query;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQueryTestFactory;
 import de.ozgcloud.apilib.vorgang.QueryTestFactory;
@@ -142,16 +144,18 @@ class OzgCloudVorgangQueryMapperTest {
 	@Nested
 	class TestMapPropertiesToQuery {
 
-		private final GrpcVorgangQueryExpression aktenzeichenExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
-				.setPath(OzgCloudVorgangQueryMapper.AKTENZEICHEN_PATH)
+		private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
+				.setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH)
 				.setOperator(GrpcQueryOperator.EQUAL)
-				.setOperandStringValue(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN)
+				.setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME)
 				.build();
 
-		private final GrpcVorgangQueryExpression formExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
-				.setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH)
+		private final List<GrpcVorgangQueryExpression> formExpressions = List.of(formEngineNameExpression);
+
+		private final GrpcVorgangQueryExpression aktenzeichenExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
+				.setPath(OzgCloudVorgangQueryMapper.AKTENZEICHEN_PATH)
 				.setOperator(GrpcQueryOperator.EQUAL)
-				.setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME)
+				.setOperandStringValue(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN)
 				.build();
 
 		private final GrpcVorgangQueryExpression statusExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
@@ -174,9 +178,10 @@ class OzgCloudVorgangQueryMapperTest {
 			@BeforeEach
 			void mock() {
 				doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
-				doReturn(formExpression).when(mapper).toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
+				doReturn(organisationsEinheitIdExpression).when(mapper)
+						.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
 				doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
-				doReturn(organisationsEinheitIdExpression).when(mapper).toFormExpression(OzgCloudVorgangQueryTestFactory.FORM);
+				doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
 			}
 
 			@Test
@@ -204,15 +209,15 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldCallToFormExpression() {
 				callMapPropertiesToQuery();
 
-				verify(mapper).toFormExpression(OzgCloudVorgangQueryTestFactory.FORM);
+				verify(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
 			}
 
 			@Test
 			void shouldReturnQueryBuilderContainingAllExpressions() {
 				var queryBuilder = callMapPropertiesToQuery();
 
-				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, formExpression,
-						organisationsEinheitIdExpression);
+				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression,
+						formEngineNameExpression, organisationsEinheitIdExpression);
 			}
 
 			@Test
@@ -234,6 +239,14 @@ class OzgCloudVorgangQueryMapperTest {
 					.aktenzeichen(Optional.empty())
 					.build();
 
+			@BeforeEach
+			void mock() {
+				doReturn(organisationsEinheitIdExpression).when(mapper)
+						.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
+				doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
+				doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
+			}
+
 			@Test
 			void shouldNotCallToAktenzeichenExpression() {
 				callMapPropertiesToQuery();
@@ -245,7 +258,7 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldReturnQueryBuilderContainingAllOtherExpressions() {
 				var queryBuilder = callMapPropertiesToQuery();
 
-				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(statusExpression, formExpression,
+				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(statusExpression, formEngineNameExpression,
 						organisationsEinheitIdExpression);
 			}
 
@@ -261,11 +274,19 @@ class OzgCloudVorgangQueryMapperTest {
 					.form(Optional.empty())
 					.build();
 
+			@BeforeEach
+			void mock() {
+				doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
+				doReturn(organisationsEinheitIdExpression).when(mapper)
+						.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
+				doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
+			}
+
 			@Test
 			void shouldNotCallToFormExpression() {
 				callMapPropertiesToQuery();
 
-				verify(mapper, never()).toFormExpression(any());
+				verify(mapper, never()).toFormExpressions(any());
 			}
 
 			@Test
@@ -288,6 +309,14 @@ class OzgCloudVorgangQueryMapperTest {
 					.status(Optional.empty())
 					.build();
 
+			@BeforeEach
+			void mock() {
+				doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
+				doReturn(organisationsEinheitIdExpression).when(mapper)
+						.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
+				doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
+			}
+
 			@Test
 			void shouldNotCallToStatusExpression() {
 				callMapPropertiesToQuery();
@@ -299,7 +328,7 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldReturnQueryBuilderContainingAllOtherExpressions() {
 				var queryBuilder = callMapPropertiesToQuery();
 
-				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, formExpression,
+				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, formEngineNameExpression,
 						organisationsEinheitIdExpression);
 			}
 
@@ -315,6 +344,13 @@ class OzgCloudVorgangQueryMapperTest {
 					.organisationsEinheitId(Optional.empty())
 					.build();
 
+			@BeforeEach
+			void mock() {
+				doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
+				doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
+				doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
+			}
+
 			@Test
 			void shouldNotCallToOrganisationsEinheitIdExpression() {
 				callMapPropertiesToQuery();
@@ -326,7 +362,8 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldReturnQueryBuilderContainingAllOtherExpressions() {
 				var queryBuilder = callMapPropertiesToQuery();
 
-				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, formExpression);
+				assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression,
+						formEngineNameExpression);
 			}
 
 			private GrpcQuery.Builder callMapPropertiesToQuery() {
@@ -389,17 +426,38 @@ class OzgCloudVorgangQueryMapperTest {
 	@Nested
 	class TestToFormExpression {
 
-		private final GrpcVorgangQueryExpression formExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
+		private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
 				.setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH)
 				.setOperator(GrpcQueryOperator.EQUAL)
 				.setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME)
 				.build();
 
+		private final GrpcVorgangQueryExpression formIdExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
+				.setPath(OzgCloudVorgangQueryMapper.FORM_ID_PATH)
+				.setOperator(GrpcQueryOperator.EQUAL)
+				.setOperandStringValue(FormIdentificationTestFactory.FORM_ID)
+				.build();
+
+		@Test
+		void shouldReturnFormEngineNameExpression() {
+			var expressions = mapper.toFormExpressions(new FormIdentification(null, FormIdentificationTestFactory.FORM_ENGINE_NAME));
+
+			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formEngineNameExpression);
+		}
+
+		@Test
+		void shouldReturnFormIdExpression() {
+			var expressions = mapper.toFormExpressions(new FormIdentification(FormIdentificationTestFactory.FORM_ID, null));
+
+			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formIdExpression);
+		}
+
 		@Test
-		void shouldReturnFormExpression() {
-			var expression = mapper.toFormExpression(OzgCloudVorgangQueryTestFactory.FORM);
+		void shouldReturnBothExpressions() {
+			var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create());
 
-			assertThat(expression).usingRecursiveComparison().isEqualTo(formExpression);
+			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder(formEngineNameExpression,
+					formIdExpression);
 		}
 	}