diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index 947fc3fd575f754268a3b3d0a01d081f1a00b219..1e0b5769a9ad485062aa16be4ee12958c78ecc1c 100644
--- a/process/DuplicateScanner_lib/process.js
+++ b/process/DuplicateScanner_lib/process.js
@@ -163,11 +163,10 @@ DuplicateScannerUtils.CreateUnrelatedDuplicateRelation = function(pSourceContact
  */
 DuplicateScannerUtils.GetClusterId = function(pDuplicateId)
 {
-    let duplicateIdsOfClusterWithoutUnrelated = SqlCondition.begin()
-    .and("DUPLICATECLUSTERS.DUPLICATEID = '" + pDuplicateId + "'")
-    .buildSql("select CLUSTERID from DUPLICATECLUSTERS");
-
-    return db.cell(duplicateIdsOfClusterWithoutUnrelated);
+    return newSelect("CLUSTERID")
+                .from("DUPLICATECLUSTERS")
+                .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId)
+                .cell();
 }
 
 /*
@@ -179,12 +178,9 @@ DuplicateScannerUtils.GetClusterId = function(pDuplicateId)
  */
 DuplicateScannerUtils.DeleteUnrelatedDuplicateRelation = function(pSourceDuplicateId, pUnrelatedDuplicateId)
 {
-    var cond = new SqlCondition();
-    cond.andPrepare("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId)
-    cond.andPrepare("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateId)
-    let condition = db.translateCondition(cond.build());
-
-    return db.deleteData("UNRELATEDDUPLICATES", condition);
+    return newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId)
+                .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateId)
+                .deleteData(true, "UNRELATEDDUPLICATES");
 }
 
 /*
@@ -195,12 +191,7 @@ DuplicateScannerUtils.DeleteUnrelatedDuplicateRelation = function(pSourceDuplica
  */
 DuplicateScannerUtils.DeleteAllUnrelatedDuplicateRelations = function(pDuplicateId)
 {
-    var cond = new SqlCondition();
-    cond.orPrepare("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId)
-    cond.orPrepare("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId)
-    let condition = db.translateCondition(cond.build());
-
-    return db.deleteData("UNRELATEDDUPLICATES", condition);
+    DuplicateScannerUtils.DeleteUnrelatedDuplicateRelation(pDuplicateId, pDuplicateId)
 }
 
 /*
@@ -211,14 +202,22 @@ DuplicateScannerUtils.DeleteAllUnrelatedDuplicateRelations = function(pDuplicate
  */
 DuplicateScannerUtils.GetCachedDuplicatesForDuplicateId = function(pDuplicateId)
 {
-    let querySelectDuplicateContactIds = "select DUPLICATEID from DUPLICATECLUSTERS"
-    + " where CLUSTERID in (select CLUSTERID from DUPLICATECLUSTERS"
-    + " where DUPLICATEID = '"+ pDuplicateId +"')"
-    + " and DUPLICATEID != '"+ pDuplicateId +"'"
-    + " and DUPLICATEID not in (select UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES where SOURCEDUPLICATEID = '"+ pDuplicateId +"')"
-    + " and DUPLICATEID not in (select SOURCEDUPLICATEID from UNRELATEDDUPLICATES where UNRELATEDDUPLICATEID = '"+ pDuplicateId +"')";
-
-    return db.array(db.COLUMN, querySelectDuplicateContactIds);
+    return newSelect("DUPLICATEID")
+                .from("DUPLICATECLUSTERS")
+                .where("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID")
+                                                            .from("DUPLICATECLUSTERS")
+                                                            .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId),
+                                                    SqlBuilder.IN())
+                .and("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId, "# != ?")
+                .and("DUPLICATECLUSTERS.DUPLICATEID", newSelect("UNRELATEDDUPLICATEID")
+                                                            .from("UNRELATEDDUPLICATES")
+                                                            .where("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId),
+                                                    SqlBuilder.NOT_IN())
+                .and("DUPLICATECLUSTERS.DUPLICATEID", newSelect("SOURCEDUPLICATEID")
+                                                            .from("UNRELATEDDUPLICATES")
+                                                            .where("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId),
+                                                    SqlBuilder.NOT_IN())
+                .arrayColumn();
 }
 
 /*
@@ -229,15 +228,12 @@ DuplicateScannerUtils.GetCachedDuplicatesForDuplicateId = function(pDuplicateId)
  */
 DuplicateScannerUtils.GetCachedDuplicatesForClusterId = function(pClusterId)
 {
-    let clusterIdRay = [];
-    clusterIdRay.push(pClusterId);
-
-    let duplicateIdsOfClusterWithoutUnrelated = SqlCondition.begin()
-    .and("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)")
-    .and("DUPLICATECLUSTERS.CLUSTERID = '" + clusterIdRay + "'")
-    .buildSql("select DUPLICATEID from DUPLICATECLUSTERS");
-
-    return db.array(db.COLUMN, duplicateIdsOfClusterWithoutUnrelated);
+    return newSelect("DUPLICATEID")
+                .from("DUPLICATECLUSTERS")
+                .where("DUPLICATECLUSTERS.DUPLICATEID", newSelect("UNRELATEDDUPLICATEID").from("UNRELATEDDUPLICATES"),
+                            SqlBuilder.NOT_IN())
+                .and("DUPLICATECLUSTERS.CLUSTERID", clusterIdRay)
+                .arrayColumn();
 }
 
 /*
@@ -343,7 +339,6 @@ DuplicateScannerUtils.ScanRecords = function(pTargetEntity, pTargetRecordsData,
     var duplicatesToInsertQueries = [];
     for (b = 0; b < pTargetRecordsData.length; b++)
     {
-        
         let entityFieldValuesRay = DuplicateScannerUtils.BuildEntityFieldConfigValueRays(pEntityFieldConfigs, pTargetRecordsData[b]);
 
         //The first field in this Array must always be the configured id field. This is ensured using onValidation-logic
@@ -434,24 +429,26 @@ DuplicateScannerUtils.GetClusterWithIdenticalDuplicates = function(pDuplicateIds
     if(pDuplicateIds.length < 1)
         return RESULT_NO_CLUSTER_FOUND;
     
-    let clusterIdConditionBuilder = SqlCondition.begin();
+    let clusterIdSelect = newSelect("distinct CLUSTERID")
+                                .from("DUPLICATECLUSTERS")
+                                .where();
     
     for (let i = 0; i < pDuplicateIds.length; i++) 
     {
-        clusterIdConditionBuilder.andSqlCondition("CLUSTERID in (select CLUSTERID from DUPLICATECLUSTERS where DUPLICATEID = '" + pDuplicateIds[i] + "')", "1=2")
+        clusterIdSelect.and("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID").from("DUPLICATECLUSTERS").where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateIds[i]),
+                                        SqlBuilder.IN());
     }
-
-    clusterIdCondition = clusterIdConditionBuilder.buildSql("select distinct CLUSTERID from DUPLICATECLUSTERS", "1=2");
     
-    let foundClusterId = db.cell(clusterIdCondition);
+    let foundClusterId = clusterIdSelect.cell();
 
     if(foundClusterId == null || foundClusterId == "")
         return RESULT_NO_CLUSTER_FOUND;
     
-    let duplicatesInClusterCondition = SqlCondition.begin()
-    .andPrepare("DUPLICATECLUSTERS.CLUSTERID", foundClusterId)
-    .buildSql("select DUPLICATEID from DUPLICATECLUSTERS");
-    let duplicatesInCluster = db.array(db.COLUMN, duplicatesInClusterCondition);
+    let duplicatesInCluster = newSelect("DUPLICATEID")
+                                            .from("DUPLICATECLUSTERS")
+                                            .where("DUPLICATECLUSTERS.CLUSTERID", foundClusterId)
+                                            .arrayColumn();
+
     /* 
      * A cluster has been searched which contains all duplicate ids as specified via parameter.
      * There's the possibility that this cluster contains even more duplicates than specified via the parameter.
@@ -482,13 +479,12 @@ DuplicateScannerUtils.LoadEntityRecords = function(pTargetEntity, pEntityFields,
  */
 DuplicateScannerUtils.LoadResultFields = function(pFilterName, pTargetEntity)
 {
-    let duplicateResultFields = SqlCondition.begin()
-    .andPrepare("DUPLICATESCANNER.FILTER_NAME", pFilterName)
-    .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
-    .buildSql("select dsrfc.ENTITY_FIELD_NAME from DUPLICATESCANNERRESULTFIELDCONFIG dsrfc join DUPLICATESCANNER on DUPLICATESCANNER.ID = dsrfc.DUPLICATESCANNER_ID"
-        , "1=2");
-
-    return db.array(db.COLUMN, duplicateResultFields);
+    return newSelect("dsrfc.ENTITY_FIELD_NAME")
+                .from("DUPLICATESCANNERRESULTFIELDCONFIG dsrfc")
+                .join("DUPLICATESCANNER", "DUPLICATESCANNER.ID = dsrfc.DUPLICATESCANNER_ID")
+                .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
+                .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
+                .arrayColumn();
 }
 
 /*
@@ -676,10 +672,10 @@ DuplicateScannerUtils.MergeOrganisation = function(pSourceContactId, pTargetCont
     let updateStatementsSystemAlias = [];
     let deleteStatements = [];
 
-    let querySourceOrganisationId = SqlCondition.begin()
-    .and("CONTACTID = '" + pSourceContactId + "'")
-    .buildSql("select ORGANISATION_ID from CONTACT");
-    var sourceOrganisationId = db.cell(querySourceOrganisationId);
+    var sourceOrganisationId = newSelect("ORGANISATION_ID")
+                                    .from("CONTACT")
+                                    .where("CONTACT.CONTACTID", pSourceContactId)
+                                    .cell();
 
     var tableInfosCurrentAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias();
     var tableInfosSystemAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosSystemAlias();
@@ -801,14 +797,12 @@ _DuplicateScannerUtils._buildUpdateResetStandardCommunications = function(pSourc
  */
 _DuplicateScannerUtils._loadIndexPattern = function(pScannerName, pTargetEntity)
 {
-    let scanPatternQuery = SqlCondition.begin()
-    .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME = '" + pTargetEntity + "'")
-    .and("DUPLICATESCANNER.FILTER_NAME = '" + pScannerName + "'")
-    .buildSql("select SCAN_PATTERN from DUPLICATESCANNER");
-    
-    let scanPattern = db.cell(scanPatternQuery);
+    let scanPattern = newSelect("SCAN_PATTERN")
+                            .from("DUPLICATESCANNER")
+                            .where("DUPLICATESCANNER.FILTER_NAME", pScannerName)
+                            .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
+                            .cell();
     scanPattern = scanPattern.trim();
-    
     return scanPattern;
 }
 
@@ -835,12 +829,11 @@ _DuplicateScannerUtils._replacePlaceholderForValuesInPattern = function(pIndexPa
 
 _DuplicateScannerUtils._loadEntityIdField = function(pFilterName, pTargetEntity)
 {
-    let loadEntityIdFieldQuery = SqlCondition.begin()
-    .andPrepare("DUPLICATESCANNER.FILTER_NAME", pFilterName)
-    .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
-    .buildSql("select ID_FIELD_NAME from DUPLICATESCANNER", "1=2");
-
-    return db.cell(loadEntityIdFieldQuery);
+    return newSelect("ID_FIELD_NAME")
+                .from("DUPLICATESCANNER")
+                .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
+                .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
+                .cell();
 }
 
 /*
@@ -881,13 +874,11 @@ pResultFields, pRecordIdFieldToIgnore, pRecordIdValueToIgnore, pFormatValuesCons
  */
 _DuplicateScannerUtils._isUseExternalWebservice = function(pFilterName, pTargetEntity)
 {
-    let scannerUseExternalWebserviceQuery = SqlCondition.begin()
-    .andPrepare("DUPLICATESCANNER.FILTER_NAME", pFilterName)
-    .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
-    .buildSql("select EXTERNAL_SERVICE_USAGE_ALLOWED from DUPLICATESCANNER"
-        , "1=2");
-
-    let isUseWebservice = db.cell(scannerUseExternalWebserviceQuery);
+    let isUseWebservice = newSelect("EXTERNAL_SERVICE_USAGE_ALLOWED")
+                                .from("DUPLICATESCANNER")
+                                .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
+                                .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
+                                .cell();
     return (isUseWebservice == 0) ? false : true;
 }
 
@@ -1154,8 +1145,7 @@ _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias = function()
     tableInfos.push(["ACTIVITY", "RESPONSIBLE", ""]);
     tableInfos.push(["DSGVO", "CONTACT_ID", ""]);
     tableInfos.push(["DSGVOINFO", "CONTACT_ID", ""]);
-    tableInfos.push(["T\n\
-IMETRACKING", "CONTACT_ID", ""]);
+    tableInfos.push(["TIMETRACKING", "CONTACT_ID", ""]);
     tableInfos.push(["ACTIVITYLINK", "OBJECT_ROWID", ""]);
     tableInfos.push(["AB_ATTRIBUTERELATION", "OBJECT_ROWID", ""]);