diff --git a/entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod b/entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod
index f692c1451d83338809984e9059a2b93024fd9f67..dd41eac0706deed58a191d5085150abd2651c081 100644
--- a/entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod
+++ b/entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod
@@ -18,6 +18,12 @@
       <title>Condition</title>
       <contentType>FILTER_TREE</contentType>
       <valueProcess>%aditoprj%/entity/DuplicateScanConditionConfig_entity/entityfields/condition/valueProcess.js</valueProcess>
+      <onValueChange>%aditoprj%/entity/DuplicateScanConditionConfig_entity/entityfields/condition/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
     </entityField>
     <entityProvider>
       <name>ScanConditionConfigsProvider</name>
@@ -79,6 +85,7 @@
     <dbRecordContainer>
       <name>DBRecordContainer</name>
       <alias>Data_alias</alias>
+      <onDBUpdate>%aditoprj%/entity/DuplicateScanConditionConfig_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js</onDBUpdate>
       <linkInformation>
         <linkInformation>
           <name>22217bb2-6fbf-4a7f-94f3-b200ef54c49f</name>
diff --git a/entity/DuplicateScanConditionConfig_entity/entityfields/condition/onValueChange.js b/entity/DuplicateScanConditionConfig_entity/entityfields/condition/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..b47529a485d83458c701a2769bd3baedbe3071f0
--- /dev/null
+++ b/entity/DuplicateScanConditionConfig_entity/entityfields/condition/onValueChange.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.logging");
+logging.log("condition onValueChange -> " + vars.get("$field.CONDITION"));
\ No newline at end of file
diff --git a/entity/DuplicateScanConditionConfig_entity/entityfields/condition/valueProcess.js b/entity/DuplicateScanConditionConfig_entity/entityfields/condition/valueProcess.js
index a69cee128a7969b20c1f46587bbc3a6f51a9d221..0f811becde3b650522124a8f399da0b889d6f3ab 100644
--- a/entity/DuplicateScanConditionConfig_entity/entityfields/condition/valueProcess.js
+++ b/entity/DuplicateScanConditionConfig_entity/entityfields/condition/valueProcess.js
@@ -2,7 +2,7 @@ import("system.logging");
 import("system.vars");
 import("system.result");
 
-logging.log("condition -> " + JSON.stringify(vars.get("$field.CONDITION")));
+logging.log("condition value process -> " + JSON.stringify(vars.get("$field.CONDITION")));
 if(vars.get("$field.CONDITION") == "")
 {
     let entityToScan = vars.get("$param.EntityToFilter_param");
diff --git a/entity/DuplicateScanConditionConfig_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js b/entity/DuplicateScanConditionConfig_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..113fc36d8f02c3b2a3387a4d7b9bf33825286d29
--- /dev/null
+++ b/entity/DuplicateScanConditionConfig_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.logging");
+logging.log("onDbUpdate condition -> " + vars.get("$field.CONDITION"));
\ No newline at end of file
diff --git a/entity/DuplicateScan_entity/entityfields/testactiongroup/children/testduplicatescan/onActionProcess.js b/entity/DuplicateScan_entity/entityfields/testactiongroup/children/testduplicatescan/onActionProcess.js
index dd1346996c5fd2ba21f747dc895d3729b97e443c..96cb4de75f33aa54561eaa584334b4ee0ae82573 100644
--- a/entity/DuplicateScan_entity/entityfields/testactiongroup/children/testduplicatescan/onActionProcess.js
+++ b/entity/DuplicateScan_entity/entityfields/testactiongroup/children/testduplicatescan/onActionProcess.js
@@ -1,2 +1,5 @@
+import("system.logging");
 import("DuplicateScanner_lib");
-DuplicateScannerUtils.ScanForDuplicates("PersonenDub", "");
\ No newline at end of file
+
+var duplicates = DuplicateScannerUtils.ScanForDuplicates("FilterName", "Person_entity", "", ["PERSONID", "LASTNAME"]);
+logging.log("duplicates -> " + duplicates);
\ No newline at end of file
diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index ffc05eb37c428cdd073a1c636f500838e8c0abbc..2bb7a2da1a476da61125c4a93d8bf73cda7caef2 100644
--- a/process/DuplicateScanner_lib/process.js
+++ b/process/DuplicateScanner_lib/process.js
@@ -10,55 +10,89 @@ import("system.entities");
  */
 function DuplicateScannerUtils() {}
 
-DuplicateScannerUtils.ScanForDuplicates = function(pFilterName, pFilterValues)
+DuplicateScannerUtils.ScanForDuplicates = function(pFilterName, pTargetEntity,  pFilterValues, pTargetEntityResultFields)
 {
-    let configuredFilters = _DuplicateScannerUtils._loadFiltersByName(pFilterName);
+    let configuredFilters = _DuplicateScannerUtils._loadFilters(pFilterName, pTargetEntity);
     
-    logging.log("configuredFilters filter -> " + configuredFilters[0][0]);
-    logging.log("configuredFilters COUNT_CHARACTERS_TO_USE -> " + configuredFilters[0][1]);
-    logging.log("configuredFilters EXTERNAL_SERVICE_USAGE_ALLOWED -> " + configuredFilters[0][2]);
-    
-    let preFilteredContacts = _DuplicateScannerUtils._applyPreFilter(configuredFilters);
+    logging.log("configuredFilters filter -> " + configuredFilters);
+    logging.log("configuredFilters 0 -> " + configuredFilters[0]);
+
+
+    let possibleDuplicates = _DuplicateScannerUtils._applyPreFilter(pTargetEntity, configuredFilters, pTargetEntityResultFields);
     
 //    if(_DuplicateScannerUtils._isExternalScanServiceAvailable())
 //    {
 //        
 //    }
+    
+    return possibleDuplicates;
 }
 
 
 function _DuplicateScannerUtils() {}
 
-_DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCharactersToUseRay)
+_DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCharactersToUseRay, pTargetEntityResultFields)
 {
-    var maxResultsTreshold = 3;
-    
+    var maxResultsTreshold = 4;
+    var combinedFilter = {};
     logging.log("pFilterCountCharactersToUseRay.length -> " + pFilterCountCharactersToUseRay.length);
-    //entities.createConfigForLoadingRows().filter()
+
     for (i = 0; i < pFilterCountCharactersToUseRay.length; i++) 
     {
         let filter = pFilterCountCharactersToUseRay[i][0];
         let countCharsOfValueToUse = pFilterCountCharactersToUseRay[i][1];
         
+        if(filter == null || filter == "")
+            continue;
+        
+        filter = JSON.parse(filter).filter;
+        
+        logging.log("filter -> " + JSON.stringify(filter));
+        logging.log("filter.childs -> " + JSON.stringify(filter.childs));
+        logging.log("filter.childs count -> " + filter.childs.length);
+        
+        if(i == 0)
+            combinedFilter = filter;
+        else
+        {
+            //Extend the current combined filter with the next filter condition to further refine the results
+            logging.log("aktueller combinedFilter -> " + JSON.stringify(combinedFilter));
+            combinedFilter.childs.push(filter.childs[0]);
+            logging.log("filter.childs hinzufügen in combinedFilter -> " + JSON.stringify(filter.childs));
+        }
+        
+        logging.log("combinedFilter -> " + JSON.stringify(combinedFilter));
+        
         //todo insert value into filter
         
         let loadRowsConfig = entities.createConfigForLoadingRows()
                              .entity(pTargetEntity)
-                             .filter(filter);
+                             .filter(JSON.stringify(combinedFilter));
                              
         let rowCount = entities.getRowCount(loadRowsConfig);                 
         
-        if(rowCount <= maxResultsTreshold && rowCount > 0)
+        logging.log("rowCount -> " + rowCount);
+        
+        if(rowCount > maxResultsTreshold)
         {
-            return entities.getRows(loadRowsConfig)
-            //we're in the treshold, return the data
+            logging.log("zu viele rows gefundenn nächsten Filter anwenden -> rowCount:" + rowCount + " maxResultsTreshold:" + maxResultsTreshold);
+            //Found more rows than allowed by the threshold, run next filter to narrow the results
+            continue;
         }
         else if(rowCount <= 0)
         {
-            //no rows found, probably use the current combined filter or return nothing?
+            return [];
+        }
+        else
+        {
+            //we're in the treshold, return the data
+            
+            loadRowsConfig = loadRowsConfig.fields(pTargetEntityResultFields);
+            
+            let resultRows = entities.getRows(loadRowsConfig);
+            logging.log("foundRows -> " + JSON.stringify(resultRows));
+            return resultRows;
         }
-
-
     }
 }
 
@@ -73,12 +107,14 @@ _DuplicateScannerUtils._callExternalScanService = function(pFormattedJsonValues)
     //todo load config and call ws
 }
 
-_DuplicateScannerUtils._loadFiltersByName = function(pFilterName)
+_DuplicateScannerUtils._loadFilters = function(pFilterName, pTargetEntity)
 {
     //entities.createConfigForLoadingRows().entity("DuplicateScanConditionConfig_entity")..fields(["$field.CONDITION", "$field.CONDITION_CONFIG_NAME", "$field.COUNT_CHARACTERS_TO_USE"])
     let query = "select \"CONDITION\", COUNT_CHARACTERS_TO_USE, EXTERNAL_SERVICE_USAGE_ALLOWED from DUPLICATESCANCONDITIONCONFIG"
                 + " join DUPLICATESCANNER on DUPLICATESCANNER.ID = DUPLICATESCANCONDITIONCONFIG.DUPLICATESCAN_ID"
-                + " where FILTER_NAME = '" + pFilterName + "'";
+                + " where FILTER_NAME = '" + pFilterName + "'"
+            + " and ENTITY_TO_SCAN_NAME = '" + pTargetEntity + "'";
             
+    logging.log("_loadFilters query -> " + query);
     return db.table(query);
 }
\ No newline at end of file