diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java
index a2cb6eede0078e730bfb682a6fc222db8897a740..b39e47178187ac8a31b838d794bf7580f6748c67 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java
@@ -11,9 +11,9 @@ import org.springframework.stereotype.Service;
 import de.ozgcloud.alfa.AlfaProperties;
 import de.ozgcloud.alfa.common.GrpcUtil;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
+import de.ozgcloud.vorgang.common.GrpcQueryOperator;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod;
-import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.Operator;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse;
 import de.ozgcloud.vorgang.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub;
@@ -62,7 +62,7 @@ class StatisticRemoteService {
 				.setResultName(buildCountByStatusResultName(vorgangStatus))
 				.setPath(STATUS_PATH)
 				.setGroupMethod(GroupMethod.COUNT)
-				.setOperator(Operator.EQUAL)
+				.setOperator(GrpcQueryOperator.EQUAL)
 				.setOperandStringValue(vorgangStatus.name())
 				.build();
 	}
@@ -72,7 +72,7 @@ class StatisticRemoteService {
 				.setResultName(COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME)
 				.setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName()))
 				.setGroupMethod(GroupMethod.COUNT)
-				.setOperator(Operator.UNEQUAL)
+				.setOperator(GrpcQueryOperator.UNEQUAL)
 				.build();
 	}
 
@@ -81,7 +81,7 @@ class StatisticRemoteService {
 				.setResultName(EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME)
 				.setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName()))
 				.setGroupMethod(GroupMethod.EXISTS)
-				.setOperator(Operator.LESS_THEN_OR_EQUAL_TO)
+				.setOperator(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO)
 				.setOperandStringValue(OPERAND_TODAY_DATE)
 				.build();
 	}
@@ -102,7 +102,7 @@ class StatisticRemoteService {
 				.setResultName(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME)
 				.setPath(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH)
 				.setGroupMethod(GroupMethod.COUNT)
-				.setOperator(Operator.EQUAL)
+				.setOperator(GrpcQueryOperator.EQUAL)
 				.setOperandBoolValue(true)
 				.build();
 	}
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java
index c80e8617af570fb48b34bf5bea4cd4070212630f..89fe664537bdb8c0f58eece1b848ce0a4e00b395 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java
@@ -22,4 +22,5 @@ class FilterCriteria {
 	@Builder.Default
 	private Optional<UserId> assignedTo = Optional.empty();
 	private boolean hasNextWiedervorlageFrist;
+	private boolean hasUngeleseneNachrichten;
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b456efafc4d96b39c866323ec9f2450eaaba476
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.alfa.vorgang;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder(toBuilder = true)
+@Getter
+public class ResultPageRequestCriteria {
+
+	private int page;
+	private int limit;
+	private OrderBy orderBy;
+}
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
index 0bbd400966bc4a8ee9ae29beb72ba6fc158e9a48..8d23095292dea0d30595fcdde1a13e3191e61d28 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
@@ -25,8 +25,6 @@ package de.ozgcloud.alfa.vorgang;
 
 import java.util.Optional;
 
-import jakarta.servlet.http.HttpServletResponse;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
@@ -46,6 +44,7 @@ import de.ozgcloud.alfa.common.clientattribute.ClientAttributeService;
 import de.ozgcloud.alfa.common.user.UserId;
 import de.ozgcloud.alfa.statistic.StatisticController;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
+import jakarta.servlet.http.HttpServletResponse;
 
 @RestController
 @RequestMapping(VorgangController.PATH)
@@ -195,12 +194,23 @@ public class VorgangController {
 	@GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_NACHRICHTEN })
 	public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByUngeleseneNachrichten(@RequestParam int page, @RequestParam Integer limit,
 			@RequestParam String nachrichten) {
-		return EntityModel.of(EnhancedVorgang.builder().build());
+		var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit)
+				.filterCriteria(FilterCriteria.builder().hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten)).build())
+				.build();
+
+		return handleGetAllRequest(requestCriteria);
 	}
 
 	@GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_NACHRICHTEN })
 	public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndUngeleseneNachrichten(@RequestParam int page,
 			@RequestParam Integer limit, @RequestParam UserId assignedTo, @RequestParam String nachrichten) {
-		return EntityModel.of(EnhancedVorgang.builder().build());
+		var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit)
+				.filterCriteria(FilterCriteria.builder()
+						.filterByAssignedTo(true).assignedTo(asOptional(assignedTo))
+						.hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten))
+						.build())
+				.build();
+
+		return handleGetAllRequest(requestCriteria);
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java
index bb2d49e67b4e7c57dac52b54c1aa27d329fd9525..5e183908678002a699db74e1ee0e450c98f08eb7 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java
@@ -29,12 +29,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.alfa.common.GrpcUtil;
+import de.ozgcloud.vorgang.common.GrpcQueryOperator;
 import de.ozgcloud.vorgang.vorgang.GrpcFilterBy;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse;
+import de.ozgcloud.vorgang.vorgang.GrpcQuery;
+import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression;
 import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
@@ -59,18 +62,36 @@ class VorgangRemoteService {
 	GrpcFindVorgangRequest buildFindVorgangRequest(FindVorgaengeHeaderRequestCriteria requestCriteria, FilterCriteria filterCriteria) {
 		var requestBuilder = createFindVorgangRequestBuilder(requestCriteria, filterCriteria);
 
-		requestCriteria.getSearchBy().ifPresent(requestBuilder::setSearchBy);
+//				requestCriteria.getSearchBy().ifPresent(requestBuilder::setSearchBy);
+		requestCriteria.getSearchBy().ifPresentOrElse(
+				requestBuilder::setSearchBy,
+				() -> requestBuilder.setQuery(mapToGrpcQuery(filterCriteria)));
 
 		return requestBuilder.build();
 	}
 
 	private GrpcFindVorgangRequest.Builder createFindVorgangRequestBuilder(FindVorgaengeHeaderRequestCriteria requestCriteria,
 			FilterCriteria filterCriteria) {
+		return createFindVorgangRequestBuilder(requestCriteria).setFilterBy(mapFilterCriteria(filterCriteria));
+	}
+
+	private GrpcFindVorgangRequest.Builder createFindVorgangRequestBuilder(FindVorgaengeHeaderRequestCriteria requestCriteria) {
 		return GrpcFindVorgangRequest.newBuilder()
 				.setOrderBy(GrpcOrderBy.valueOf(requestCriteria.getOrderBy().name()))
 				.setLimit(requestCriteria.getLimit())
-				.setOffset(requestCriteria.getPage() * requestCriteria.getLimit())
-				.setFilterBy(mapFilterCriteria(filterCriteria));
+				.setOffset(requestCriteria.getPage() * requestCriteria.getLimit());
+	}
+
+	private GrpcQuery mapToGrpcQuery(FilterCriteria filterCriteria) {
+		var queryBuilder = GrpcQuery.newBuilder();
+		if (filterCriteria.isHasUngeleseneNachrichten()) {
+			queryBuilder.addExpressions(GrpcVorgangQueryExpression.newBuilder()
+					.setPath("ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht")
+					.setOperator(GrpcQueryOperator.EQUAL)
+					.setOperandBoolValue(true)
+					.build());
+		}
+		return queryBuilder.build();
 	}
 
 	VorgaengeHeaderResponse buildVorgaengeHeaderResponse(GrpcFindVorgangResponse response) {
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java
index c46fcf4d906019549f29b03431768834a11ddf5d..8306173ae997b9ade430cb8dfe93a2a4749b531f 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java
@@ -25,9 +25,9 @@ import com.thedeanda.lorem.LoremIpsum;
 
 import de.ozgcloud.alfa.AlfaProperties;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
+import de.ozgcloud.vorgang.common.GrpcQueryOperator;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod;
-import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.Operator;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse;
 import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult;
@@ -82,7 +82,7 @@ class StatisticRemoteServiceTest {
 		void shouldContainOperator(VorgangStatus vorgangStatus) {
 			var query = service.buildCountByVorgangStatusQuery(vorgangStatus);
 
-			assertThat(query.getOperator()).isEqualTo(Operator.EQUAL);
+			assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
 		}
 
 		@ParameterizedTest
@@ -129,7 +129,7 @@ class StatisticRemoteServiceTest {
 					.contains(
 							COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME,
 							String.format(StatisticRemoteService.WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, applicationName),
-							Operator.UNEQUAL,
+							GrpcQueryOperator.UNEQUAL,
 							GroupMethod.COUNT
 					);
 		}
@@ -170,7 +170,7 @@ class StatisticRemoteServiceTest {
 		void shouldContainOperator() {
 			var query = service.buildExistsWiedervorlageOverdueQuery();
 
-			assertThat(query.getOperator()).isEqualTo(Operator.LESS_THEN_OR_EQUAL_TO);
+			assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO);
 		}
 
 		@Test
@@ -325,7 +325,7 @@ class StatisticRemoteServiceTest {
 		void shouldHaveOperator() {
 			var query = callService();
 
-			assertThat(query.getOperator()).isEqualTo(Operator.EQUAL);
+			assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
 		}
 
 		@Test
diff --git a/pom.xml b/pom.xml
index 4f00d84c16a1cc6f981d55ab11f3d1d05e2eb9fd..63d83b82f45e7cb960bc3f0d3382c29e7a999119 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-		<vorgang-manager.version>2.3.0</vorgang-manager.version>
+		<vorgang-manager.version>2.4.0-SNAPSHOT</vorgang-manager.version>
 		<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
 		<user-manager.version>2.2.0</user-manager.version>