diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
index faf8b5a..2770869 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
@@ -20,6 +20,7 @@
 import lombok.extern.log4j.Log4j2;
 import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
 import org.eclipse.openk.contactbasedata.service.ContactService;
+import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -52,15 +53,22 @@
             @RequestParam( "moduleName") Optional<String> moduleName,
             @RequestParam( "withoutAssignedModule") Optional<Boolean> withoutAssignedModule,
             @RequestParam( "expiringDataInPast" ) Optional<Boolean> expiringDataInPast,
+            @RequestParam( "deletionLockExceeded") Optional<Boolean> delLockExceeded,
+            @RequestParam( "showAnonymized" ) Optional<Boolean> showAnonymized,
             @PageableDefault( sort = {"name"}, size = 20, direction = ASC) Pageable pageable ) {
+
+        SearchContactsFilterParams filter = new SearchContactsFilterParams();
+        filter.setContactType(contactType.orElse(null));
+        filter.setPersonTypeUuid(personTypeUuid.orElse(null));
+        filter.setSearchText(searchText.orElse(null));
+        filter.setModuleName(moduleName.orElse(null));
+        filter.setWithoutModule(withoutAssignedModule.orElse(Boolean.FALSE));
+        filter.setExpiringDataInPast(expiringDataInPast.orElse(Boolean.FALSE));
+        filter.setDelLockExceeded(delLockExceeded.orElse(Boolean.FALSE));
+        filter.setShowAnonymized(showAnonymized.orElse(Boolean.FALSE));
+
         return contactService.findDetailedContacts(
-                contactType.orElse(null),
-                personTypeUuid.orElse(null),
-                searchText.orElse( null),
-                moduleName.orElse(null),
-                withoutAssignedModule.orElse(Boolean.FALSE),
-                expiringDataInPast.orElse(Boolean.FALSE),
-                pageable);
+                filter, pageable);
     }
 
 }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
index e679c4f..f0ab807 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
@@ -34,17 +34,24 @@
             + " and (COALESCE(:moduleName) is null or COALESCE(:moduleName) is not null AND dc.fkContactId in (select distinct amc.tblContact.id from TblAssignmentModulContact amc where amc.modulName=:moduleName))"
             + " and (COALESCE(:withoutModule) = false or COALESCE(:withoutModule) = true AND dc.fkContactId not in "
             + "        (select distinct amc.tblContact.id from TblAssignmentModulContact amc)) "
-            + " and (COALESCE(:dateTimeNow) is null or COALESCE(:dateTimeNow) is not null AND dc.fkContactId in "
+            + " and (COALESCE(:filterExpiringDate) = false or COALESCE(:filterExpiringDate) = true AND dc.fkContactId in "
             + "        (select distinct amc.tblContact.id from TblAssignmentModulContact amc where "
             + "           amc.expiringDate is not null and amc.expiringDate < :dateTimeNow and "
             + "          (amc.deletionLockUntil is null or amc.deletionLockUntil is not null and amc.deletionLockUntil < :dateTimeNow )))"
+            + " and (COALESCE(:filterDelLockExceeded) = false or COALESCE(:filterDelLockExceeded) = true and dc.fkContactId in "
+            + "        (select distinct amc.tblContact.id from TblAssignmentModulContact amc where "
+            + "         amc.deletionLockUntil is not null and amc.deletionLockUntil < :dateTimeNow ))"
+            + " and (COALESCE(:showAnonymized) = false or COALESCE(:showAnonymized) = true and dc.anonymized = true)"
     )
-    Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType,
+    Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType, // NOSONAR _fd 07.02.2020 moving to a param object will not increase the readability here!
                                          @Param("personType") UUID personType,
                                          @Param("searchText") String searchText,
                                          @Param("moduleName") String moduleName,
                                          @Param("withoutModule") boolean withoutModule,
                                          @Param("dateTimeNow") Date dateTimeNow,
+                                         @Param("filterExpiringDate") boolean filterExpiringDate,
+                                         @Param("filterDelLockExceeded") boolean filterDelLockExceeded,
+                                         @Param("showAnonymized") boolean showAnonymized,
                                          Pageable pageable);
 }
 
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
index bd5ce40..f76429d 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
@@ -29,6 +29,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.Instant;
+import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
@@ -73,6 +75,7 @@
         TblAssignmentModulContact assignmentToSave = assignmentModulContactMapper.toTblAssignmentModulContact(assignmentDto);
         assignmentToSave.setUuid(UUID.randomUUID());
         assignmentToSave.setTblContact(tblContact);
+        assignmentToSave.setAssignmentDate(Date.from(Instant.now()));
 
         if ( !checkUniqueAssignmentForContactAndModuleForInsert(tblContact.getId(), assignmentDto.getModulName())) {
             throw new OperationDeniedException(OperationType.INSERT, "assignment.already.existing");
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
index 4dbe779..4092fb5 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
@@ -19,6 +19,7 @@
 import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
 import org.eclipse.openk.contactbasedata.repository.ContactRepository;
 import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository;
+import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -26,7 +27,6 @@
 
 import java.time.Instant;
 import java.util.Date;
-import java.util.UUID;
 
 @Log4j2
 @Service
@@ -38,31 +38,20 @@
     @Autowired
     private ContactMapper contactMapper;
 
-    public Page<VwDetailedContact> findDetailedContacts(String contactType,
-                                                        UUID personTypeUuid,
-                                                        String searchText,
-                                                        String moduleName,
-                                                        boolean withoutModule,
-                                                        boolean expiringDataInPast,
-                                                        Pageable pageable) {
-
-        if( contactType == null &&
-                personTypeUuid == null &&
-                searchText == null &&
-                moduleName == null &&
-                !withoutModule &&
-                !expiringDataInPast ) {
-            return detailedContactRepository.findAll(pageable);
-        }
-        else {
-            return detailedContactRepository.findByFilter( contactType,
-                    personTypeUuid,
-                    searchText != null ? searchText.toUpperCase() : null,
-                    moduleName,
-                    withoutModule,
-                    expiringDataInPast ? Date.from(Instant.now()) : null,
+    public Page<VwDetailedContact> findDetailedContacts(
+            SearchContactsFilterParams searchContactsFilterParams,
+            Pageable pageable) {
+            return detailedContactRepository.findByFilter(
+                    searchContactsFilterParams.getContactType(),
+                    searchContactsFilterParams.getPersonTypeUuid(),
+                    searchContactsFilterParams.getSearchText() != null ? searchContactsFilterParams.getSearchText().toUpperCase() : null,
+                    searchContactsFilterParams.getModuleName(),
+                    searchContactsFilterParams.isWithoutModule(),
+                    Date.from(Instant.now()),
+                    searchContactsFilterParams.isExpiringDataInPast(),
+                    searchContactsFilterParams.isDelLockExceeded(),
+                    searchContactsFilterParams.isShowAnonymized(),
                     pageable);
-        }
     }
 
 }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java b/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java
new file mode 100644
index 0000000..61a11e5
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java
@@ -0,0 +1,19 @@
+package org.eclipse.openk.contactbasedata.service.util;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.UUID;
+
+@Data
+@NoArgsConstructor
+public class SearchContactsFilterParams {
+    private String contactType;
+    private UUID personTypeUuid;
+    private String searchText;
+    private String moduleName;
+    private boolean withoutModule;
+    private boolean expiringDataInPast;
+    private boolean delLockExceeded;
+    private boolean showAnonymized;
+}
diff --git a/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql b/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql
index d83d9ec..6406c0c 100644
--- a/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql
+++ b/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql
@@ -112,8 +112,8 @@
 INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '8963aa38-d021-4dc9-bd70-d3734ccd20c4', 'I_P', 'internal person 2 (id=6)', null );
 INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'c862d604-5766-43d6-a7e8-a4bac2bd01e1', 'E_P', 'external person 1 (id=7)', null );
 INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'fa3d981b-a7d6-4965-a623-cdbc69404153', 'E_P', 'external person 2 (id=8)', null );
-INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'ceba21e9-e685-483b-840e-ad167860a696', 'COM', 'anonymous company A (id=9)', null );
-INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '7889c814-9752-4e4e-a9fe-b46f36a38ccd', 'COM', 'anonymous company B (id=10)', null );
+INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'ceba21e9-e685-483b-840e-ad167860a696', 'COM', 'anonymous company A (id=9)', true );
+INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '7889c814-9752-4e4e-a9fe-b46f36a38ccd', 'COM', 'anonymous company B (id=10)', true );
 INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '618a01a3-f348-44cc-9ddd-c9df946b0212', 'C_P', 'anoymous contact person A1 (id=11)', true );
 INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '4ed82474-3878-457a-baef-c28b8e486f25', 'C_P', 'anoymous contact persion A2 (id=12)', true );
 
@@ -543,7 +543,7 @@
 GRANT ALL ON TABLE public.tbl_assignment_modul_contact TO cbd_service;
 
 INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( 'dfc2979c-40e3-11ea-b77f-2e728ce88125', 1, 'Betriebstagebuch', '2020-01-19 10:23:54', '2021-01-19 00:00:00', '2021-01-19 00:00:00', 'seit Januar zugeordnet');
-INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( '4009bce2-40e5-11ea-b77f-2e728ce88125', 1, 'Störinfos', '2020-02-27 10:23:54', '2021-02-27 00:00:00', '2021-02-27 00:00:00', 'seit Februar zugeordnet');
+INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( '4009bce2-40e5-11ea-b77f-2e728ce88125', 1, 'Störinfos', '2020-02-27 10:23:54', '2019-02-27 00:00:00', '2019-02-27 00:00:00', 'seit Februar zugeordnet');
 
 -- -------------------------------------
 -- VIEWS -------------------------------
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
index 841fe76..86db98c 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
@@ -17,6 +17,7 @@
 import org.eclipse.openk.contactbasedata.ContactBaseDataApplication;
 import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
 import org.eclipse.openk.contactbasedata.service.ContactService;
+import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams;
 import org.eclipse.openk.contactbasedata.support.MockDataHelper;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +31,7 @@
 import org.springframework.test.web.servlet.MockMvc;
 
 import static org.hamcrest.Matchers.is;
-import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -53,8 +54,7 @@
     public void shouldReturnAllContacts() throws Exception {
         Page<VwDetailedContact> retPage = MockDataHelper.mockVDetailedContactPage();
 
-        when(contactService.findDetailedContacts(
-                isNull(), isNull(), isNull(), isNull(), anyBoolean(), anyBoolean(), any(Pageable.class))).thenReturn(retPage);
+        when(contactService.findDetailedContacts(any(SearchContactsFilterParams.class), any(Pageable.class))).thenReturn(retPage);
 
         mockMvc.perform(get("/contacts"))
                 .andExpect(status().is2xxSuccessful())
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
index f3ed1c4..d968cb4 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
@@ -17,6 +17,7 @@
 import org.eclipse.openk.contactbasedata.config.TestConfiguration;
 import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
 import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository;
+import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams;
 import org.eclipse.openk.contactbasedata.support.MockDataHelper;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,8 +49,9 @@
     public void shouldFindDetailedContactsProperly() {
         Page<VwDetailedContact> mockPaged = MockDataHelper.mockVDetailedContactPage();
         when(detailedContactRepository.findAll(any(Pageable.class))).thenReturn(mockPaged);
+        SearchContactsFilterParams filter = new SearchContactsFilterParams();
         Page<VwDetailedContact> retPage = contactService.findDetailedContacts(
-                null, null, null, null, false, false, PageRequest.of(0, 20));
+                filter, PageRequest.of(0, 20));
 
         assertEquals(mockPaged.getTotalElements(), retPage.getTotalElements());
     }
