diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php
index 446a531908009a98fc58aa1b815a0477714590af..d7f8e7f80a93a53521c0ec4d3696457ec533315e 100644
--- a/Classes/Controller/JoblistController.php
+++ b/Classes/Controller/JoblistController.php
@@ -572,20 +572,20 @@ class JoblistController extends ActionController {
 	 * @param int $rootPageId
 	 * @throws AspectNotFoundException
 	 */
-	protected function assignFilterValues(int $rootPageId, array $filters): void {
-		$countries = $this->companyRepository->getAllCountries($rootPageId);
+	protected function assignFilterValues(int $rootPageId, array $filters = []): void {
+		$countries = $this->companyRepository->getAllCountries($rootPageId, $filters['filterByLocation'] ?? []);
 		$this->view->assign('countries', $countries);
 
-		$cities = $this->companyRepository->getAllCities($rootPageId);
+		$cities = $this->companyRepository->getAllCities($rootPageId, $filters['filterByLocation'] ?? []);
 		$this->view->assign('cities', $cities);
 
-		$companies = $this->companyRepository->getAllCompanyNames($rootPageId);
+		$companies = $this->companyRepository->getAllCompanyNames($rootPageId, $filters['filterByLocation'] ?? []);
 		$this->view->assign('companies', $companies);
 
-		$departments = $this->departmentRepository->findAll();
+		$departments = $this->departmentRepository->findAllByFilter($filters['filterByDepartment'] ?? []);
 		$this->view->assign('departments', $departments);
 
-		$experienceLevels = $this->experienceLevelRepository->findAll();
+		$experienceLevels = $this->experienceLevelRepository->findAllByFilter($filters['filterByExperienceLevel'] ?? []);
 		$this->view->assign('experienceLevels', $experienceLevels);
 	}
 
diff --git a/Classes/Domain/Repository/CompanyRepository.php b/Classes/Domain/Repository/CompanyRepository.php
index 4a00243562951b188f74ca74ac21cd147acaa5ae..86ea052540c0daa29a3b8ab7bbedaf8025293e3f 100644
--- a/Classes/Domain/Repository/CompanyRepository.php
+++ b/Classes/Domain/Repository/CompanyRepository.php
@@ -28,8 +28,10 @@ namespace SGalinski\SgJobs\Domain\Repository;
 
 use SGalinski\SgJobs\Domain\Model\Company;
 use TYPO3\CMS\Core\Context\Context;
+use TYPO3\CMS\Core\Context\Exception\AspectNotFoundException;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
+use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 /**
@@ -51,11 +53,12 @@ class CompanyRepository extends Repository {
 	 * Returns all countries filtered by page id
 	 *
 	 * @param int $pageUid
+	 * @param array $filters
 	 * @return array
-	 * @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
+	 * @throws AspectNotFoundException
 	 */
-	public function getAllCountries($pageUid) {
-		$result = $this->getAllCompanies($pageUid)->toArray();
+	public function getAllCountries(int $pageUid, array $filters = []) {
+		$result = $this->getAllCompanies($pageUid, $filters)->toArray();
 
 		$countryArray = [];
 		/** @var Company $company */
@@ -74,11 +77,12 @@ class CompanyRepository extends Repository {
 	 * Returns all filtered cities
 	 *
 	 * @param int $pageUid
+	 * @param array $filters
 	 * @return array
-	 * @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
+	 * @throws AspectNotFoundException
 	 */
-	public function getAllCities($pageUid) {
-		$result = $this->getAllCompanies($pageUid)->toArray();
+	public function getAllCities(int $pageUid, array $filters = []) {
+		$result = $this->getAllCompanies($pageUid, $filters)->toArray();
 
 		$cityArray = [];
 		/** @var Company $company */
@@ -97,11 +101,12 @@ class CompanyRepository extends Repository {
 	 * Returns all company names filtered by page id
 	 *
 	 * @param int $pageUid
+	 * @param array $filters
 	 * @return array
-	 * @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
+	 * @throws AspectNotFoundException
 	 */
-	public function getAllCompanyNames($pageUid) {
-		$result = $this->getAllCompanies($pageUid)->toArray();
+	public function getAllCompanyNames(int $pageUid, array $filters = []) {
+		$result = $this->getAllCompanies($pageUid, $filters)->toArray();
 
 		$companyArray = [];
 		/** @var Company $company */
@@ -120,10 +125,11 @@ class CompanyRepository extends Repository {
 	 * Returns all companies filtered by page id
 	 *
 	 * @param int $pageUid
-	 * @return object[]|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
-	 * @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
+	 * @param array $filters
+	 * @return object[]|QueryResultInterface
+	 * @throws AspectNotFoundException
 	 */
-	public function getAllCompanies($pageUid) {
+	public function getAllCompanies(int $pageUid, array $filters = []) {
 		$companyConstraints = [];
 		$query = $this->createQuery();
 		$querySettings = $query->getQuerySettings();
@@ -141,6 +147,15 @@ class CompanyRepository extends Repository {
 		);
 
 		$companyConstraints[] = $query->equals('pid', $pageUid);
+
+		if (count($filters) > 0) {
+			$constraints = [];
+			foreach ($filters as $filter) {
+				$constraints[] = $query->equals('uid', $filter);
+			}
+			$companyConstraints[] = $query->logicalOr($constraints);
+		}
+
 		$query->matching($query->logicalAnd($companyConstraints));
 
 		return $query->execute();
diff --git a/Classes/Domain/Repository/DepartmentRepository.php b/Classes/Domain/Repository/DepartmentRepository.php
index 21c5c1e542880f1b6f1e9a14aef9fc28411a9a56..d08631a068d0e4e74b11564d3e9ffec61bf14dc0 100644
--- a/Classes/Domain/Repository/DepartmentRepository.php
+++ b/Classes/Domain/Repository/DepartmentRepository.php
@@ -27,6 +27,7 @@ namespace SGalinski\SgJobs\Domain\Repository;
  */
 
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
+use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 /**
@@ -43,4 +44,25 @@ class DepartmentRepository extends Repository {
 		'sorting' => QueryInterface::ORDER_ASCENDING,
 		'title' => QueryInterface::ORDER_ASCENDING
 	];
+
+	/**
+	 * Finds all departments with optional filters
+	 *
+	 * @param array $filters
+	 * @return object[]|QueryResultInterface
+	 */
+	public function findAllByFilter(array $filters = []) {
+		if (count($filters) < 1) {
+			return $this->findAll();
+		}
+
+		$query = $this->createQuery();
+		$constraints = [];
+		foreach ($filters as $filter) {
+			$constraints[] = $query->equals('uid', $filter);
+		}
+
+		$query->matching($query->logicalOr($constraints));
+		return $query->execute();
+	}
 }
diff --git a/Classes/Domain/Repository/ExperienceLevelRepository.php b/Classes/Domain/Repository/ExperienceLevelRepository.php
index 905317133b9c3c0fbe7e55e0b59ee246a407cdc6..f36b369f44a053ea7e57dbfc48b362e8e021e0ce 100644
--- a/Classes/Domain/Repository/ExperienceLevelRepository.php
+++ b/Classes/Domain/Repository/ExperienceLevelRepository.php
@@ -27,6 +27,7 @@ namespace SGalinski\SgJobs\Domain\Repository;
  */
 
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
+use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 /**
@@ -43,4 +44,25 @@ class ExperienceLevelRepository extends Repository {
 		'sorting' => QueryInterface::ORDER_ASCENDING,
 		'title' => QueryInterface::ORDER_ASCENDING
 	];
+
+	/**
+	 * Finds all experience levels with optional filters
+	 *
+	 * @param array $filters
+	 * @return object[]|QueryResultInterface
+	 */
+	public function findAllByFilter(array $filters = []) {
+		if (count($filters) < 1) {
+			return $this->findAll();
+		}
+
+		$query = $this->createQuery();
+		$constraints = [];
+		foreach ($filters as $filter) {
+			$constraints[] = $query->equals('uid', $filter);
+		}
+
+		$query->matching($query->logicalOr($constraints));
+		return $query->execute();
+	}
 }