diff --git a/pluto-server/pom.xml b/pluto-server/pom.xml
index cbb0a3ba1797a9b4f158c1ea79f84a4abbab2603..38c51b68ce30999e1882a3abe215c2e2120c3ac3 100644
--- a/pluto-server/pom.xml
+++ b/pluto-server/pom.xml
@@ -28,6 +28,7 @@
 		<spring-admin.version>2.3.1</spring-admin.version>
 
 		<commons-io.version>2.8.0</commons-io.version>
+		<commons-collections.version>4.4</commons-collections.version>
 
 		<spring-boot.build-image.imageName>docker.ozg-sh.de/pluto:build-latest</spring-boot.build-image.imageName>
 
@@ -35,7 +36,7 @@
 		<jsoup.version>1.13.1</jsoup.version>
 
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		
+
 	</properties>
 
 	<dependencies>
@@ -98,6 +99,11 @@
 			<artifactId>commons-io</artifactId>
 			<version>${commons-io.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-collections4</artifactId>
+			<version>${commons-collections.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>com.thedeanda</groupId>
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryImpl.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryImpl.java
index ce737d3b740a438f420262c37297a3ec0602e53d..700960e4ced11bf425dd26cee744f7ad324649b3 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryImpl.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryImpl.java
@@ -6,6 +6,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
@@ -30,14 +31,19 @@ class VorgangHeaderRepositoryImpl implements CustomVorgangHeaderRepository {
 
 	@Override
 	public Page<VorgangHeader> findAll(FindVorgangRequest request) {
-		return execAggration(aggregationBuilder(buildPageable(request)).withFilterBy(request.getFilterBy()).build(), buildPageable(request));
+		return executeRequest(request);
 	}
 
 	@Override
 	public Page<VorgangHeader> searchBy(FindVorgangRequest request) {
-		return execAggration(
-				aggregationBuilder(buildPageable(request)).withSearchBy(request.getSearchBy()).withFilterBy(request.getFilterBy()).build(),
-				buildPageable(request));
+		return executeRequest(request);
+	}
+
+	private Page<VorgangHeader> executeRequest(FindVorgangRequest request) {
+		var resultList = execAggration(
+				aggregationBuilder(buildPageable(request)).withSearchBy(request.getSearchBy()).withFilterBy(request.getFilterBy()).build());
+
+		return new PageImpl<>(resultList, buildPageable(request), countTotalVorgaenge(request.getFilterBy()));
 	}
 
 	Pageable buildPageable(FindVorgangRequest request) {
@@ -48,14 +54,22 @@ class VorgangHeaderRepositoryImpl implements CustomVorgangHeaderRepository {
 		return new AggregationBuilder(pageRequest);
 	}
 
-	private Page<VorgangHeader> execAggration(Aggregation aggregation, Pageable pageable) {
+	private List<VorgangHeader> execAggration(Aggregation aggregation) {
 		var result = template.aggregate(aggregation, VorgangHeader.class, VorgangHeader.class);
 
-		return new PageImpl<>(result.getMappedResults(), pageable, countTotalVorgaenge());
+		return result.getMappedResults();
 	}
 
-	private long countTotalVorgaenge() {
-		return template.count(Query.query(new Criteria()), Vorgang.COLLECTION_NAME);
+	private long countTotalVorgaenge(FilterBy filterBy) {
+		return template.count(Query.query(filterToCriteria(filterBy)), Vorgang.COLLECTION_NAME);
+	}
+
+	private Criteria filterToCriteria(FilterBy filterBy) {
+		if (CollectionUtils.isEmpty(filterBy.getOrganisationseinheitIds()))
+			return new Criteria();
+		else
+			return new Criteria(Vorgang.FIELD_ORGANISATIONSEINHEIT).in(filterBy.getOrganisationseinheitIds());
+
 	}
 
 	@RequiredArgsConstructor
@@ -65,7 +79,7 @@ class VorgangHeaderRepositoryImpl implements CustomVorgangHeaderRepository {
 		private Optional<FilterBy> filterBy = Optional.empty();
 
 		AggregationBuilder withSearchBy(String searchBy) {
-			this.searchBy = Optional.of(searchBy);
+			this.searchBy = Optional.ofNullable(searchBy);
 			return this;
 		}
 
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
index de90bb6244132751e4936d6f4d69089ff4e24fdb..1c87b0d2a6302a2145ceeab5f90e47781a05c533 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
@@ -20,26 +20,24 @@ class VorgangRepository {
 	@Autowired
 	private MongoOperations mongoOperations;
 
-	Optional<Vorgang> findById(String vorgangId) {
-
+	public Optional<Vorgang> findById(String vorgangId) {
 		return Optional.ofNullable(mongoOperations.findOne(
 				query(where(Vorgang.MONGODB_FIELDNAME_ID).is(vorgangId)),
 				Vorgang.class));
 	}
 
-	Vorgang findByIdAndVersion(String vorgangId, long version) {
-
+	public Vorgang findByIdAndVersion(String vorgangId, long version) {
 		return mongoOperations.findOne(
 				query(where(Vorgang.MONGODB_FIELDNAME_ID).is(vorgangId).and(Vorgang.MONGODB_FIELDNAME_VERSION).is(version)),
 				Vorgang.class);
 	}
 
-	Vorgang save(Vorgang vorgang) {
+	public Vorgang save(Vorgang vorgang) {
 
 		return mongoOperations.save(vorgang);
 	}
 
-	void updateStatus(String vorgangId, long version, Status status) {
+	public void updateStatus(String vorgangId, long version, Status status) {
 
 		mongoOperations.updateFirst(
 				queryVorgangByIdAndVersion(vorgangId, version),
@@ -49,9 +47,9 @@ class VorgangRepository {
 				Vorgang.class);
 	}
 
-	void updateStatusWithoutVersionCheck(String vorgangId, Status status) {
+	public void updateStatusWithoutVersionCheck(String vorgangId, Status status) {
 		mongoOperations.updateFirst(
-				query(where(Vorgang.MONGODB_FIELDNAME_ID).is(vorgangId)),
+				queryById(vorgangId),
 				new Update()
 						.inc(Vorgang.MONGODB_FIELDNAME_VERSION, 1)
 						.set(Vorgang.MONGODB_FIELDNAME_STATUS, status),
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/FilterByTestFactory.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/FilterByTestFactory.java
index e5ef8723dcf53c227b925f254975d27a42e38447..8f631da6fb55e06f401f409b0d14a23f9fd49f5a 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/FilterByTestFactory.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/FilterByTestFactory.java
@@ -2,12 +2,12 @@ package de.itvsh.ozg.pluto.vorgang;
 
 public class FilterByTestFactory {
 
-	public static String ORGANISATIONSEINHEIT_ID = "132654";
+	public static String ORGANISATIONSEINHEIT_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID;
 
 	public static FilterBy createEmpty() {
 		return FilterBy.builder().build();
 	}
-	
+
 	public static FilterBy create() {
 		return createBuilder().build();
 	}
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryITCase.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryITCase.java
index 9ba0e03dd8ffb7c296ce283046e1819096fea0ab..104c17a21f7d71c7f7a56cf282a339354f955bd6 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryITCase.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepositoryITCase.java
@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*;
 
 import java.time.ZonedDateTime;
 import java.time.temporal.ChronoUnit;
+import java.util.UUID;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
@@ -55,8 +56,12 @@ class VorgangHeaderRepositoryITCase {
 		@Nested
 		class TestWithFilterByOrganisationseinheit {
 
-			final FindVorgangRequest request = FindVorgangRequestTestFactory.createBuilder().searchBy(SEARCH_BY).filterBy(buildFilter()).limit(10)
-					.offset(0).build();
+			private FilterBy filterBy = FilterByTestFactory.createBuilder().clearOrganisationseinheitIds()
+					.organisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID).build();
+
+			private FindVorgangRequest request = FindVorgangRequestTestFactory.createBuilder().searchBy(SEARCH_BY).offset(0)
+					.filterBy(filterBy).limit(10)
+					.build();
 
 			@ParameterizedTest
 			@EnumSource
@@ -69,6 +74,7 @@ class VorgangHeaderRepositoryITCase {
 
 				assertThat(result).hasSize(1);
 			}
+
 		}
 
 		private Vorgang buildWithEingangKennz(String kennz, Status status) {
@@ -84,11 +90,6 @@ class VorgangHeaderRepositoryITCase {
 			var eingang = EingangTestFactory.createBuilder().header(header).zustaendigeStelle(zustaendigeStelle).build();
 			return VorgangTestFactory.createBuilder().id(null).status(status).eingang(eingang).build();
 		}
-
-		private FilterBy buildFilter() {
-			return FilterByTestFactory.createBuilder().clearOrganisationseinheitIds()
-					.organisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID).build();
-		}
 	}
 
 	@Nested
@@ -207,32 +208,48 @@ class VorgangHeaderRepositoryITCase {
 	@Nested
 	class TestFilterByOrganisationseinheit {
 
-		private static final String ORGANISATIONSEINHEIT_ID = "42";
+		private static final String OTHER_ZUSTAENDIGESTELLE_ID = UUID.randomUUID().toString();
 
 		@BeforeEach
 		void prepareDatabase() {
 			mongoOperations.dropCollection(Vorgang.class);
 
-			mongoOperations.save(buildWithOrganisationseinheitId());
-			mongoOperations.save(VorgangTestFactory.createBuilder().id("42").build());
+			mongoOperations.save(buildWithOtherOrganisationseinheitId());
+			mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build());
 		}
 
-		private Vorgang buildWithOrganisationseinheitId() {
-			var zustaendigeStelle = ZustaendigeStelleTestFactory.createBuilder().organisationseinheitenId(ORGANISATIONSEINHEIT_ID).build();
+		private Vorgang buildWithOtherOrganisationseinheitId() {
+			var zustaendigeStelle = ZustaendigeStelleTestFactory.createBuilder().organisationseinheitenId(OTHER_ZUSTAENDIGESTELLE_ID).build();
 			var eingang = EingangTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build();
-			return VorgangTestFactory.createBuilder().id("44").eingang(eingang).build();
+
+			return VorgangTestFactory.createBuilder().id(null).clearEingangs().eingang(eingang).build();
 		}
 
 		@Test
-		void shouldReturnFilteredVorgaenge() {
+		void shouldHaveOneAsTotalElements() {
 			var vorgangHeaderPage = repository.findAll(buildRequest());
 
 			assertThat(vorgangHeaderPage.getTotalElements()).isEqualTo(1);
 		}
 
+		@Test
+		void shouldReturnOnlyOneVorgang() {
+			var vorgangHeaderPage = repository.findAll(buildRequest());
+
+			assertThat(vorgangHeaderPage.getNumberOfElements()).isEqualTo(1);
+		}
+
+		@Test
+		void shouldHaveOnlyOnePage() {
+			var vorgangHeaderPage = repository.findAll(buildRequest());
+
+			assertThat(vorgangHeaderPage.getTotalPages()).isEqualTo(1);
+		}
+
 		private FindVorgangRequest buildRequest() {
-			return FindVorgangRequestTestFactory.createBuilder().offset(0).limit(10).filterBy(
-					FilterBy.builder().organisationseinheitId(ORGANISATIONSEINHEIT_ID).build()).searchBy(StringUtils.EMPTY).build();
+			return FindVorgangRequestTestFactory.createBuilder().offset(0).limit(1).searchBy(StringUtils.EMPTY)
+					.filterBy(FilterBy.builder().organisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID).build())
+					.build();
 		}
 	}
 }
\ No newline at end of file
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangITCase.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangITCase.java
index 6d42c4e1c3ef175e8c2ea88d28dc2045b85e634c..c84b49ca16c63a9432a29724b97b9aef31988e38 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangITCase.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/vorgang/VorgangITCase.java
@@ -127,130 +127,147 @@ class VorgangITCase {
 	class TestFindVorgang {
 
 		private final StreamRecorder<GrpcFindVorgangResponse> responseObserver = StreamRecorder.create();
-		
+
 		@Nested
 		class TestFindAll {
-			
+
 			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().clearFilterBy().clearSearchBy().build();
-			
+
 			@BeforeEach
 			void prepareDatabase() {
 				mongoOperations.dropCollection(Vorgang.class);
-				
+
 				mongoOperations.save(VorgangTestFactory.createBuilder().id("1").build());
 				mongoOperations.save(VorgangTestFactory.createBuilder().id("2").build());
 			}
-			
+
 			@Test
 			void shouldReturnVorgaenge() {
 				callServiceFindVorgang(request);
-				
+
 				var response = responseObserver.getValues();
-				
+
 				assertThat(response.get(0).getVorgangList()).hasSize(2);
 			}
 		}
+
 		@Nested
 		class TestFindAllSearchBy {
-			
+
 			private final String SEARCH_BY = "ShouldBeIncluded";
-			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().setSearchBy(SEARCH_BY).clearFilterBy().build();
-			
+			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().setSearchBy(SEARCH_BY).clearFilterBy()
+					.build();
+
 			@BeforeEach
 			void prepareDatabase() {
 				mongoOperations.dropCollection(Vorgang.class);
-				
-				mongoOperations.save(VorgangTestFactory.createBuilder().id("1"). build());
+
+				mongoOperations.save(VorgangTestFactory.createBuilder().id("1").build());
 				mongoOperations.save(buildVorgangWithRequestId("2", SEARCH_BY));
 			}
-			
+
 			@Test
 			void shouldReturnVorgaenge() {
 				callServiceFindVorgang(request);
-				
+
 				var response = responseObserver.getValues();
-				
+
 				assertThat(response.get(0).getVorgangList()).hasSize(1);
 				assertThat(response.get(0).getVorgangList().get(0).getId()).isEqualTo("2");
 			}
 		}
-		
+
 		@Nested
 		class TestFindAllFilterBy {
-			
+
 			private final String ORGANISATIONSEINHEIT_ID = "094321";
 			private final GrpcFilterBy FILTER_BY = GrpcFilterByTestFactory.createBuilder().addOrganisationseinheitId(ORGANISATIONSEINHEIT_ID).build();
-			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().setFilterBy(FILTER_BY).clearSearchBy().build();
-			
+			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder()
+					.setFilterBy(FILTER_BY).clearSearchBy()
+					.setLimit(1).build();
+
 			@BeforeEach
 			void prepareDatabase() {
 				mongoOperations.dropCollection(Vorgang.class);
-				
-				mongoOperations.save(VorgangTestFactory.createBuilder().id("1"). build());
+
+				mongoOperations.save(VorgangTestFactory.createBuilder().id("1").build());
 				mongoOperations.save(buildVorgangWithOrganisationseinheitId("2", ORGANISATIONSEINHEIT_ID));
 			}
-			
+
 			@Test
-			void shouldReturnVorgaenge() {
+			void shouldReturnOnlyMatchingVorgang() {
 				callServiceFindVorgang(request);
-				
+
 				var response = responseObserver.getValues();
-				
+
 				assertThat(response.get(0).getVorgangList()).hasSize(1);
 				assertThat(response.get(0).getVorgangList().get(0).getId()).isEqualTo("2");
 			}
+
+			@Test
+			void shouldReturnOneTotalPages() {
+				callServiceFindVorgang(request);
+
+				var response = responseObserver.getValues();
+
+				assertThat(response.get(0).getTotal()).isEqualTo(1);
+			}
 		}
-		
+
 		@Nested
 		class TestFindAllSearchAndFilterBy {
-			
+
 			private final String SEARCH_BY = "ShouldBeIncluded";
 			private final String ORGANISATIONSEINHEIT_ID = "094321";
 			private final GrpcFilterBy FILTER_BY = GrpcFilterByTestFactory.createBuilder().addOrganisationseinheitId(ORGANISATIONSEINHEIT_ID).build();
-			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().setFilterBy(FILTER_BY).setSearchBy(SEARCH_BY).build();
-			
+			private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.createBuilder().setFilterBy(FILTER_BY)
+					.setSearchBy(SEARCH_BY).build();
+
 			@BeforeEach
 			void prepareDatabase() {
 				mongoOperations.dropCollection(Vorgang.class);
-				
+
 				mongoOperations.save(VorgangTestFactory.createBuilder().id("1").build());
 				mongoOperations.save(buildVorgangWithRequestIdAndOrganisationseinheitId("2", ORGANISATIONSEINHEIT_ID, SEARCH_BY));
 			}
-			
+
 			@Test
 			void shouldReturnVorgaenge() {
 				callServiceFindVorgang(request);
-				
+
 				var response = responseObserver.getValues();
-				
+
 				assertThat(response.get(0).getVorgangList()).hasSize(1);
 				assertThat(response.get(0).getVorgangList().get(0).getId()).isEqualTo("2");
-			}			
+			}
 		}
+
 		private Vorgang buildVorgangWithRequestId(String id, String searchBy) {
 			return buildVorgangWithEingang(id, EingangTestFactory.createBuilder().header(buildEingangHeader(searchBy)).build());
 		}
-		
+
 		private Vorgang buildVorgangWithRequestIdAndOrganisationseinheitId(String id, String organisationseinheitId, String searchBy) {
-			return buildVorgangWithEingang(id, EingangTestFactory.createBuilder().header(buildEingangHeader(searchBy)).zustaendigeStelle(buildZustaendigeStelle(organisationseinheitId)).build());
+			return buildVorgangWithEingang(id, EingangTestFactory.createBuilder().header(buildEingangHeader(searchBy))
+					.zustaendigeStelle(buildZustaendigeStelle(organisationseinheitId)).build());
 		}
-		
+
 		private Vorgang buildVorgangWithOrganisationseinheitId(String id, String organisationseinheitId) {
-			return buildVorgangWithEingang(id, EingangTestFactory.createBuilder().zustaendigeStelle(buildZustaendigeStelle(organisationseinheitId)).build());
+			return buildVorgangWithEingang(id,
+					EingangTestFactory.createBuilder().zustaendigeStelle(buildZustaendigeStelle(organisationseinheitId)).build());
 		}
-		
+
 		private EingangHeader buildEingangHeader(String searchBy) {
 			return EingangHeaderTestFactory.createBuilder().requestId(searchBy).build();
 		}
-		
+
 		private ZustaendigeStelle buildZustaendigeStelle(String organisationseinheitId) {
 			return ZustaendigeStelleTestFactory.createBuilder().organisationseinheitenId(organisationseinheitId).build();
 		}
-		
+
 		private Vorgang buildVorgangWithEingang(String id, Eingang eingang) {
 			return VorgangTestFactory.createBuilder().id(id).eingang(eingang).build();
 		}
-		
+
 		private void callServiceFindVorgang(GrpcFindVorgangRequest request) {
 			service.findVorgang(request, responseObserver);
 		}