diff --git a/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml b/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml
index 924c2b6c716d96449847bc94fe8df2f991ba1749..440e5ab493cf19b4a250828eb4a71d3f73cd2dab 100644
--- a/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml
+++ b/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml
@@ -22,6 +22,13 @@
                         <param value="AUTO"/>
                     </whereParams>
                 </update>
+                <update tableName="CHECKLISTENTRY">
+                    <column name="AUTO" valueNumeric="0"/>
+                    <where>TYPE = ?</where>
+                    <whereParams>
+                        <param value="MANUAL"/>
+                    </whereParams>
+                </update>
         <!--and add not Null constraint-->
                 <addNotNullConstraint
                     columnDataType="TINYINT"
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b54ddabd2a1777757f964e588df9e4be00e43ee
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml
@@ -0,0 +1,27 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="m.groppe" id="3a4158da-b715-49c7-9f53-850990382b2c">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="a7d5d212-f99f-4200-8872-b24e7de2cc37"/>
+            <column name="KEYID" value="BULKMAILPLANNED"/>
+            <column name="TITLE" value="Planned"/>
+            <column name="CONTAINER" value="BulkMailStatus"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="1f257472-bf37-4c66-972d-8bbb5ffcd883"/>
+            <column name="KEYID" value="BULKMAILMISSED"/>
+            <column name="TITLE" value="Missed"/>
+            <column name="CONTAINER" value="BulkMailStatus"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/>
+            <column name="SORTING" valueNumeric="5"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ebacbeeb5e5d87e136ee320d79dbba2b3d10d184
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="m.groppe" id="96816f54-3067-470d-b698-dc7ad7685d84">
+    <addColumn tableName="BULKMAIL">
+      <column name="DATE_TO_SEND" type="DATETIME"/>
+      <column name="INTEREST_ID" type="char(36)"/>
+    </addColumn>
+    <renameColumn tableName="BULKMAIL" oldColumnName="SENDER" newColumnName="SENDER_EMAIL_ADDRESS" columnDataType ="varchar(50)"/>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba4cce665048da9703c2ede240607bf0f5bc52d7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml
@@ -0,0 +1,8 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="m.groppe" id="5d43aca9-3344-4b54-981d-73306123e18f">
+    <addColumn tableName="BULKMAILRECIPIENT">
+      <column name="IS_TEST_RECIPIENT" type="TINYINT"/>
+    </addColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e5fef20dcf00f187275ba5a7d3ccc3b5bc4cc3c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml
@@ -0,0 +1,65 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="m.groppe" id="15e13453-42c1-413e-bc0d-611a23486890">
+        
+        <insert tableName="AB_KEYWORD_CATEGORY">
+            <column name="AB_KEYWORD_CATEGORYID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="NAME" value="DeviceType"/>
+            <column name="SORTINGBY" valueNumeric="0"/>
+            <column name="SORTINGDIRECTION" value="ASC"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="54b767c8-5347-4e1d-95db-96f6d40f9fb7"/>
+            <column name="KEYID" value="console"/>
+            <column name="TITLE" value="Console"/>
+            <column name="CONTAINER" value="DeviceType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="de0f5a77-bbb4-4109-bf93-3c0807239980"/>
+            <column name="KEYID" value="mobile"/>
+            <column name="TITLE" value="Mobile"/>
+            <column name="CONTAINER" value="DeviceType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="806143e9-be70-47ff-ba37-5bc64fa88f3b"/>
+            <column name="KEYID" value="tablet"/>
+            <column name="TITLE" value="Tablet"/>
+            <column name="CONTAINER" value="DeviceType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="689e5978-ddb2-46f8-98a0-97ec0a95ee6f"/>
+            <column name="KEYID" value="smarttv"/>
+            <column name="TITLE" value="Smart TV"/>
+            <column name="CONTAINER" value="DeviceType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="fba7888e-a1a6-45f4-8389-e5c4b98ca13b"/>
+            <column name="KEYID" value="desktop"/>
+            <column name="TITLE" value="Desktop"/>
+            <column name="CONTAINER" value="DeviceType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2453f645af3dea1fee40c51ddedc5b32196d829d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="createLinkClicks.xml"/>
+    <include relativeToChangelogFile="true" file="AlterBulkmail.xml"/>
+    <include relativeToChangelogFile="true" file="AddBulkmailStatus"/>
+    <include relativeToChangelogFile="true" file="createMailLog.xml"/>
+    <include relativeToChangelogFile="true" file="createMailRun.xml"/>
+    <include relativeToChangelogFile="true" file="createBulkMailTestRecipient.xml"/>
+    <include relativeToChangelogFile="true" file="AlterBulkmailRecipient.xml"/>
+    <include relativeToChangelogFile="true" file="addDeviceTypeKeyword.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml
new file mode 100644
index 0000000000000000000000000000000000000000..da84568e13322b6868c6374d3af60b59942210f1
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="m.groppe" id="6e4507c7-32fe-4f6b-a7c2-80d379ef364b">
+        <createTable tableName="BULKMAILTESTRECIPIENT">
+            <column name="BULKMAILTESTRECIPIENTID" type="CHAR(36)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="BULKMAIL_ID" type="CHAR(36)"/>
+            <column name="CONTACT_ID" type="CHAR(36)"/>
+            <column name="EMAIL_ADDRESS" type="VARCHAR(255)"/>
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..be5283ebc30f1f5ca9c58d5bfb451b6186d8c2f1
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml
@@ -0,0 +1,20 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="m.groppe" id="e60dc52b-87dc-4f73-80e7-adc5b46d6935">
+        <createTable tableName="WEBLINK_CLICK">
+            <column name="WEBLINK_CLICKID" type="CHAR(36)">
+                <constraints nullable="false" primaryKey="true" primaryKeyName="PK_WEBLINK_CLICKID"/>
+            </column>
+            <column name="IP_ADDRESS" type="VARCHAR(50)"/>
+            <column name="WEBLINK_ID" type="CHAR(36)"/>
+            <column name="MAIL_LOG_ID" type="CHAR(36)"/>
+            <column name="DEVICE_TYPE" type="VARCHAR(255)"/>
+            <column name="OPERATING_SYSTEM" type="VARCHAR(255)"/>
+            <column name="BROWSER" type="VARCHAR(255)"/>
+            <column name="DATE_OPENED" type="datetime"/>
+        </createTable>
+        <createIndex tableName="WEBLINK_CLICK" indexName="IDX_WEBLINK_CLICK_MAIL_LOG_ID">
+          <column name="MAIL_LOG_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3e7a43a293c8cff35cd5e05932adec880938aa7f
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml
@@ -0,0 +1,25 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="m.groppe" id="9d8f3580-92c5-423e-b709-09383969ccf0">
+        <createTable tableName="MAIL_LOG">
+            <column name="MAIL_LOGID" type="CHAR(36)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="MAIL_RUN_ID" type="CHAR(36)"/>
+            <column name="CONTACT_ID" type="CHAR(36)"/>
+            <column name="STATUS" type="VARCHAR(36)"/>
+            <column name="ERRORMESSAGE" type="NCLOB"/>
+            <column name="SENDER_EMAIL" type="VARCHAR(255)"/>
+            <column name="RECIPIENT_EMAIL" type="VARCHAR(255)"/>
+            <column name="MAILING_SUBJECT" type="VARCHAR(100)"/>
+            <column name="DATE_SEND" type ="DATETIME"/>
+            <column name="OPENER_LINK_CLICK_ID" type="char(36)"/>
+        </createTable>
+        <createIndex tableName="MAIL_LOG" indexName="IDX_MAIL_LOG_MAIL_RUN_ID">
+          <column name="MAIL_RUN_ID"/>
+        </createIndex>
+        <createIndex tableName="MAIL_LOG" indexName="IDX_OPENER_LINK_CLICK_ID">
+          <column name="OPENER_LINK_CLICK_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7ac6729001459d9f30a229b65219231d5f025333
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml
@@ -0,0 +1,20 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="m.groppe" id="6c910d60-43b1-400b-8e31-e3a1a93155e6">
+        <createTable tableName="MAIL_RUN">
+            <column name="MAIL_RUNID" type="CHAR(36)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="OBJECT_ROWID" type="CHAR(36)"/>
+            <column name="OBJECT_TYPE" type="VARCHAR(63)"/>
+            <column name="STATUS" type="VARCHAR(100)"/>
+            <column name="TESTRUN" type= "smallint"/>
+            <column name="INTEREST_ID" type="CHAR(36)"/>
+            <column name="DATE_RUN_START" type="datetime"/>
+            <column name="DATE_RUN_FINISHED" type="datetime"/>
+        </createTable>
+        <createIndex tableName="MAIL_RUN" indexName="IDX_MAIL_RUN_INTEREST_ID">
+          <column name="INTEREST_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de169ea5bfc61c615c96663b65dea30519245fff
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="create_communicationBlacklist.xml"/>
+    <include relativeToChangelogFile="true" file="insert_blacklistTypeKeyword.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml
new file mode 100644
index 0000000000000000000000000000000000000000..faf00d8192c66f4d93f76288fd73a64243d37807
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml
@@ -0,0 +1,27 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="9415eb4f-ea93-433c-8a69-1bdb77c6ec87">
+    <createTable tableName="COMMUNICATIONBLACKLIST">
+          <column name="COMMUNICATIONBLACKLISTID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONBLACKLISTID"/>
+          </column>
+          <column name="BLACKLIST_TYPE" type="VARCHAR(36)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="BLACKLIST_FILTER" type="NCLOB"/>
+          <column name="REASON" type="NVARCHAR(500)"/>
+          <column name="START_DATE" type="DATETIME"/>
+          <column name="END_DATE" type="DATETIME"/>
+          <column name="DATE_NEW" type="DATETIME">
+              <constraints nullable="false"/>
+          </column>
+          <column name="USER_NEW" type="VARCHAR(50)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="DATE_EDIT" type="DATETIME"/>
+          <column name="USER_EDIT" type="VARCHAR(50)"/>
+      </createTable>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2a6c8057c98bad7b41e2298ed807dbb4032dfc7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml
@@ -0,0 +1,23 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="89ba3828-288c-4af7-bf98-feccc01ce312">
+    <insert tableName="AB_KEYWORD_CATEGORY">
+      <column name="AB_KEYWORD_CATEGORYID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/>
+      <column name="NAME" value="CommunicationBlacklistType"/>
+      <column name="SORTINGBY" valueNumeric="0"/>
+      <column name="SORTINGDIRECTION" value="ASC"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="a1c8d2c6-54c7-4e9d-9792-dd576ac6f43e"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/>
+        <column name="KEYID" value="BLACKLIST_TYPE_EMAILRECIPIENT_FILTER"/>
+        <column name="TITLE" value="Recipient filter"/>
+        <column name="CONTAINER" value="CommunicationBlacklistType"/>
+        <column name="SORTING" valueNumeric="1"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..985bb74bdd6da48d4b5b6f467fbfb81027763e42
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="create_communicationSettings.xml"/>
+    <include relativeToChangelogFile="true" file="insert_communicationChannel.xml"/>
+    <include relativeToChangelogFile="true" file="insert_communicationSettingsStatus.xml"/>
+    <include relativeToChangelogFile="true" file="insert_commMediumCampaignCategory.xml"/>
+    <include relativeToChangelogFile="true" file="create_communicationLegalBase.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b488709ebc598b84da09daa27ee50aa3ae2f0a1
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml
@@ -0,0 +1,33 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="b63d334e-6d3b-428f-b394-797e52e48313">
+      <createTable tableName="COMMUNICATIONLEGALBASE">
+          <column name="COMMUNICATIONLEGALBASEID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONLEGALBASEID"/>
+          </column>
+          <column name="COMMUNICATIONSETTINGS_ID" type="CHAR(36)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="INFO" type="NVARCHAR(250)"/>
+          <column name="VERSION" type="INTEGER">
+              <constraints nullable="false"/>
+          </column>
+          <column name="DATE_NEW" type="DATETIME">
+              <constraints nullable="false"/>
+          </column>
+          <column name="USER_NEW" type="NVARCHAR(50)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="DATE_EDIT" type="DATETIME"/>
+          <column name="USER_EDIT" type="NVARCHAR(50)"/>
+      </createTable>
+      <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_SETTINGS_ID">
+          <column name="COMMUNICATIONSETTINGS_ID"/>
+      </createIndex>
+      <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_DATE_NEW">
+          <column name="DATE_NEW"/>
+      </createIndex>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aefe001ae7e2899bd2ef4f06de7e8a030d1025eb
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml
@@ -0,0 +1,40 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="7a78532b-83d4-484e-a07d-23ae78ba364d">
+      <createTable tableName="COMMUNICATIONSETTINGS">
+          <column name="COMMUNICATIONSETTINGSID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONSETTINGSID"/>
+          </column>
+          <column name="CONTACT_ID" type="CHAR(36)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="MEDIUM" type="VARCHAR(36)"/>
+          <column name="CHANNEL_TYPE" type="VARCHAR(36)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="CHANNEL_ID" type="VARCHAR(36)"/>
+          <column name="STATUS" type="VARCHAR(36)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="DATE_NEW" type="DATETIME">
+              <constraints nullable="false"/>
+          </column>
+          <column name="USER_NEW" type="VARCHAR(50)">
+              <constraints nullable="false"/>
+          </column>
+          <column name="DATE_EDIT" type="DATETIME"/>
+          <column name="USER_EDIT" type="VARCHAR(50)"/>
+      </createTable>
+      <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_CONTACT_ID">
+          <column name="CONTACT_ID"/>
+      </createIndex>
+      <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_MEDIUM">
+          <column name="MEDIUM"/>
+      </createIndex>
+      <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_CHANNEL_ID">
+          <column name="CHANNEL_ID"/>
+      </createIndex>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c938477cbe2fa539555aaeeceaebd874537437d7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml
@@ -0,0 +1,44 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="fa4ac9a6-3194-4a1a-8a51-7ed46ef11ef7">
+      <insert tableName="AB_KEYWORD_ATTRIBUTE">
+          <column name="AB_KEYWORD_ATTRIBUTEID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/>
+          <column name="CONTAINER" value=""/>
+          <column name="KIND" value="CHAR_VALUE"/>
+          <column name="NAME" value="category"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="2ad2a9ac-7e26-471e-b1d8-2c5594fed717"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="2acd3694-ccef-4d0b-ae7a-b3d31f8d9cc0"/>
+          <column name="CHAR_VALUE" value="PHONE"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="76b7befa-d89b-41df-915a-4ac28e010f28"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="cb07397b-a976-4960-b8e5-9edf189c5caf"/>
+          <column name="CHAR_VALUE" value="EMAIL"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="b0d6fc6b-3e97-44fe-a717-be12af65c081"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="990a03e0-aeb4-4bdb-9d22-09b66eee6b85"/>
+          <column name="CHAR_VALUE" value="OTHER"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="2a86f19c-45d4-46a9-aa9a-1dee1dfd567d"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="51085b8b-ded0-4d1d-9e85-ae89bd1480fe"/>
+          <column name="CHAR_VALUE" value="PHONE"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="88e944af-4951-4e5e-904a-aa26da278c78"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="b72ba2f5-612b-4ef6-832e-62089892b8d7"/>
+          <column name="CHAR_VALUE" value="PHONE"/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1d9a93f985b68e18a0332ced9d1877a4af8c1cf3
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml
@@ -0,0 +1,53 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="29ca783c-89ab-4955-8720-ee15ca963237">
+    <insert tableName="AB_KEYWORD_CATEGORY">
+      <column name="AB_KEYWORD_CATEGORYID" value="40390bad-8079-49de-89e5-cf030b2f191c"/>
+      <column name="NAME" value="CommunicationChannelType"/>
+      <column name="SORTINGBY" valueNumeric="0"/>
+      <column name="SORTINGDIRECTION" value="ASC"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="a395d73b-6780-41d2-9934-70d4f4a021ff"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/>
+        <column name="KEYID" value="COMMUNICATIONCHANNEL_PROFILING"/>
+        <column name="TITLE" value="Profiling"/>
+        <column name="CONTAINER" value="CommunicationChannelType"/>
+        <column name="SORTING" valueNumeric="1"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="10451ef3-9fee-41f9-88f2-8e3c0b326dab"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/>
+        <column name="KEYID" value="COMMUNICATIONCHANNEL_GLOBAL"/>
+        <column name="TITLE" value="Global"/>
+        <column name="CONTAINER" value="CommunicationChannelType"/>
+        <column name="SORTING" valueNumeric="2"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="49786329-801b-4adf-b5f9-34234d65111b"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/>
+        <column name="KEYID" value="COMMUNICATIONCHANNEL_ADDRESS"/>
+        <column name="TITLE" value="Address"/>
+        <column name="CONTAINER" value="CommunicationChannelType"/>
+        <column name="SORTING" valueNumeric="3"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="b1234ea8-f560-401d-b63a-06497c873fec"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/>
+        <column name="KEYID" value="COMMUNICATIONCHANNEL_COMMUNICATION"/>
+        <column name="TITLE" value="Communication"/>
+        <column name="CONTAINER" value="CommunicationChannelType"/>
+        <column name="SORTING" valueNumeric="4"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b56f70514256c91a7e1344ca2b10e155e48465f5
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml
@@ -0,0 +1,43 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="67049212-747b-45c9-a556-219c8180db5f">
+    <insert tableName="AB_KEYWORD_CATEGORY">
+      <column name="AB_KEYWORD_CATEGORYID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/>
+      <column name="NAME" value="CommunicationSettingStatus"/>
+      <column name="SORTINGBY" valueNumeric="0"/>
+      <column name="SORTINGDIRECTION" value="ASC"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="6afeb45a-c64b-4c6c-93bb-7378b0551729"/>
+      <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/>
+        <column name="KEYID" value="COMMUNICATION_PENDING"/>
+        <column name="TITLE" value="Pending"/>
+        <column name="CONTAINER" value="CommunicationSettingStatus"/>
+        <column name="SORTING" valueNumeric="1"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="77aa26ef-7938-4c0d-9ff2-5eadc0aa282d"/>
+      <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/>
+        <column name="KEYID" value="COMMUNICATION_ALLOWED"/>
+        <column name="TITLE" value="Allowed"/>
+        <column name="CONTAINER" value="CommunicationSettingStatus"/>
+        <column name="SORTING" valueNumeric="2"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="c2c117ac-d94f-4da2-a7a4-2e36e537a8b8"/>
+      <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/>
+        <column name="KEYID" value="COMMUNICATION_REJECTED"/>
+        <column name="TITLE" value="Rejected"/>
+        <column name="CONTAINER" value="CommunicationSettingStatus"/>
+        <column name="SORTING" valueNumeric="3"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e4a3495dfda00d915cb2ac679dd024e8eba0c94
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml
@@ -0,0 +1,38 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="6f8ade49-21aa-4ac6-8a7f-3ddd1c619d95">
+      <insert tableName="AB_KEYWORD_ATTRIBUTE">
+          <column name="AB_KEYWORD_ATTRIBUTEID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/>
+          <column name="AB_KEYWORD_CATEGORY_ID" value=""/>
+          <column name="CONTAINER" value=""/>
+          <column name="KIND" value="CHAR_VALUE"/>
+          <column name="NAME" value="iconApproved"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c497054c-93ff-4436-9cb5-94661fe99a7c"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="a395d73b-6780-41d2-9934-70d4f4a021ff"/>
+          <column name="CHAR_VALUE" value="VAADIN:USER"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c640739d-c38f-456b-9083-f3fedb0ddaaa"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="10451ef3-9fee-41f9-88f2-8e3c0b326dab"/>
+          <column name="CHAR_VALUE" value=""/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="a8c8208c-b1e7-41ed-9b9d-829912930a1b"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="49786329-801b-4adf-b5f9-34234d65111b"/>
+          <column name="CHAR_VALUE" value=""/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c9a818a2-12c1-424b-9f9b-d731eb91d1f6"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="b1234ea8-f560-401d-b63a-06497c873fec"/>
+          <column name="CHAR_VALUE" value=""/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..615a86a2a82e703ef7e7184df4863451f693c1ae
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="e96a018a-66ea-4659-a8eb-3d987dd28e14">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="5b6b36b8-b77b-4dcf-92a8-65cf9cacf20b"/>
+            <column name="KEYID" value="TYPE_PRIVACY_NOTICE"/>
+            <column name="TITLE" value="Privacy Notice"/>
+            <column name="CONTAINER" value="DSGVOType"/>
+            <column name="SORTING" valueNumeric="5"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b2007f77236c81d8bee0aa1e251b0d1756d9e4ea
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml
@@ -0,0 +1,12 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+        <include relativeToChangelogFile="true" file="create_DSGVOConfiguration.xml"/>
+        <include relativeToChangelogFile="true" file="create_DSGVODeleteFlag.xml"/>
+        <include relativeToChangelogFile="true" file="insert_DSGVOReasonKeywords.xml"/>
+        <include relativeToChangelogFile="true" file="insert_DSGVOReasonKeywordCategory.xml"/>
+        <include relativeToChangelogFile="true" file="insert_ContactStatusDelete.xml"/>
+        <include relativeToChangelogFile="true" file="insert_DSGVOConfigKeyword.xml"/>
+        <include relativeToChangelogFile="true" file="add_DSGVOType.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml
new file mode 100644
index 0000000000000000000000000000000000000000..97170f5219f052726a2100e78b3531fb23138b4d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="f0cb3cff-5f03-4c59-a67e-082147cb2242">
+        <createTable tableName="DSGVOCONFIGURATION">
+            <column name="DSGVOCONFIGURATIONID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_DSGVOCONFIGURATION_DSGVOCONFIGURATIONID"/>
+            </column>
+            <column name="FILTER" type="NCLOB"/>
+            <column name="REASON" type="CHAR(36)"/>
+            
+            <column name="USER_NEW" type="NVARCHAR(50)" />
+            <column name="DATE_NEW" type="DATETIME" />
+            <column name="USER_EDIT" type="NVARCHAR(50)" />
+            <column name="DATE_EDIT" type="DATETIME" />
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b633ff087812d6595c9bfb1336ff6e34c4dee6a0
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="24712f1e-f3f2-48c7-956b-3bf8a708a7d6">
+        <createTable tableName="DSGVODELETEFLAG">
+            <column name="DSGVODELETEFLAGID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_DSGVODELETEFLAG_DSGVODELETEFLAGID"/>
+            </column>
+            <column name="REASON" type="CHAR(36)"/>
+            <column name="CONTACT_ID" type="CHAR(36)"/>
+            <column name="USER_NEW" type="NVARCHAR(50)" />
+            <column name="DATE_NEW" type="DATETIME" />
+        </createTable>
+        <createIndex tableName="DSGVODELETEFLAG" indexName="IDX_DSGVODELETEFLAG_CONTACT_ID">
+            <column name="CONTACT_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29de89e9eb037bce2201473c5b4d08c54278e8dd
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="047ccccc-da80-42d4-8d6f-e664785fc9cb">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="43e2ec97-43ae-4c32-bf86-19e171cbe597"/>
+            <column name="KEYID" value="CONTACTSTATDELETE"/>
+            <column name="TITLE" value="To Delete"/>
+            <column name="CONTAINER" value="ContactStatus"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d565392a6e7976e9ea334a7a9e3aa5a2c3b13467
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml
@@ -0,0 +1,36 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="71f9e4c9-7950-4276-9f4c-2e42256a5e32">
+        <insert tableName="AB_KEYWORD_CATEGORY">
+            <column name="AB_KEYWORD_CATEGORYID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/>
+            <column name="NAME" value="DSGVOConfiguration"/>
+            <column name="SORTINGBY" valueNumeric="0"/>
+            <column name="SORTINGDIRECTION" value="ASC"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="51f106b6-b593-4279-bf39-c8d226ebc607"/>
+            <column name="KEYID" value="DSGVO_CONFIGURATION"/>
+            <column name="TITLE" value="DSGVO Configuration"/>
+            <column name="CONTAINER" value="DSGVOConfiguration"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTE">
+            <column name="AB_KEYWORD_ATTRIBUTEID" value="da1227b0-7bda-4aad-a2d5-ba438cac355a"/>
+            <column name="NAME" value="Delete Delay in Days"/>
+            <column name="CONTAINER" value="DSGVOConfiguration"/>
+            <column name="KIND" value="NUMBER_VALUE"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/>
+        </insert>
+         <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="ddf253e2-e6e1-477e-89e3-1d5d34a47540"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="51f106b6-b593-4279-bf39-c8d226ebc607"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="da1227b0-7bda-4aad-a2d5-ba438cac355a"/>
+            <column name="NUMBER_VALUE" valueNumeric="7"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5c7ecb0382e8bc0b5bb2bbb4afdc687c681c918b
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="b3407931-7898-4e61-872c-89516c7878c0">
+        <insert tableName="AB_KEYWORD_CATEGORY">
+            <column name="AB_KEYWORD_CATEGORYID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/>
+            <column name="NAME" value="DSGVOReason"/>
+            <column name="SORTINGBY" valueNumeric="0"/>
+            <column name="SORTINGDIRECTION" value="ASC"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3fce728b5a9a540985f50c4d78f4adc5a77da5d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml
@@ -0,0 +1,37 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="7141cd6c-61bc-4fbc-bba5-220d860b982c">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="607cfce8-1cc3-466e-9a69-4f0c9cf7e391"/>
+            <column name="KEYID" value="607cfce8-1cc3-466e-9a69-4f0c9cf7e391"/>
+            <column name="TITLE" value="Manually set"/>
+            <column name="CONTAINER" value="DSGVOReason"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="e9928b0b-3a31-4dfc-9f9a-782ad78db290"/>
+            <column name="KEYID" value="e9928b0b-3a31-4dfc-9f9a-782ad78db290"/>
+            <column name="TITLE" value="No valid sales contract"/>
+            <column name="CONTAINER" value="DSGVOReason"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="980bf3ad-715d-4e2c-9f3b-ada996ced361"/>
+            <column name="KEYID" value="980bf3ad-715d-4e2c-9f3b-ada996ced361"/>
+            <column name="TITLE" value="No customer since creation > 3 years"/>
+            <column name="CONTAINER" value="DSGVOReason"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6e59bdbd9153071bac10d9f15d87c48b7c2b300
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml
@@ -0,0 +1,24 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="p.neub" id="082919b2-ebfd-4864-9839-89e593fb6f2d">
+        <dropColumn tableName="UNRELATEDDUPLICATES">
+            <column name="CLUSTERID"/>
+        </dropColumn>
+        <addColumn tableName="UNRELATEDDUPLICATES">
+            <column name="DUPLICATETYPE"  type="NVARCHAR(63)"/>
+        </addColumn>
+        <createIndex indexName="IDX_UNRELATEDDUPLICATES_DUPLICATETYPE" tableName="UNRELATEDDUPLICATES">
+            <column name="DUPLICATETYPE"/>
+        </createIndex>
+        <createIndex indexName="IDX_UNRELATEDDUPLICATES_SOURCEDUPLICATEID" tableName="UNRELATEDDUPLICATES">
+            <column name="SOURCEDUPLICATEID"/>
+        </createIndex>
+        <createIndex indexName="IDX_UNRELATEDDUPLICATES" tableName="UNRELATEDDUPLICATES">
+            <column name="DUPLICATETYPE"/>
+            <column name="SOURCEDUPLICATEID"/>
+            <column name="UNRELATEDDUPLICATEID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10ee1b9cc2cb6cd02db3b863cb695a114c9625d1
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="create_hasduplicate.xml"/>
+    <include relativeToChangelogFile="true" file="drop_duplicateclusters.xml"/>
+    <include relativeToChangelogFile="true" file="drop_duplicatescannerresultfieldconfig.xml"/>
+    <include relativeToChangelogFile="true" file="alter_unrelatedduplicates.xml"/>
+    <include relativeToChangelogFile="true" file="migrate_unrelatedduplicates.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f61d512d35ce13c2928fc3e6922ac8f25058542d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="db282e4c-01c2-4b55-aa85-01306f4b1f7a">
+    <createTable tableName="HASDUPLICATE">
+      <column name="HASDUPLICATEID" type="CHAR(36)">
+        <constraints primaryKey="true" primaryKeyName="PK_HASDUPLICATE_HASDUPLICATEID"></constraints>
+      </column>
+
+      <column name="OBJECT_TYPE" type="NVARCHAR(63)"/>
+      <column name="OBJECT_ROWID" type="CHAR(36)"/>
+      <column name="DUPLICATECOUNT" type="INTEGER"/>
+    </createTable>
+    <createIndex indexName="IDX_HASDUPLICATE" tableName="HASDUPLICATE">
+      <column name="OBJECT_TYPE"/>
+      <column name="OBJECT_ROWID"/>
+    </createIndex>
+    <createIndex indexName="IDX_HASDUPLICATE_OBJECT_ROWID" tableName="HASDUPLICATE">
+      <column name="OBJECT_ROWID"/>
+    </createIndex>
+  </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b61e7cb651dec4c502d4956f3caf44b7640bbb1c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="45db014f-922d-4619-b69f-9bf3a36285f4">
+    <dropTable tableName="DUPLICATECLUSTERS"/>
+  </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6804c4345d4c745de74f6850985649c4329e11bb
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="fcf592c4-e07c-4919-bfba-0bf99db161ec">
+    <dropTable tableName="DUPLICATESCANNERRESULTFIELDCONFIG"/>
+  </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ac72a09e145674f5a0774b07bd80a1d1b7db5d50
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml
@@ -0,0 +1,23 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="p.neub" id="587e1ed7-b7c8-46f0-9058-01521ed97fd5">
+        <update tableName="UNRELATEDDUPLICATES">
+            <column name="DUPLICATETYPE" value="Person_entity"/>
+            <where>
+                DUPLICATETYPE is null and
+                (select PERSON_ID from CONTACT where CONTACTID = SOURCEDUPLICATEID)
+                is not null
+            </where>
+        </update>
+        <update tableName="UNRELATEDDUPLICATES">
+            <column name="DUPLICATETYPE" value="Organisation_entity"/>
+            <where>
+                DUPLICATETYPE is null and
+                (select PERSON_ID from CONTACT where CONTACTID = SOURCEDUPLICATEID)
+                is null
+            </where>
+        </update>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d964ae108c243c9bca975b36ac913476b0d17da
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml
@@ -0,0 +1,9 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="create_interest.xml"/>
+    <include relativeToChangelogFile="true" file="create_interestLink.xml"/>
+    <include relativeToChangelogFile="true" file="insert_interestStatusKeyword.xml"/>
+    <include relativeToChangelogFile="true" file="insert_interestLinkStatusKeyword.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..811ce863daab8ffe20c807af1127f7aeca2fbeda
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="7ec72a70-aa7c-41a5-b7ed-1e28ee2fb506">
+      <createTable tableName="INTEREST">
+          <column name="INTERESTID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTID"/>
+          </column>
+          <column name="TITLE" type="NVARCHAR(50)"/>
+          <column name="DESCRIPTION" type="NVARCHAR(500)"/>
+          <column name="STATUS" type="VARCHAR(36)"/>
+          <column name="IS_DEFAULT" type="TINYINT"/>
+      </createTable>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml
new file mode 100644
index 0000000000000000000000000000000000000000..38e31408a97efc914eed735b5ea03d7d4c6a0b43
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml
@@ -0,0 +1,21 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="9e7aab7e-fbe5-4c62-9229-c7d0cf57605f">
+      <createTable tableName="INTERESTLINK">
+          <column name="INTERESTLINKID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTLINKID"/>
+          </column>
+          <column name="INTEREST_ID" type="CHAR(36)"/>
+          <column name="CONTACT_ID" type="CHAR(36)"/>
+          <column name="STATUS" type="VARCHAR(36)"/>
+      </createTable>
+      <createIndex tableName="INTERESTLINK" indexName="IDX_INTERESTLINK_INTEREST_ID">
+          <column name="INTEREST_ID"/>
+      </createIndex>
+      <createIndex tableName="INTERESTLINK" indexName="IDX_INTERESTLINK_CONTACT_ID">
+          <column name="CONTACT_ID"/>
+      </createIndex>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63c2dcad95a2416e41986e82150394a722997456
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="c7223a3d-5951-4632-8e39-805fe660c90f">
+      <createTable tableName="INTERESTUNSUBSCRIBE">
+          <column name="INTERESTUNSUBSCRIBEID" type="CHAR(36)">
+              <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTUNSUBSCRIBEID"/>
+          </column>
+          <column name="INTERESTLINK_ID" type="CHAR(36)"/>
+      </createTable>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8de05d4b7521be8a9235d6337b090bd709c336fb
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml
@@ -0,0 +1,34 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="bea56786-cd38-4926-bad7-7f2bd37a17ef">
+    <insert tableName="AB_KEYWORD_CATEGORY">
+      <column name="AB_KEYWORD_CATEGORYID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/>
+      <column name="NAME" value="InterestLinkStatus"/>
+      <column name="SORTINGBY" valueNumeric="0"/>
+      <column name="SORTINGDIRECTION" value="ASC"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="5c723271-ee7f-4daa-9bb3-ca1f81174168"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/>
+        <column name="KEYID" value="INTERESTLINK_SUBSCRIBED"/>
+        <column name="TITLE" value="Subscribed"/>
+        <column name="CONTAINER" value="InterestLinkStatus"/>
+        <column name="SORTING" valueNumeric="1"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="5f0e6420-14b9-43e4-bbe3-c156d6519c02"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/>
+        <column name="KEYID" value="INTERESTLINK_NOTSUBSCRIBED"/>
+        <column name="TITLE" value="Not subscribed"/>
+        <column name="CONTAINER" value="InterestLinkStatus"/>
+        <column name="SORTING" valueNumeric="2"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28f0b1fb5fde8b66916d6041d43352f2348713c7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml
@@ -0,0 +1,33 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="0281fbff-e05e-4091-8c66-e8b12022057b">
+    <insert tableName="AB_KEYWORD_CATEGORY">
+      <column name="AB_KEYWORD_CATEGORYID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/>
+      <column name="NAME" value="InterestStatus"/>
+      <column name="SORTINGBY" valueNumeric="0"/>
+      <column name="SORTINGDIRECTION" value="ASC"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="7f2b0d66-6051-441b-b975-9369a6a96e24"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/>
+        <column name="KEYID" value="INTEREST_ACTIVE"/>
+        <column name="TITLE" value="Active"/>
+        <column name="CONTAINER" value="InterestStatus"/>
+        <column name="SORTING" valueNumeric="1"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+    <insert tableName="AB_KEYWORD_ENTRY">
+        <column name="AB_KEYWORD_ENTRYID" value="37412d1c-1ccb-41c3-a1b9-5c0276d8d5b6"/>
+        <column name="AB_KEYWORD_CATEGORY_ID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/>
+        <column name="KEYID" value="INTEREST_INACTIVE"/>
+        <column name="TITLE" value="Inactive"/>
+        <column name="CONTAINER" value="InterestStatus"/>
+        <column name="SORTING" valueNumeric="2"/>
+        <column name="ISACTIVE" valueNumeric="1"/>
+        <column name="ISESSENTIAL" valueNumeric="0"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7561299704af4a8cd9e17a78f82ee22b304efd1e
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml
@@ -0,0 +1,22 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="m.groppe" id="1e4d2e89-646c-479b-97a9-d105878de4ae">
+    <createTable tableName="WEBLINK">
+            <column name="WEBLINKID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_WEBLINK_WEBLINKID"/>
+            </column>
+            <column name="URL" type="VARCHAR(512)"/>
+            <column name="LINKTYPE" type="VARCHAR(50)"/>
+            <column name="PLACEHOLDER" type = "VARCHAR(50)"/>
+            <column name="SCORE" type = "INTEGER"/>
+            <column name="USER_NEW" type="NVARCHAR(50)"/>
+            <column name="DATE_NEW" type="DATETIME"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+            <column name="DATE_EDIT" type="DATETIME"/>
+            <column name="ISREDIRECT" type="TINYINT"/>
+            <column name="WORKFLOWPROCESSDEFINITION_KEY" type="VARCHAR(255)"/>
+    </createTable>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69df405c0435083c50d55207c2afe35217b31e98
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml
@@ -0,0 +1,18 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="m.groppe" id="80490c55-8708-4bf0-a9e7-077ffb0501ef">
+    <createTable tableName="WEBLINKTAG">
+            <column name="WEBLINKTAGID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_WEBLINKTAG_WEBLINKTAGID"/>
+            </column>
+            <column name="WEBLINK_ID" type="char(36)"/>
+            <column name="TAG" type="VARCHAR(100)" />
+            <column name="USER_NEW" type="NVARCHAR(50)" />
+            <column name="DATE_NEW" type="DATETIME" />
+            <column name="USER_EDIT" type="NVARCHAR(50)" />
+            <column name="DATE_EDIT" type="DATETIME" />
+    </createTable>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4bf9b7e01884701fe98930cd8e51d521501e8568
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml
@@ -0,0 +1,76 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="m.groppe" id="04500816-ee95-4a7c-acbb-0b97e2cfcb0d">
+        
+        <insert tableName="AB_KEYWORD_CATEGORY">
+            <column name="AB_KEYWORD_CATEGORYID" value="6511a68f-f776-4995-816b-1db011e9e6af"/>
+            <column name="NAME" value="WeblinkTags"/>
+            <column name="SORTINGBY" valueNumeric="0"/>
+            <column name="SORTINGDIRECTION" value="ASC"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="398d472c-fb36-4ba6-9c66-44119a32c598"/>
+            <column name="KEYID" value="SALES"/>
+            <column name="TITLE" value="Sales"/>
+            <column name="CONTAINER" value="WeblinkTags"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="b04ffc41-457b-42ca-a2a9-04386f0e586f"/>
+            <column name="KEYID" value="MARKETING"/>
+            <column name="TITLE" value="Marketing"/>
+            <column name="CONTAINER" value="WeblinkTags"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="76970f2c-7ca4-4723-832b-c06e92217174"/>
+            <column name="KEYID" value="SERVICE"/>
+            <column name="TITLE" value="Service"/>
+            <column name="CONTAINER" value="WeblinkTags"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="33003876-9c63-4fa6-927c-1e71b4aaa077"/>
+            <column name="KEYID" value="TRADE"/>
+            <column name="TITLE" value="Trade"/>
+            <column name="CONTAINER" value="WeblinkTags"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+    
+    <changeSet id="83cea193-681f-4dde-9bb6-c0d8ed7b0d72" author="m.groppe">
+        
+        <insert tableName="AB_KEYWORD_CATEGORY">
+            <column name="AB_KEYWORD_CATEGORYID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/>
+            <column name="NAME" value="WeblinkType"/>
+            <column name="SORTINGBY" valueNumeric="0"/>
+            <column name="SORTINGDIRECTION" value="ASC"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="126953bc-1219-43d7-a0a0-f2e0631e062f"/>
+            <column name="KEYID" value="WEBLINK_EMAIL"/>
+            <column name="TITLE" value="E-Mail"/>
+            <column name="CONTAINER" value="WeblinkType"/>
+            <column name="AB_KEYWORD_CATEGORY_ID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c8697f98d68ce33dceb605ef75ffa81eccb7a72
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include file="addLinkManagementKeywords.xml" relativeToChangelogFile="true"/>
+    <include file="CreateWeblink.xml" relativeToChangelogFile="true"/>
+    <include file="CreateWeblinktags.xml" relativeToChangelogFile="true"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml b/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc6eb66e9654e7231e0550f30c99cf524d10da84
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml
@@ -0,0 +1,21 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="p.neub" id="7af7aa80-0830-4185-a9cd-bb51b3d0c432">
+        <update tableName="AB_ATTRIBUTE">
+            <column name="ATTRIBUTE_TYPE" value="COMBO"/>
+            <where>AB_ATTRIBUTEID = ?</where>
+            <whereParams>
+                <param value="d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2"/>
+            </whereParams>
+        </update>
+        <update tableName="AB_ATTRIBUTE">
+            <column name="ATTRIBUTE_TYPE" value="COMBOVALUE"/>
+            <where>ATTRIBUTE_PARENT_ID = ?</where>
+            <whereParams>
+                <param value="d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2"/>
+            </whereParams>
+        </update>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml
index 4abf91ed480dd034b9ff2f9c53ef9a4fcb933f57..33011d5d959969ac0617d0f0e0fa6b84635b75fe 100644
--- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml
+++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml
@@ -1,7 +1,14 @@
 <?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="Bulkmail/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="Interest/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="CommunicationBlacklist/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Planning/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="alter_origin_attribute.xml"/>
+    <include relativeToChangelogFile="true" file="Duplicate/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="DSGVO/changelog.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml
index b3142a2cae6c09150008a62cdf5495ed7369e04f..d124f793b431215d0fb76156fe55123cc7cd09ff 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml
@@ -5,7 +5,7 @@
     <insert tableName="bulkmail">
       <column name="CREATEACTIVITIES" valueNumeric="1"/>
       <column name="BULKMAILID" value="2acfd3da-e986-414f-87cf-7ad2b46e5c59"/>
-      <column name="SENDER" value="tadmin@meine-firma.de"/>
+      <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/>
       <column name="SUBJECT" value="Erstkontakt meineFirma"/>
       <column name="DOCUMENTTEMPLATE_ID" value="1cabdde7-870e-4094-a0f7-a335ded3536a"/>
       <column name="NAME" value="Serienmail - Newsletter"/>
@@ -14,7 +14,7 @@
     <insert tableName="bulkmail">
       <column name="CREATEACTIVITIES" valueNumeric="1"/>
       <column name="BULKMAILID" value="bbb832fe-8ae4-403a-816a-b24d496933f2"/>
-      <column name="SENDER" value="tadmin@meine-firma.de"/>
+      <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/>
       <column name="SUBJECT" value="Email Vorlage Erstkontakt"/>
       <column name="DOCUMENTTEMPLATE_ID" value="12da39a8-6fc9-4220-b09d-179cd611a814"/>
       <column name="NAME" value="Produktinformationen"/>
@@ -23,7 +23,7 @@
     <insert tableName="bulkmail">
       <column name="CREATEACTIVITIES" valueNumeric="1"/>
       <column name="BULKMAILID" value="c4bd88c3-6205-4b91-8ba6-fd44fda2f19d"/>
-      <column name="SENDER" value="tadmin@meine-firma.de"/>
+      <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/>
       <column name="SUBJECT" value="Email Vorlage Erstkontakt"/>
       <column name="DOCUMENTTEMPLATE_ID" value="12da39a8-6fc9-4220-b09d-179cd611a814"/>
       <column name="NAME" value="Erstkontakt ADITO"/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml
index 78c7b235bd72a71679d121cac1e8dc31a59256a6..a05e5910ca511396ca56c60f745143bd0b3876ce 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml
@@ -145,6 +145,15 @@
       <column name="PROPKEY" value="roleNames"/>
       <column name="DATE_NEW" valueDate="2019-07-12T02:00:00"/>
     </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="ROLE"/>
+      <column name="NAME" value="_____USER_bcdfb521-c7d0-4ef1-8916-78e7d3232046"/>
+      <column name="DATE_EDIT" valueDate="2021-03-23T16:09:00"/>
+      <column name="ID" value="1ac7f51f-4e3d-4af3-857a-add69502aaaa"/>
+      <column name="PROPVAL" value="PROJECT_DSGVO"/>
+      <column name="PROPKEY" value="roleNames"/>
+      <column name="DATE_NEW" valueDate="2021-03-23T16:09:00"/>
+    </insert>
     <insert tableName="ASYS_USERS">
       <column name="GROUPID" value="PASSWORD"/>
       <column name="NAME" value="_____USER_bcdfb521-c7d0-4ef1-8916-78e7d3232046"/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
index 017cb8a587875706dcd111a717478dd086ab69b2..0368177e798ed872124001bf5941c04c88658c37 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
@@ -62,5 +62,18 @@
       <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/>
       <column name="ID" value="c1664cb5-c128-4b93-b3e4-274b97d305e6"/>
     </insert>
+    <insert tableName="ASYS_ALIASCONFIG">
+      <column name="KIND" valueNumeric="105"/>
+      <column name="DESCRIPTION" value="jdbc:derby://localhost:1527/basic_data"/>
+      <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
+      <column name="SERVERID" value="default"/>
+      <column name="XMLDATA" valueBlobFile="defaultBlob/data_alias.xml"/>
+      <column name="USER_NEW" value="_____DESIGNERANONYM"/>
+      <column name="DATE_NEW" valueDate="2020-09-28T04:50:35"/>
+      <column name="ALIASID" value="Data_alias_noAudit"/>
+      <column name="NAME" value="147ccd88-62cb-41a6-a2b8-2784adc6cec0"/>
+      <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/>
+      <column name="ID" value="52b8cce2-d023-4925-beaf-95503ae93a2f"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 52da7066094e0a0c99b4e5df78c7500cb370a432..aec7ecad42bf0be47e143e6c9c5d17d9a04b447c 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -9952,7 +9952,7 @@
             <description></description>
             <auditSyncConfig>
               <name>auditSyncConfig</name>
-              <auditMode v="0" />
+              <auditMode v="2" />
               <syncActive v="false" />
               <syncComplete v="true" />
               <syncDirection v="1" />
@@ -9972,6 +9972,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customStringProperty>
+                    <name>tableRef</name>
+                    <global v="false" />
+                    <property>SALESPROJECT</property>
+                  </customStringProperty>
+                </customProperties>
                 <dependencies>
                   <entityDependency>
                     <name>a1759554-192b-49fa-b6a8-b982115f71ab</name>
@@ -9993,6 +10000,18 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                  <customStringProperty>
+                    <name>keyword</name>
+                    <global v="false" />
+                    <property>ProductGroupcode</property>
+                  </customStringProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>FORECASTID</name>
@@ -10021,6 +10040,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>DATE_START</name>
@@ -10049,6 +10075,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>OBJECT_TYPE</name>
@@ -10091,6 +10124,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>FORECAST_YEAR</name>
@@ -10105,6 +10145,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>STATUS</name>
@@ -10119,6 +10166,13 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>RESPONSIBLE_CONTACT_ID</name>
@@ -10133,6 +10187,12 @@
                 <documentation></documentation>
                 <title></title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                  </customBooleanProperty>
+                </customProperties>
               </entityFieldDb>
             </entityFields>
           </entityDb>
@@ -10529,31 +10589,38 @@
                 </customProperties>
               </entityFieldDb>
               <entityFieldDb>
-                <name>SENDER</name>
+                <name>STATUS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="50" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
-                <title>Sender</title>
+                <title></title>
                 <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
-                <name>STATUS</name>
+                <name>CREATEACTIVITIES</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TESTING_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
@@ -10564,11 +10631,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CREATEACTIVITIES</name>
+                <name>TESTING_EMAIL_ADDRESS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="5" />
-                <size v="5" />
+                <columnType v="12" />
+                <size v="50" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -10578,11 +10645,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>TESTING_CONTACT_ID</name>
+                <name>USE_TEMPLATE_ATTACHMENTS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
+                <columnType v="-6" />
+                <size v="3" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -10592,7 +10659,21 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>TESTING_EMAIL_ADDRESS</name>
+                <name>DATE_TO_SEND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENDER_EMAIL_ADDRESS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
@@ -10606,11 +10687,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>USE_TEMPLATE_ATTACHMENTS</name>
+                <name>INTEREST_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="5" />
-                <size v="5" />
+                <columnType v="1" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -10714,8 +10795,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -10751,6 +10832,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>IS_TEST_RECIPIENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -12082,7 +12177,7 @@
             </entityFields>
           </entityDb>
           <entityDb>
-            <name>DUPLICATECLUSTERS</name>
+            <name>UNRELATEDDUPLICATES</name>
             <dbName></dbName>
             <idColumn>ID</idColumn>
             <idGeneratorType v="0" />
@@ -12100,7 +12195,7 @@
             </auditSyncConfig>
             <entityFields>
               <entityFieldDb>
-                <name>DUPLICATEID</name>
+                <name>SOURCEDUPLICATEID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="1" />
@@ -12114,39 +12209,39 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CLUSTERID</name>
+                <name>ID</name>
                 <dbName></dbName>
-                <primaryKey v="false" />
+                <primaryKey v="true" />
                 <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
+                <isUnique v="true" />
+                <index v="true" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>ID</name>
+                <name>UNRELATEDDUPLICATEID</name>
                 <dbName></dbName>
-                <primaryKey v="true" />
+                <primaryKey v="false" />
                 <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
+                <isUnique v="false" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>TARGET_ENTITY</name>
+                <name>DUPLICATETYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="200" />
+                <size v="63" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -12158,12 +12253,12 @@
             </entityFields>
           </entityDb>
           <entityDb>
-            <name>UNRELATEDDUPLICATES</name>
+            <name>LEADLOG</name>
             <dbName></dbName>
-            <idColumn>ID</idColumn>
+            <idColumn>LEADLOGID</idColumn>
             <idGeneratorType v="0" />
             <idGeneratorInterval v="1" />
-            <documentation></documentation>
+            <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/leadlog/documentation.adoc</documentation>
             <title></title>
             <description></description>
             <auditSyncConfig>
@@ -12176,41 +12271,13 @@
             </auditSyncConfig>
             <entityFields>
               <entityFieldDb>
-                <name>SOURCEDUPLICATEID</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>ID</name>
-                <dbName></dbName>
-                <primaryKey v="true" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>UNRELATEDDUPLICATEID</name>
+                <name>ROWSINSERTED</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
+                <columnType v="4" />
+                <size v="10" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -12218,11 +12285,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CLUSTERID</name>
+                <name>IMPORTSOURCE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
+                <columnType v="12" />
+                <size v="500" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -12231,26 +12298,6 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
-            </entityFields>
-          </entityDb>
-          <entityDb>
-            <name>DUPLICATESCANNERRESULTFIELDCONFIG</name>
-            <dbName></dbName>
-            <idColumn>ID</idColumn>
-            <idGeneratorType v="0" />
-            <idGeneratorInterval v="1" />
-            <documentation></documentation>
-            <title></title>
-            <description></description>
-            <auditSyncConfig>
-              <name>auditSyncConfig</name>
-              <auditMode v="0" />
-              <syncActive v="false" />
-              <syncComplete v="true" />
-              <syncDirection v="1" />
-              <syncIds></syncIds>
-            </auditSyncConfig>
-            <entityFields>
               <entityFieldDb>
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
@@ -12266,34 +12313,13 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>DUPLICATESCANNER_ID</name>
+                <name>IMPORTERRORS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
+                <columnType v="4" />
+                <size v="10" />
                 <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="false" />
-                <index v="true" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-                <dependencies>
-                  <entityDependency>
-                    <name>9b123a17-2f41-49f8-9492-f386ece46f7c</name>
-                    <entityName>DUPLICATESCANNER</entityName>
-                    <fieldName>ID</fieldName>
-                  </entityDependency>
-                </dependencies>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>DATE_NEW</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -12301,7 +12327,7 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>ID</name>
+                <name>LEADLOGID</name>
                 <dbName></dbName>
                 <primaryKey v="true" />
                 <columnType v="1" />
@@ -12315,13 +12341,13 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>USER_NEW</name>
+                <name>IMPORTCANCELED</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="50" />
+                <columnType v="1" />
+                <size v="1" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -12329,139 +12355,7 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>ENTITY_FIELD_NAME</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="100" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>USER_EDIT</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="50" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-            </entityFields>
-          </entityDb>
-          <entityDb>
-            <name>LEADLOG</name>
-            <dbName></dbName>
-            <idColumn>LEADLOGID</idColumn>
-            <idGeneratorType v="0" />
-            <idGeneratorInterval v="1" />
-            <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/leadlog/documentation.adoc</documentation>
-            <title></title>
-            <description></description>
-            <auditSyncConfig>
-              <name>auditSyncConfig</name>
-              <auditMode v="0" />
-              <syncActive v="false" />
-              <syncComplete v="true" />
-              <syncDirection v="1" />
-              <syncIds></syncIds>
-            </auditSyncConfig>
-            <entityFields>
-              <entityFieldDb>
-                <name>ROWSINSERTED</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>IMPORTSOURCE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="500" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>DATE_EDIT</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>IMPORTERRORS</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>LEADLOGID</name>
-                <dbName></dbName>
-                <primaryKey v="true" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>IMPORTCANCELED</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="1" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>DATE_NEW</name>
+                <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
@@ -18438,6 +18332,82 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>HASDUPLICATE</name>
+            <dbName></dbName>
+            <idColumn>HASDUPLICATEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUPLICATECOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HASDUPLICATEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
           <entityDb>
             <name>AB_SYNCCONTACT</name>
             <dbName></dbName>
@@ -18571,9 +18541,9 @@
             </entityFields>
           </entityDb>
           <entityDb>
-            <name>PLANNING_MONTH</name>
+            <name>WEBLINK</name>
             <dbName></dbName>
-            <idColumn>PLANNING_MONTHID</idColumn>
+            <idColumn>WEBLINKID</idColumn>
             <idGeneratorType v="0" />
             <idGeneratorInterval v="1" />
             <documentation></documentation>
@@ -18589,26 +18559,26 @@
             </auditSyncConfig>
             <entityFields>
               <entityFieldDb>
-                <name>PLANNING_MONTHID</name>
+                <name>SCORE</name>
                 <dbName></dbName>
-                <primaryKey v="true" />
-                <columnType v="1" />
-                <size v="36" />
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
                 <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>MONTH_FACTOR</name>
+                <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -18617,11 +18587,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>MONTH_NUMBER</name>
+                <name>LINKTYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
+                <columnType v="12" />
+                <size v="50" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -18630,6 +18600,1669 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEBLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>URL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PLACEHOLDER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WORKFLOWPROCESSDEFINITION_KEY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISREDIRECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>WEBLINKTAG</name>
+            <dbName></dbName>
+            <idColumn>WEBLINKTAGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEBLINK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TAG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEBLINKTAGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MAIL_LOG</name>
+            <dbName></dbName>
+            <idColumn>MAIL_LOGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ERRORMESSAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-1" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAIL_LOGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENDER_EMAIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RECIPIENT_EMAIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAILING_SUBJECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILEPATH</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAIL_RUN_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_SEND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="23" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OPENER_LINK_CLICK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MAIL_RUN</name>
+            <dbName></dbName>
+            <idColumn>MAIL_RUNID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>MAIL_RUNID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INTEREST_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_RUN_START</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_RUN_FINISHED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TESTRUN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMMUNICATIONSETTINGS</name>
+            <dbName></dbName>
+            <idColumn>COMMUNICATIONSETTINGSID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHANNEL_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHANNEL_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMMUNICATIONSETTINGSID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MEDIUM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMMUNICATIONLEGALBASE</name>
+            <dbName></dbName>
+            <idColumn>COMMUNICATIONLEGALBASEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>COMMUNICATIONSETTINGS_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMMUNICATIONLEGALBASEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VERSION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>BULKMAILTESTRECIPIENT</name>
+            <dbName></dbName>
+            <idColumn>BULKMAILTESTRECIPIENTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>BULKMAIL_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMAIL_ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BULKMAILTESTRECIPIENTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>INTERESTLINK</name>
+            <dbName></dbName>
+            <idColumn>INTERESTLINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INTEREST_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INTERESTLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>INTEREST</name>
+            <dbName></dbName>
+            <idColumn>INTERESTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INTERESTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IS_DEFAULT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>WEBLINK_CLICK</name>
+            <dbName></dbName>
+            <idColumn>WEBLINK_CLICKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>BROWSER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEVICE_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEBLINK_CLICKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAIL_LOG_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IP_ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEBLINK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OPERATING_SYSTEM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_OPENED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMMUNICATIONBLACKLIST</name>
+            <dbName></dbName>
+            <idColumn>COMMUNICATIONBLACKLISTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>BLACKLIST_FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-1" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>END_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>START_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMMUNICATIONBLACKLISTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BLACKLIST_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>PLANNING_MONTH</name>
+            <dbName></dbName>
+            <idColumn>PLANNING_MONTHID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>PLANNING_MONTHID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MONTH_FACTOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MONTH_NUMBER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVOCONFIGURATION</name>
+            <dbName></dbName>
+            <idColumn>DSGVOCONFIGURATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DSGVOCONFIGURATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVODELETEFLAG</name>
+            <dbName></dbName>
+            <idColumn>DSGVODELETEFLAGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="1" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DSGVODELETEFLAGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title>Contact Id</title>
+                <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="false" />
+                  </customBooleanProperty>
+                  <customStringProperty>
+                    <name>tableRef</name>
+                    <global v="false" />
+                    <property>CONTACT</property>
+                  </customStringProperty>
+                </customProperties>
+                <dependencies>
+                  <entityDependency>
+                    <name>2278befb-de66-4f45-98c2-619eb686d999</name>
+                    <entityName>CONTACT</entityName>
+                    <fieldName>CONTACTID</fieldName>
+                  </entityDependency>
+                </dependencies>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title>Reason</title>
+                <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                  <customStringProperty>
+                    <name>keyword</name>
+                    <global v="false" />
+                    <property>DSGVOReason</property>
+                  </customStringProperty>
+                </customProperties>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
         </entities>
diff --git a/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod
new file mode 100644
index 0000000000000000000000000000000000000000..1c4215342d4256568e37babf86ad9e3b8292c788
--- /dev/null
+++ b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod
@@ -0,0 +1,16142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aliasDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasDefinition/1.2.0">
+  <name>Data_alias_noAudit</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <datasourceType v="0" />
+  <aliasDefinitionSub>
+    <aliasDefDb>
+      <auditActive v="false" />
+      <entityGroup>
+        <name>entityGroup</name>
+        <entities>
+          <entityDb>
+            <name>DUPLICATESCANNERRESULTFIELDCONFIG</name>
+            <dbName></dbName>
+            <idColumn>ID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUPLICATESCANNER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTITY_FIELD_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEDISCUSSION</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEDISCUSSIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>PARENTENTRY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCUSSIONTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEDISCUSSIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AUTHOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESPROJECTPHASEDEFINITION</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECTPHASEDEFINITIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>PHASE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHECKLIST_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECTPHASEDEFINITIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>EXPORTTEMPLATEPLACEOFUSE</name>
+            <dbName></dbName>
+            <idColumn>EXPORTTEMPLATEPLACEOFUSEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATEPLACEOFUSEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PLACEOFUSE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>IMPORTFIELD</name>
+            <dbName></dbName>
+            <idColumn>IMPORTFIELDID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>IMPORTFIELDID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELDNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAPPINGFIELD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELDNUMBER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADIMPORT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGELINK</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGELINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>KNOWLEDGELINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ROW_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CHECKLISTENTRY</name>
+            <dbName></dbName>
+            <idColumn>CHECKLISTENTRYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CHECKLISTENTRYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AUTO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHECKLIST_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_PERMISSIONCALENDAR</name>
+            <dbName></dbName>
+            <idColumn>AB_PERMISSIONCALENDARID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>PERMISSION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERMISSIONPROCURER_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_PERMISSIONCALENDARID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERMISSIONPROCURER_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERMISSIONDEALER_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERMISSIONDEALER_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_ATTRIBUTEUSAGE</name>
+            <dbName></dbName>
+            <idColumn>AB_ATTRIBUTEUSAGEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTEUSAGEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MIN_COUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAX_COUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_SYNCCONTACT</name>
+            <dbName></dbName>
+            <idColumn>SYNCCONTACTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXCHANGEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ASYS_FAVORITEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="46" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SYNCCONTACTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_DEL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONTYPE</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONTYPEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>SCORETYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONTYPEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONGROUP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OUTDATED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SCOREPOINTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_KEYWORD_CATEGORY</name>
+            <dbName></dbName>
+            <idColumn>AB_KEYWORD_CATEGORYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>SORTINGBY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_CATEGORYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTINGDIRECTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="4" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>PERSON</name>
+            <dbName></dbName>
+            <idColumn>PERSONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>PERSONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLESUFFIX</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PICTURE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2004" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIRSTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MIDDLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATEOFBIRTH</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="91" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LASTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="16" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GENDER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_UNLINKEDMAIL</name>
+            <dbName></dbName>
+            <idColumn>AB_UNLINKEDMAILID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>MAIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENDER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="1000" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SUBJECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_UNLINKEDMAILID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RECIPIENTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENTDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATION</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CLASSIFICATIONTYPE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SCOREPOINTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONGRADING</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONGRADINGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CLASSIFICATIONGRADINGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONGROUP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MINPERCENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GRADING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CAMPAIGNPARTICIPANTLOG</name>
+            <dbName></dbName>
+            <idColumn>CAMPAIGNPARTICIPANTLOGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CAMPAIGN_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNPARTICIPANT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PREVIOUS_CAMPAIGNSTEP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNPARTICIPANTLOGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNSTEP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>WORKFLOWSTARTCONFIG</name>
+            <dbName></dbName>
+            <idColumn>WORKFLOWSTARTCONFIGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>TRIGGER_EVENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WORKFLOWSTARTCONFIGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROCESSDEFINITION_KEY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVOINFO</name>
+            <dbName></dbName>
+            <idColumn>DSGVOINFOID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>RECIPIENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GUARANTEE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRANSMISSION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DSGVOINFOID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATASOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>PRODUCTPRICE</name>
+            <dbName></dbName>
+            <idColumn>PRODUCTPRICEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CURRENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_TO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FROMQUANTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRICELIST</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BUYSELL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_FROM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCTPRICEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESPROJECT_TOUCHPOINT</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECT_TOUCHPOINTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>SALESPROJECT_TOUCHPOINTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TOUCHPOINT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTRYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEROLES</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEROLESID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>KNOWLEDGEROLESID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ROLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVOCONFIGURATION</name>
+            <dbName></dbName>
+            <idColumn>DSGVOCONFIGURATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DSGVOCONFIGURATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>OFFER</name>
+            <dbName></dbName>
+            <idColumn>OFFERID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VERSNR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HEADER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LETTERSALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CURRENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENTTERMS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DELIVERYTERMS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FOOTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFERDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFERID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFERCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROBABILITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="6" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>OFFERITEM</name>
+            <dbName></dbName>
+            <idColumn>OFFERITEMID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>UNIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>QUANTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFERITEMID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMPOSITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OPTIONAL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GROUPCODEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMSORT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ASSIGNEDTO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>VISITPLANEMPLOYEEWEEK</name>
+            <dbName></dbName>
+            <idColumn>VISITPLANEMPLOYEEWEEKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>VISITPLANEMPLOYEEWEEKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITPLAN_WEEK</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITPLAN_YEAR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>STOCK</name>
+            <dbName></dbName>
+            <idColumn>STOCKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>REFNUMBER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STOCKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WAREHOUSE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>QUANTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTRYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IN_OUT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVODELETEFLAG</name>
+            <dbName></dbName>
+            <idColumn>DSGVODELETEFLAGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DSGVODELETEFLAGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DISTRICT</name>
+            <dbName></dbName>
+            <idColumn>DISTRICTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISO3</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_AUTOADD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENTDISTRICT_DISTRICTID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_NUMBER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_COUNTRYINFO</name>
+            <dbName></dbName>
+            <idColumn>ISO2</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ADDR_FORMAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME_LATIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME_NATIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FLAG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2004" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISO3</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REQUIRED_FIELDS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ZIP_REGEX</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="1000" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISO2</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="2" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DUPLICATESCANNER</name>
+            <dbName></dbName>
+            <idColumn>ID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ID_FIELD_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SCAN_PATTERN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILTER_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTITY_TO_SCAN_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXTERNAL_SERVICE_USAGE_ALLOWED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CAMPAIGN</name>
+            <dbName></dbName>
+            <idColumn>CAMPAIGNID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CURRENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LOCATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EVENT_BEGIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EVENTTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMPLOYEE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EVENT_END</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DOCUMENTTEMPLATE</name>
+            <dbName></dbName>
+            <idColumn>DOCUMENTTEMPLATEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KIND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REPLACEMENTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CHECKLIST</name>
+            <dbName></dbName>
+            <idColumn>CHECKLISTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CHECKLISTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_LANGUAGE</name>
+            <dbName></dbName>
+            <idColumn>ISO3</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>NAME_LATIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME_NATIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISO3</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISACTIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISO2</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="2" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LEADIMPORTMAPPINGASSISTANT</name>
+            <dbName></dbName>
+            <idColumn>LEADIMPORTMAPPINGASSISTANTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>LEADIMPORTMAPPINGASSISTANTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELDNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INPUTVALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OUTPUTVALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADIMPORT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SERIALLETTER</name>
+            <dbName></dbName>
+            <idColumn>SERIALLETTERID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SERIALLETTERID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_KEYWORD_ATTRIBUTERELATION</name>
+            <dbName></dbName>
+            <idColumn>AB_KEYWORD_ATTRIBUTERELATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CHAR_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LONG_CHAR_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BOOL_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_ATTRIBUTERELATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NUMBER_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_ENTRY_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>EXPORTTEMPLATESELECTION</name>
+            <dbName></dbName>
+            <idColumn>EXPORTTEMPLATESELECTIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATESELECTIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="33" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>TICKET</name>
+            <dbName></dbName>
+            <idColumn>TICKETID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TICKETTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TICKETID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DATABASECHANGELOG</name>
+            <dbName></dbName>
+            <idColumn></idColumn>
+            <idGeneratorType v="1" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>EXECTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATEEXECUTED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORDEREXECUTED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMMENTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AUTHOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTEXTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MD5SUM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="35" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LIQUIBASE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="20" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEPLOYMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TAG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LABELS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>VISITPLANENTRY</name>
+            <dbName></dbName>
+            <idColumn>VISITPLANENTRYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>END_TIME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="92" />
+                <size v="8" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BEGIN_TIME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="92" />
+                <size v="8" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITPLANEMPLOYEEWEEK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITRECOMMENDATION_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS_APPOINTMENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITPLANENTRYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>APPOINTMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTRYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="91" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGANISATION_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONSCORE</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONSCOREID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CLASSIFICATIONTYPE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONSCOREID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SCOREPERCENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="10" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DISTRICTCONTACT</name>
+            <dbName></dbName>
+            <idColumn>DISTRICTCONTACTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ADVISER_ROLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICTCONTACTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_UNTIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORIGIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADVISER_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_FROM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LEAD</name>
+            <dbName></dbName>
+            <idColumn>LEADID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ZIP</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CUSTOMERCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIRSTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_LOYALTY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUPLICAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMINTERNET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MIDDLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COUNTRY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="2" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LASTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TAXCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGCOUNTRYCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMXING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADIMPORT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMLINKEDIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BUILDINGNO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_INDUSTRY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACTPOSITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE03</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE02</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACTROLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="60" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMBLOG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERSINFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEPARTMENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REGION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMXING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERSON_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMPHONE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMMOBIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMINTERNET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEGALFORM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMEMAIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMLINKEDIN</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUPSTATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="20" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMBLOG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GENDER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE04</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LETTERSALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMPHONE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGANISATION_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMMOBIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATEOFBIRTH</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VATCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMEMAIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGINFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROVINCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CONTACT</name>
+            <dbName></dbName>
+            <idColumn>CONTACTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACTPOSITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACTROLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGANISATION_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEPARTMENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PERSON_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LETTERSALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESS_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LEADLOG</name>
+            <dbName></dbName>
+            <idColumn>LEADLOGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ROWSINSERTED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORTSOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORTERRORS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADLOGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORTCANCELED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADIMPORT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LEADTEMP</name>
+            <dbName></dbName>
+            <idColumn>LEADTEMPID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>COLUMN18</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN17</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN19</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN14</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN13</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN16</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN15</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN10</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN12</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN11</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN30</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADTEMPID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>POSITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORT_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN07</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN29</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN06</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN28</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN09</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN08</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN03</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN25</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN02</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN24</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN05</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN27</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN04</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN26</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN21</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN20</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN01</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN23</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COLUMN22</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="300" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ROW_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>BULKMAILRECIPIENT</name>
+            <dbName></dbName>
+            <idColumn>BULKMAILRECIPIENTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BULKMAIL_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMAIL_ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROBLEM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BULKMAILRECIPIENTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENTDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LEADIMPORT</name>
+            <dbName></dbName>
+            <idColumn>LEADIMPORTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RECORD_SEPARATOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELD_SEPARATOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LEADIMPORTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORTEMPLOYEE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORTSOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IMPORT_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELD_DELIMITER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HEADLINE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>FORECAST</name>
+            <dbName></dbName>
+            <idColumn>FORECASTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GROUPCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FORECASTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VOLUME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_START</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>VISITRECOMMENDATION</name>
+            <dbName></dbName>
+            <idColumn>VISITRECOMMENDATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>RESPONSIBLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUE_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITRECOMMENDATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRIORITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_PERSON_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>OBSERVATION</name>
+            <dbName></dbName>
+            <idColumn>OBSERVATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_FILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBSERVATION_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NOTIFICATION_PRIO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBSERVATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRIGGEREVENTDELETE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRIGGEREVENTINSERT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRIGGEREVENTUPDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBSERVER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_FIELD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALUTATION</name>
+            <dbName></dbName>
+            <idColumn>SALUTATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SEX</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALUTATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HEADLINE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LETTERSALUTATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONSTORAGE</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONSTORAGEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONVALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="20" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONSTORAGEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OUTDATED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMPETITION</name>
+            <dbName></dbName>
+            <idColumn>COMPETITIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PHASE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMPETITIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_CANCELLED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MST_TEAM</name>
+            <dbName></dbName>
+            <idColumn>MST_TEAMID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>MST_TEAMID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IS_ARCHIVED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SERVICE_URL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TEAMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GENERAL_CHANNELID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="48" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEB_URL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>PRODUCT</name>
+            <dbName></dbName>
+            <idColumn>PRODUCTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>UNIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PICTURE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2004" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADVERTISING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCTNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCTCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MINSTOCK</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GROUPCODEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>TASK</name>
+            <dbName></dbName>
+            <idColumn>TASKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>REQUESTOR_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRIORITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>START_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MATURITY_DATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KIND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROGRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EDITOR_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SUBJECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROTECTIONLEVEL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENT_CONTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="64" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_KEYWORD_ENTRY</name>
+            <dbName></dbName>
+            <idColumn>AB_KEYWORD_ENTRYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ISESSENTIAL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTAINER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KEYID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISACTIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_CATEGORY_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_ENTRYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_OBJECTRELATIONTYPE</name>
+            <dbName></dbName>
+            <idColumn>AB_OBJECTRELATIONTYPEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>AB_OBJECTRELATIONTYPEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SIDE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RELATION_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ICON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RELATION_TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HIERARCHY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONGROUP</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONGROUPID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CLASSIFICATIONGROUPID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_APPOINTMENTLINK</name>
+            <dbName></dbName>
+            <idColumn>AB_APPOINTMENTLINK_ID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_APPOINTMENTLINK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>APPOINTMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CAMPAIGNSTEP</name>
+            <dbName></dbName>
+            <idColumn>CAMPAIGNSTEPID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CAMPAIGN_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PREDECESSORSTEP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNSTEPID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STEPMEDIUM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_START</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="91" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMPLOYEE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAXPARTICIPANTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_END</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="91" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>ORGANISATION</name>
+            <dbName></dbName>
+            <idColumn>ORGANISATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CUSTOMERCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PICTURE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2004" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KIND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESAREA</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORGANISATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CAMPAIGNCOST</name>
+            <dbName></dbName>
+            <idColumn>CAMPAIGNCOSTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CAMPAIGN_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNCOSTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CATEGORY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNSTEP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DSGVO</name>
+            <dbName></dbName>
+            <idColumn>DSGVOID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DSGVOTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_TO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUORITYSOURCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DSGVOID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PURPOSE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ROW_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_ATTRIBUTERELATION</name>
+            <dbName></dbName>
+            <idColumn>AB_ATTRIBUTERELATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>INT_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NUMBER_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTERELATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHAR_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID_VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>ACTIVITYLINK</name>
+            <dbName></dbName>
+            <idColumn>ACTIVITYLINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ACTIVITYLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ACTIVITY_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>ADDRESS</name>
+            <dbName></dbName>
+            <idColumn>ADDRESSID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ZIP</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="11" />
+                <scale v="8" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDR_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REGION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESSADDITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="60" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COUNTRY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="2" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESSID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROVINCE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRIDENTIFIER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="60" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="10" />
+                <scale v="8" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BUILDINGNO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DOCUMENTTEMPLATELINK</name>
+            <dbName></dbName>
+            <idColumn>DOCUMENTTEMPLATELINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATE_ID_PARENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATELINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATE_ID_CHILD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>WORKFLOWSIGNAL</name>
+            <dbName></dbName>
+            <idColumn>WORKFLOWSIGNALID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>SIGNAL_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WORKFLOWSIGNALID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRIGGER_EVENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_CONDITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROCESSDEFINITION_KEY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VARIABLES</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEMANAGEMENT</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEMANAGEMENTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CONTENTDECODED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AUTHOR_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PUBLISH</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>BULKMAIL</name>
+            <dbName></dbName>
+            <idColumn>BULKMAILID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USE_TEMPLATE_ATTACHMENTS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>BULKMAILID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENDER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TESTING_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SUBJECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TESTING_EMAIL_ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CREATEACTIVITIES</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMMUNICATION</name>
+            <dbName></dbName>
+            <idColumn>COMMUNICATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ISSTANDARD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MEDIUM_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COMMUNICATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_OBJECTRELATION</name>
+            <dbName></dbName>
+            <idColumn>AB_OBJECTRELATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>AB_OBJECTRELATIONTYPE1</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_OBJECTRELATIONTYPE2</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT2_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT1_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_OBJECTRELATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>UNRELATEDDUPLICATES</name>
+            <dbName></dbName>
+            <idColumn>ID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CLUSTERID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCEDUPLICATEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>UNRELATEDDUPLICATEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEGITINTERFACE</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEGITINTERFACEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEGITINTERFACEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GITCOMMIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SYSTEMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>TASKLINK</name>
+            <dbName></dbName>
+            <idColumn>TASKLINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASKLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGETAG</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGETAGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>KNOWLEDGETAGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TAG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DOCUMENTTEMPLATEPLACEOFUSE</name>
+            <dbName></dbName>
+            <idColumn>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PLACEOFUSE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DOCUMENTTEMPLATEPLACEOFUSEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>LETTERRECIPIENT</name>
+            <dbName></dbName>
+            <idColumn>LETTERRECIPIENTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>SERIALLETTER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LETTERRECIPIENTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MST_TEAMLINK</name>
+            <dbName></dbName>
+            <idColumn>MST_TEAMLINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MST_TEAM_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MST_TEAMLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CONTRACT</name>
+            <dbName></dbName>
+            <idColumn>CONTRACTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CONTRACTCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTDUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTSTATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTEND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTRACTSTART</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REMARK</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESPROJECT</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STARTDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VOLUME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENDDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PHASE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROBABILITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="6" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROJECTCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASONS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="498" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROJECTTITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="150" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CAMPAIGNPARTICIPANT</name>
+            <dbName></dbName>
+            <idColumn>CAMPAIGNPARTICIPANTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>CAMPAIGN_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNPARTICIPANTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CAMPAIGNSTEP_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DESCRIPTIONTRANSLATION</name>
+            <dbName></dbName>
+            <idColumn>DESCRIPTIONTRANSLATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTIONTRANSLATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LANG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DISTRICTRESPONSIBLE</name>
+            <dbName></dbName>
+            <idColumn>DISTRICTRESPONSIBLEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ADVISER_STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICTRESPONSIBLEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADVISER_ROLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEPARTMENT_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMPLOYEE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_FROM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALID_UNTIL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESPROJECT_MILESTONE</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECT_MILESTONEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>MILESTONEVALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KIND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECT_MILESTONEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_START</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_END</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>COMMRESTRICTION</name>
+            <dbName></dbName>
+            <idColumn>COMMRESTRICTIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>COMMRESTRICTIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MEDIUM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STARTDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EMPLOYEE_INVOLVED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>REASON</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>OBJECTMEMBER</name>
+            <dbName></dbName>
+            <idColumn>OBJECTMEMBERID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECTMEMBERID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ONSITE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MEMBERROLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DUPLICATECLUSTERS</name>
+            <dbName></dbName>
+            <idColumn>ID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DUPLICATEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLUSTERID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TARGET_ENTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>EXPORTTEMPLATE</name>
+            <dbName></dbName>
+            <idColumn>EXPORTTEMPLATEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>FIELDSEPARATOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="1337" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FIELDDELIMITER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SENTENCESEPARATOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>PROD2PROD</name>
+            <dbName></dbName>
+            <idColumn>PROD2PRODID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OPTIONAL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TAKEPRICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>QUANTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DEST_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PROD2PRODID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>TIMETRACKING</name>
+            <dbName></dbName>
+            <idColumn>TIMETRACKINGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>TIMETRACKINGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRACKINGMINUTES</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TRACKINGDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ROW_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_ATTRIBUTE</name>
+            <dbName></dbName>
+            <idColumn>AB_ATTRIBUTEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>ATTRIBUTE_NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DROPDOWNDEFINITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_ACTIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALIDATIONPARAMETERS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DROPDOWNFILTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="512" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ATTRIBUTE_PARENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_KEYWORD_ATTRIBUTE</name>
+            <dbName></dbName>
+            <idColumn>AB_KEYWORD_ATTRIBUTEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>AB_KEYWORD_ATTRIBUTEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KIND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTAINER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="80" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_KEYWORD_CATEGORY_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CHECKLISTENTRYVALUE</name>
+            <dbName></dbName>
+            <idColumn>CHECKLISTENTRYVALUEID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>IS_FULFILLED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHECKLISTENTRYVALUEID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CHECKLISTENTRY_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_LOGHISTORY</name>
+            <dbName></dbName>
+            <idColumn>AB_LOGHISTORYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>TABLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCE_TABLENAMEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LOGTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SOURCE_TABLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_LOGHISTORYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TABLENAMEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>EXPORTTEMPLATEFIELD</name>
+            <dbName></dbName>
+            <idColumn>EXPORTTEMPLATEFIELDID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>FIELD</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATEFIELDID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>EXPORTTEMPLATE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGETAGLINK</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGETAGLINKID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGETAGLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGETAG_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>DATABASECHANGELOGLOCK</name>
+            <dbName></dbName>
+            <idColumn>ID</idColumn>
+            <idGeneratorType v="1" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>LOCKGRANTED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LOCKED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="16" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>LOCKEDBY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESORDER</name>
+            <dbName></dbName>
+            <idColumn>SALESORDERID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>NOTICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYDUEDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>HEADER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDERCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CANCELLATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUNNINGTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDERDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUNNINGLEVEL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDERID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUNNINGDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CURRENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENTTERMS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DELIVERYTERMS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENTADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORDERTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OFFER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FOOTER</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DELIVERYADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORDERSTATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>SALESORDERITEM</name>
+            <dbName></dbName>
+            <idColumn>SALESORDERITEMID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>UNIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>QUANTITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PRODUCT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMPOSITION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GROUPCODEID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMSORT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDER_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ASSIGNEDTO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESORDERITEMID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ITEMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="250" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>AB_CTILOG</name>
+            <dbName></dbName>
+            <idColumn>AB_CTILOGID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>AB_CTILOGID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ANSWERMODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CALLID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="64" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DIRECTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>ACTIVITY</name>
+            <dbName></dbName>
+            <idColumn>ACTIVITYID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>RESPONSIBLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DIRECTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ENTRYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ACTIVITYID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CATEGORY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SUBJECT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PARENT_CONTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="64" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+        </entities>
+      </entityGroup>
+    </aliasDefDb>
+  </aliasDefinitionSub>
+</aliasDefinition>
diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
index d67029e7214916e37526a955729915a48c2b80a0..25b0e7dfca8fb6805941e079c2a1ac0e066fad53 100644
--- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
+++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
@@ -196,6 +196,18 @@
                 <name>DocumentTemplate</name>
                 <kind v="10077" />
               </entityNode>
+              <entityNode>
+                <name>Weblink</name>
+                <kind v="10077" />
+              </entityNode>
+              <entityNode>
+                <name>Interest</name>
+                <kind v="10077" />
+              </entityNode>
+              <entityNode>
+                <name>CommunicationBlacklist</name>
+                <kind v="10077" />
+              </entityNode>
             </childNodes>
           </entityNode>
           <entityNode>
@@ -318,11 +330,6 @@
                 <kind v="10077" />
                 <title></title>
               </entityNode>
-              <entityNode>
-                <name>Duplicates</name>
-                <kind v="10077" />
-                <title></title>
-              </entityNode>
               <entityNode>
                 <name>AuditLogHistory</name>
                 <kind v="10077" />
@@ -350,6 +357,24 @@
               </entityNode>
             </childNodes>
           </entityNode>
+          <entityNode>
+            <name>Group13</name>
+            <kind v="123" />
+            <childNodes>
+              <entityNode>
+                <name>INTERNAL_ADMINISTRATOR</name>
+                <kind v="159" />
+              </entityNode>
+              <entityNode>
+                <name>DSGVOConfiguration</name>
+                <kind v="10077" />
+              </entityNode>
+              <entityNode>
+                <name>PROJECT_DSGVO</name>
+                <kind v="159" />
+              </entityNode>
+            </childNodes>
+          </entityNode>
         </childNodes>
       </entityNode>
       <entityNode>
diff --git a/entity/360Degree_entity/entityfields/newmodule/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/stateProcess.js
index 0b02ed053a7ba32d8f740031e0c5ceb72f1c3716..bb33b08a687ae6dc0ba285fbef672ba7f8f701e8 100644
--- a/entity/360Degree_entity/entityfields/newmodule/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/stateProcess.js
@@ -5,5 +5,7 @@ import("KeywordRegistry_basic");
 
 var objectStatusParam = vars.get("$param.ObjectStatus_param");
 
-if (objectStatusParam == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (objectStatusParam == $KeywordRegistry.contactStatus$inactive() || objectStatusParam == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index 6a673e9aac4d858ba63d07b76b4105d4cb90a7e6..320df4d9ebd700114e5e2eb57420bef95bc7089e 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -146,6 +146,12 @@
           <fieldName>ContactAddresses</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>03534109-04a7-4deb-b139-5c548aa2fd00</name>
+          <entityName>CommunicationChannel_entity</entityName>
+          <fieldName>Addresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Address_entity/afterOperatingState.js b/entity/Address_entity/afterOperatingState.js
index 23f607ff7d13f5153ef6e252d1f8e6b185218040..83cbe277d0eae36e6744186d6d70f35fb00f42f8 100644
--- a/entity/Address_entity/afterOperatingState.js
+++ b/entity/Address_entity/afterOperatingState.js
@@ -3,4 +3,12 @@ import("system.neon");
 
 //in some cases, the field does not exist yet/not anymore when the afterOperatingState process is called
 if (vars.exists("$field.AddressSearch"))
-    neon.setFieldValue("$field.AddressSearch", "");//why is this needed?
\ No newline at end of file
+{
+    neon.setFieldValue("$field.AddressSearch", "");//why is this needed?
+}
+   
+if(vars.exists("$sys.operatingstate") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW)
+{
+    vars.set("$context.PushDataPrivacyNotification", "false");
+}
+    
diff --git a/entity/Address_entity/recordcontainers/db/onDBInsert.js b/entity/Address_entity/recordcontainers/db/onDBInsert.js
index cddb15a9f8fd75177c6a219a72f240d56a1b257b..b088c7a1b3db64fb4592621cdb93bd95298c94d8 100644
--- a/entity/Address_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Address_entity/recordcontainers/db/onDBInsert.js
@@ -49,7 +49,11 @@ if(scopeType == "Organisation")
         }
 }
 
-DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["ADDRESS.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param"));
+if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient"))
+{
+    DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param"));
+    vars.set("$context.PushDataPrivacyNotification", "true");
+}
 
 var address = new AddressObject(rowdata["ADDRESS.ADDRESS"], rowdata["ADDRESS.BUILDINGNO"], rowdata["ADDRESS.ZIP"], rowdata["ADDRESS.CITY"], rowdata["ADDRESS.COUNTRY"], rowdata["ADDRESS.STATE"]);
 var addressLocation = new LocationFinder().getGeoLocation(address);
diff --git a/entity/Address_entity/recordcontainers/db/onDBUpdate.js b/entity/Address_entity/recordcontainers/db/onDBUpdate.js
index 87c3f2c27180a26dfb2d548acf385067807800a8..8ce04bc6f3d87c4b41a081af756c2a384f522a8f 100644
--- a/entity/Address_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Address_entity/recordcontainers/db/onDBUpdate.js
@@ -7,7 +7,11 @@ import("DataPrivacy_lib");
 
 var rowdata = vars.get("$local.rowdata");
 
-DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["ADDRESS.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param"));
+if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient"))
+{
+    DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param"));
+    vars.set("$context.PushDataPrivacyNotification", "true");
+}  
 
 var changed = vars.get("$local.changed");
 var isAddressChanged = changed.includes("ADDRESS.ADDRESS")
diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
index eb56b773bae0329432467ddd786d80a0b7805dc6..3310f1bc7a250aa6498e057dd5f132e0dd0c6e91 100644
--- a/entity/AdminViewRow_entity/AdminViewRow_entity.aod
+++ b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
@@ -48,6 +48,9 @@
       <onActionProcess>%aditoprj%/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:CLIPBOARD</iconId>
     </entityActionField>
+    <entityParameter>
+      <name>CopiedField_param</name>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js
index dd853d9ace41d189f6b152f075fee9c1038e0ecb..2704822e2a27ba7a04b04e33f7e5d1e8e39214fa 100644
--- a/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js
+++ b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js
@@ -8,4 +8,8 @@ var row = fieldValues.find(function ([id])
     return id === fieldId;
 });
 if (row)
-    neon.copyToClipboard(row[2]);
\ No newline at end of file
+{
+    neon.copyToClipboard(row[2]);
+    vars.set("$param.CopiedField_param", fieldId);
+    neon.refresh();
+}
\ No newline at end of file
diff --git a/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js b/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js
index 1aa381774a2bfaf28ac963e84c63dda45cbf7192..032f17fc800e63291177f9c488a0d7a3410db446 100644
--- a/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js
@@ -1,4 +1,12 @@
 import("system.vars");
 import("system.result");
 
-result.object(JSON.parse(vars.getString("$param.Rows_param")));
\ No newline at end of file
+var rows = JSON.parse(vars.getString("$param.Rows_param"));
+var copiedField = vars.get("$param.CopiedField_param");
+if (copiedField)
+{
+    var copiedRow = rows.find(function ([uid]) {return uid == copiedField;});
+    if (copiedRow)
+        copiedRow[1] = copiedRow[1] + " (Copied!)";
+}
+result.object(rows);
\ No newline at end of file
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index f5301bfdd0b5e89907e2e6d06ff321acb8bf70a2..f074dfa8dc592f164be35e53187aabf2766c7bdb 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -78,6 +78,24 @@
           <fieldName>AnyContacts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>b3cf7b34-6ea4-411a-8123-34afd7e10cfc</name>
+          <entityName>MailLog_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>578dbb91-ea76-40ec-9dbd-9acf462ceba7</name>
+          <entityName>BulkMailTestRecipient_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>cb874ee2-e147-4311-bdf1-a94df537bb9e</name>
+          <entityName>WeblinkClick_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityProvider>
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
index 2836dcd5bc7ee17da8d0d75e560f05b6117a36ea..f456452e9d7bbb00db08bf0ddc83ee8b955bb20a 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("Workflow_lib");
 import("DataPrivacy_lib");
 import("system.datetime");
@@ -39,7 +40,14 @@ if (valueField)
 }
 db.insertData("AB_ATTRIBUTERELATION", columns, null, values);
 
-if (vars.get("$param.ObjectType_param") == "Person")
+let countDSGVOUsage = parseInt(newSelect("COUNT(*)")
+.from("AB_ATTRIBUTEUSAGE")
+.where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO")
+.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", rowdata["AB_ATTRIBUTE_ID.value"]).cell());
+
+if (vars.get("$param.ObjectType_param") == "Person" && countDSGVOUsage)
+{
     DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$param.ObjectRowId_param"), vars.get("$param.ShowDsgvoMessage_param"));
+}
 
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
index e88af46b5b0766cd413f835d6435b7b19609693c..5dc936c76f55f5fc24ab8c8464e2fe25c57f9ed1 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
@@ -11,27 +11,27 @@ var attributeId = rowdata["AB_ATTRIBUTE_ID.value"]
 var type = AttributeUtil.getAttributeType(attributeId);
 var showEmpty = vars.getString("$param.ShowEmpty_param") == "true";
 var attributeRelationId = showEmpty
-    ? JSON.parse(vars.get("$local.uid"))[0]
-    : vars.get("$local.uid");
+? JSON.parse(vars.get("$local.uid"))[0]
+: vars.get("$local.uid");
 
 if (showEmpty && !rowdata["AB_ATTRIBUTERELATIONID.value"].trim())
 {
     var columns = [
-        "AB_ATTRIBUTERELATIONID",
-        "AB_ATTRIBUTE_ID",
-        "OBJECT_ROWID",
-        "OBJECT_TYPE",
-        "DATE_NEW",
-        "USER_NEW"
+    "AB_ATTRIBUTERELATIONID",
+    "AB_ATTRIBUTE_ID",
+    "OBJECT_ROWID",
+    "OBJECT_TYPE",
+    "DATE_NEW",
+    "USER_NEW"
     ];
     
     var values = [
-        attributeRelationId,
-        attributeId,
-        vars.get("$param.ObjectRowId_param"),
-        vars.get("$param.ObjectType_param"),
-        vars.get("$sys.date"),
-        vars.get("$sys.user")
+    attributeRelationId,
+    attributeId,
+    vars.get("$param.ObjectRowId_param"),
+    vars.get("$param.ObjectType_param"),
+    vars.get("$sys.date"),
+    vars.get("$sys.user")
     ];
     var valueField = AttributeTypeUtil.getDatabaseField(type);
     var value;
@@ -61,15 +61,22 @@ else
     });
     
     var attributeValue = AttributeTypeUtil.useLookup(type) 
-        ? rowdata["VALUE_LOOKUP.value"] 
-        : rowdata["VALUE.value"];
+    ? rowdata["VALUE_LOOKUP.value"] 
+    : rowdata["VALUE.value"];
     fieldValues[AttributeTypeUtil.getDatabaseField(type)] = attributeValue;
     var attributeCondition = newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", attributeRelationId);
     
     attributeCondition.updateFields(fieldValues);
 }
 
-if (vars.get("$param.ObjectType_param") == "Person")
+let countDSGVOUsage = parseInt(newSelect("COUNT(*)")
+    .from("AB_ATTRIBUTEUSAGE")
+    .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO")
+    .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId).cell());
+
+if (vars.get("$param.ObjectType_param") == "Person" && countDSGVOUsage)
+{
     DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$param.ObjectRowId_param"), vars.get("$param.ShowDsgvoMessage_param"));
+}
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
index 7537ce268732fefca76ffe7f04f87d7b4e5d98fa..19cd75197be85fa49cad58cd153a5f9b7eca05f1 100644
--- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod
+++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
@@ -17,6 +17,7 @@
       <name>OBJECT_TYPE</name>
       <title>Module</title>
       <consumer>Context</consumer>
+      <groupable v="true" />
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
       <onValueChangeTypes>
diff --git a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
index 9f76fa5aee84c3a16afea2c3efe3900b03cf64c1..ba69144b21acba47c5eb7ade4dbad30ec0402bed 100644
--- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
@@ -1,232 +1,232 @@
-import("Context_lib");
-import("system.translate");
-import("Util_lib");
-import("JditoFilter_lib");
-import("KeywordRegistry_basic");
-import("Keyword_lib");
-import("system.db");
-import("system.vars");
-import("system.result");
-import("Sql_lib");
-import("Attribute_lib");
-
-var childId = vars.get("$param.ChildId_param");
-var childType = vars.get("$param.ChildType_param");
-
-var objectType = vars.get("$param.ObjectType_param");
-var filteredIds = Utils.parseJSON(vars.get("$param.FilteredAttributeIds_param"));
-var attributeCountObj = Utils.parseJSON(vars.get("$param.AttributeCount_param"));
-var displaySimpleName = Utils.toBoolean(vars.get("$param.DisplaySimpleName_param"));
-
-var themeObjectRowId = vars.get("$param.ThemeObjectRowId_param");
-
-var parentId = vars.get("$param.ParentId_param");
-var includeParentRecord = Utils.toBoolean(vars.get("$param.IncludeParentRecord_param"));
-var onlyFirstLevelChildren = Utils.toBoolean(vars.get("$param.GetOnlyFirstLevelChildren_param"));
-
-var fetchUsages = false;
-var translateName = false;
-
-var condition = newWhere();
-
-if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
-{
-    condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", vars.get("$local.idvalues"), SqlBuilder.IN()); 
-    fetchUsages = true;
-}
-else if (childId) //if a childId is given, it is the lookup for selecting the superordinate attribute
-{
-    condition.and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypeUtil.getGroupTypes(childType), SqlBuilder.IN());
-
-    //filter out the child and all children of the child, because an attribute can't have itself or a subordinate attribute as parent
-    condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", [childId].concat(AttributeUtil.getAllChildren(childId)), SqlBuilder.NOT_IN());
-}
-else if (objectType)  //if there's an objectType, it comes from the AttributeRelation entity (lookup for the attribute selection)
-{
-    translateName = true;
-
-    var attributeIds = AttributeUtil.getPossibleAttributes(objectType, true, filteredIds, attributeCountObj);
-
-    if (Utils.isEmpty(attributeIds))
-        condition.noResult();
-    else
-        condition.and("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeIds, SqlBuilder.IN())
-            .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.THEME(), !themeObjectRowId ? SqlBuilder.NOT_EQUAL() : undefined);
-}
-else if (parentId)
-{
-    if (onlyFirstLevelChildren)
-        condition.and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", parentId);
-    else
-    {
-        condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeUtil.getAllChildren(parentId), SqlBuilder.IN());
-        translateName = true;
-        if(includeParentRecord)
-            condition.or("AB_ATTRIBUTE.AB_ATTRIBUTEID", parentId);
-    }
-}
-else
-{
-    fetchUsages = true;
-}
-
-var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "AB_ATTRIBUTE")    
-    .addSpecialFieldConditionFn("USAGE_FILTER", function (pValue, pOperator)
-        {
-            var cond = newWhere();
-            var subSelect = newSelect("1").from("AB_ATTRIBUTEUSAGE", "attrUse").where("attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID");
-
-            switch (pOperator)
-            {
-                case "EQUAL":
-                case "NOT_EQUAL":
-                    subSelect.and(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue);
-                case "ISNULL":
-                case "ISNOTNULL":
-                    return cond.and(null, subSelect, pOperator == "NOT_EQUAL" || pOperator == "ISNULL" ? SqlBuilder.NOT_EXISTS() : SqlBuilder.EXISTS());
-            }
-            return cond;
-        })
-    .getSqlCondition();
-condition.andIfSet(filterCondition);
-
-var usageLoader = new AttributeUsageLoader();
-if (fetchUsages)
-    usageLoader.fetchUsages(condition);
-
-var attributes = newSelect([
-        "AB_ATTRIBUTEID", 
-        "ATTRIBUTE_PARENT_ID", 
-        "ATTRIBUTE_NAME", 
-        "ATTRIBUTE_ACTIVE", 
-        "DROPDOWNDEFINITION", 
-        "DROPDOWNFILTER", 
-        "VALIDATIONPARAMETERS",
-        "SORTING", 
-        "ATTRIBUTE_TYPE",
-        KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.attributeType(), "ATTRIBUTE_TYPE")
-    ])
-    .from("AB_ATTRIBUTE")
-    .whereIfSet(condition)
-    .orderBy(["ATTRIBUTE_PARENT_ID", "SORTING", "ATTRIBUTE_NAME"])
-    .table();
-
-var nameResolver = new AttributeNameResolver();
-if (attributes.length !== 0)
-    nameResolver.fetchNames(translateName);
-
-var attributesById = new Map();
-attributes.forEach(function ([attributeId, parentId, simpleName, isActive, 
-    dropDownDefinition, dropDownFilter, validationParameters, sorting, type, typeName])
-{
-    attributesById.set(attributeId, [
-        attributeId,
-        simpleName,
-        displaySimpleName ? nameResolver.getSimpleName(attributeId) : nameResolver.getFullName(attributeId),
-        parentId,
-        nameResolver.getFullName(parentId),
-        type,
-        typeName,
-        isActive,
-        sorting,
-        dropDownDefinition,
-        dropDownFilter,
-        validationParameters,
-        type != AttributeTypes.COMBOVALUE() ? usageLoader.getUsageSummary(attributeId) : "",
-        "usageFilter",
-        false
-    ]);
-});
-
-var resultTable = [];
-do {
-    var oldSize = resultTable.length;
-    attributesById.forEach(function (row, id)
-    {   
-        var parentId = row[3];
-        //rows that are already in the result array are removed from the attributesById Map, so if the parentId is in that Map,
-        //the parent has not been added yet
-        if (!parentId || !attributesById.has(parentId))
-        {
-            resultTable.push(row);
-            attributesById["delete"](id);
-        }
-    });
-} while (oldSize != resultTable.length); //stops the loop when no new items were added so that recursive relations between attributes don't cause an infinite loop
-
-result.object(resultTable);
-
-
-function AttributeNameResolver ()
-{
-    this.cache = new Map();
-    this.nameData = new Map();
-    this.fetchNames = function (pTranslateNames)
-    {
-        var allNames = newSelect(["AB_ATTRIBUTEID", "ATTRIBUTE_PARENT_ID", "ATTRIBUTE_NAME"])
-            .from("AB_ATTRIBUTE")
-            .table();
-        allNames.forEach(function ([attributeId, parentId, attributeName])
-        {
-            this.nameData.set(attributeId, {
-                parentId: parentId,
-                name: pTranslateNames ? translate.text(attributeName) : attributeName
-            });
-        }, this);
-    }
-    this.getSimpleName = function (pAttributeId)
-    {
-        if (this.nameData.has(pAttributeId))
-            return this.nameData.get(pAttributeId).name;
-        return "";
-    }
-    this.getFullName = function (pAttributeId)
-    {
-        if (!pAttributeId || !this.nameData.has(pAttributeId)) //if the id is not in this.nameData, it does not exist
-            return "";
-        if (this.cache.has(pAttributeId))
-            return this.cache.get(pAttributeId);
-        
-        var attributeData = this.nameData.get(pAttributeId);
-        var fullName = attributeData.name;
-        if (attributeData.parentId)
-        {
-            var parentName = this.getFullName(attributeData.parentId);
-            if (parentName)
-                fullName = parentName + " / " + fullName;
-        }
-        this.cache.set(pAttributeId, fullName);
-        return fullName;
-    }
-}
-
-function AttributeUsageLoader ()
-{
-    this.usageData = new Map();
-    this.fetchUsages = function (pCondition)
-    {
-        var usages = newSelect(["AB_ATTRIBUTE_ID", "OBJECT_TYPE"])
-            .from("AB_ATTRIBUTEUSAGE")
-            .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
-            .whereIfSet(pCondition)
-            .table();
-        usages.forEach(function ([attributeId, objectType])
-        {
-            if (this.usageData.has(attributeId))
-                this.usageData.get(attributeId).push(objectType);
-            else
-                this.usageData.set(attributeId, [objectType]);
-        }, this);
-    }
-    this.getUsages = function (pAttributeId)
-    {
-        return this.usageData.get(pAttributeId) || [];
-    }
-    this.getUsageSummary = function (pAttributeId)
-    {
-        return this.getUsages(pAttributeId).map(function (usage)
-        {
-            return ContextUtils.getTitle(usage, true);
-        }).join(", ");
-    }
+import("Context_lib");
+import("system.translate");
+import("Util_lib");
+import("JditoFilter_lib");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.db");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+import("Attribute_lib");
+
+var childId = vars.get("$param.ChildId_param");
+var childType = vars.get("$param.ChildType_param");
+
+var objectType = vars.get("$param.ObjectType_param");
+var filteredIds = Utils.parseJSON(vars.get("$param.FilteredAttributeIds_param"));
+var attributeCountObj = Utils.parseJSON(vars.get("$param.AttributeCount_param"));
+var displaySimpleName = Utils.toBoolean(vars.get("$param.DisplaySimpleName_param"));
+
+var themeObjectRowId = vars.get("$param.ThemeObjectRowId_param");
+
+var parentId = vars.get("$param.ParentId_param");
+var includeParentRecord = Utils.toBoolean(vars.get("$param.IncludeParentRecord_param"));
+var onlyFirstLevelChildren = Utils.toBoolean(vars.get("$param.GetOnlyFirstLevelChildren_param"));
+
+var fetchUsages = false;
+var translateName = false;
+
+var condition = newWhere();
+
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+{
+    condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", vars.get("$local.idvalues"), SqlBuilder.IN()); 
+    fetchUsages = true;
+}
+else if (childId) //if a childId is given, it is the lookup for selecting the superordinate attribute
+{
+    condition.and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypeUtil.getGroupTypes(childType), SqlBuilder.IN());
+
+    //filter out the child and all children of the child, because an attribute can't have itself or a subordinate attribute as parent
+    condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", [childId].concat(AttributeUtil.getAllChildren(childId)), SqlBuilder.NOT_IN());
+}
+else if (objectType)  //if there's an objectType, it comes from the AttributeRelation entity (lookup for the attribute selection)
+{
+    translateName = true;
+
+    var attributeIds = AttributeUtil.getPossibleAttributes(objectType, true, filteredIds, attributeCountObj);
+
+    if (Utils.isEmpty(attributeIds))
+        condition.noResult();
+    else
+        condition.and("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeIds, SqlBuilder.IN())
+            .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.THEME(), !themeObjectRowId ? SqlBuilder.NOT_EQUAL() : undefined);
+}
+else if (parentId)
+{
+    if (onlyFirstLevelChildren)
+        condition.and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", parentId);
+    else
+    {
+        condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeUtil.getAllChildren(parentId), SqlBuilder.IN());
+        translateName = true;
+        if(includeParentRecord)
+            condition.or("AB_ATTRIBUTE.AB_ATTRIBUTEID", parentId);
+    }
+}
+else
+{
+    fetchUsages = true;
+}
+
+var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "AB_ATTRIBUTE")    
+    .addSpecialFieldConditionFn("USAGE_FILTER", function (pValue, pOperator)
+        {
+            var cond = newWhere();
+            var subSelect = newSelect("1").from("AB_ATTRIBUTEUSAGE", "attrUse").where("attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID");
+
+            switch (pOperator)
+            {
+                case "EQUAL":
+                case "NOT_EQUAL":
+                    subSelect.and(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue);
+                case "ISNULL":
+                case "ISNOTNULL":
+                    return cond.and(null, subSelect, pOperator == "NOT_EQUAL" || pOperator == "ISNULL" ? SqlBuilder.NOT_EXISTS() : SqlBuilder.EXISTS());
+            }
+            return cond;
+        })
+    .getSqlCondition();
+condition.andIfSet(filterCondition);
+
+var usageLoader = new AttributeUsageLoader();
+if (fetchUsages)
+    usageLoader.fetchUsages(condition);
+
+var attributes = newSelect([
+        "AB_ATTRIBUTEID", 
+        "ATTRIBUTE_PARENT_ID", 
+        "ATTRIBUTE_NAME", 
+        "ATTRIBUTE_ACTIVE", 
+        "DROPDOWNDEFINITION", 
+        "DROPDOWNFILTER", 
+        "VALIDATIONPARAMETERS",
+        "SORTING", 
+        "ATTRIBUTE_TYPE",
+        KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.attributeType(), "ATTRIBUTE_TYPE")
+    ])
+    .from("AB_ATTRIBUTE")
+    .whereIfSet(condition)
+    .orderBy(["ATTRIBUTE_PARENT_ID", "SORTING", "ATTRIBUTE_NAME"])
+    .table();
+
+var nameResolver = new AttributeNameResolver();
+if (attributes.length !== 0)
+    nameResolver.fetchNames(translateName);
+
+var attributesById = new Map();
+attributes.forEach(function ([attributeId, parentId, simpleName, isActive, 
+    dropDownDefinition, dropDownFilter, validationParameters, sorting, type, typeName])
+{
+    attributesById.set(attributeId, [
+        attributeId,
+        simpleName,
+        displaySimpleName ? nameResolver.getSimpleName(attributeId) : nameResolver.getFullName(attributeId),
+        parentId,
+        nameResolver.getFullName(parentId),
+        type,
+        typeName,
+        isActive,
+        sorting,
+        dropDownDefinition,
+        dropDownFilter,
+        validationParameters,
+        type != AttributeTypes.COMBOVALUE() ? usageLoader.getUsageSummary(attributeId) : "",
+        "usageFilter",
+        false
+    ]);
+});
+
+var resultTable = [];
+do {
+    var oldSize = resultTable.length;
+    attributesById.forEach(function (row, id)
+    {   
+        var parentId = row[3];
+        //rows that are already in the result array are removed from the attributesById Map, so if the parentId is in that Map,
+        //the parent has not been added yet
+        if (!parentId || !attributesById.has(parentId))
+        {
+            resultTable.push(row);
+            attributesById["delete"](id);
+        }
+    });
+} while (oldSize != resultTable.length); //stops the loop when no new items were added so that recursive relations between attributes don't cause an infinite loop
+
+result.object(resultTable);
+
+
+function AttributeNameResolver ()
+{
+    this.cache = new Map();
+    this.nameData = new Map();
+    this.fetchNames = function (pTranslateNames)
+    {
+        var allNames = newSelect(["AB_ATTRIBUTEID", "ATTRIBUTE_PARENT_ID", "ATTRIBUTE_NAME"])
+            .from("AB_ATTRIBUTE")
+            .table();
+        allNames.forEach(function ([attributeId, parentId, attributeName])
+        {
+            this.nameData.set(attributeId, {
+                parentId: parentId,
+                name: pTranslateNames ? translate.text(attributeName) : attributeName
+            });
+        }, this);
+    }
+    this.getSimpleName = function (pAttributeId)
+    {
+        if (this.nameData.has(pAttributeId))
+            return this.nameData.get(pAttributeId).name;
+        return "";
+    }
+    this.getFullName = function (pAttributeId)
+    {
+        if (!pAttributeId || !this.nameData.has(pAttributeId)) //if the id is not in this.nameData, it does not exist
+            return "";
+        if (this.cache.has(pAttributeId))
+            return this.cache.get(pAttributeId);
+        
+        var attributeData = this.nameData.get(pAttributeId);
+        var fullName = attributeData.name;
+        if (attributeData.parentId)
+        {
+            var parentName = this.getFullName(attributeData.parentId);
+            if (parentName)
+                fullName = parentName + " / " + fullName;
+        }
+        this.cache.set(pAttributeId, fullName);
+        return fullName;
+    }
+}
+
+function AttributeUsageLoader ()
+{
+    this.usageData = new Map();
+    this.fetchUsages = function (pCondition)
+    {
+        var usages = newSelect(["AB_ATTRIBUTE_ID", "OBJECT_TYPE"])
+            .from("AB_ATTRIBUTEUSAGE")
+            .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
+            .whereIfSet(pCondition)
+            .table();
+        usages.forEach(function ([attributeId, objectType])
+        {
+            if (this.usageData.has(attributeId))
+                this.usageData.get(attributeId).push(objectType);
+            else
+                this.usageData.set(attributeId, [objectType]);
+        }, this);
+    }
+    this.getUsages = function (pAttributeId)
+    {
+        return this.usageData.get(pAttributeId) || [];
+    }
+    this.getUsageSummary = function (pAttributeId)
+    {
+        return this.getUsages(pAttributeId).map(function (usage)
+        {
+            return ContextUtils.getTitle(usage, true);
+        }).join(", ");
+    }
 }
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
index 1d001090085c21d4535df8e8b11fbd770655ad08..337022169fdce959d28689ea9863bfbed69bc841 100644
--- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
+++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
@@ -82,7 +82,6 @@
     <entityField>
       <name>EMAIL_ADDRESS</name>
       <title>Email</title>
-      <consumer>EmailAdresses</consumer>
       <textInputAllowed v="true" />
       <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/displayValueProcess.js</displayValueProcess>
@@ -108,7 +107,7 @@
       <state>READONLY</state>
     </entityField>
     <entityField>
-      <name>HASCOMMRESTRICTION</name>
+      <name>HASCOMMUNICATIONREJECTION</name>
       <title>Advertising ban</title>
     </entityField>
     <entityActionGroup>
@@ -152,6 +151,60 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>IS_TEST_RECIPIENT</name>
+      <title>Test</title>
+      <contentType>BOOLEAN</contentType>
+      <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionGroup>
+      <name>testRunActions</name>
+      <title>Test Run Actions</title>
+      <children>
+        <entityActionField>
+          <name>setTestRecipient</name>
+          <title>Use for test run</title>
+          <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+        </entityActionField>
+        <entityActionField>
+          <name>removeTestRecipient</name>
+          <title>Don't use for test run</title>
+          <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityParameter>
+      <name>ExcludeCommunicationRejecting_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ExcludedStatus_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>RecipientsToBeMailed</name>
+      <children>
+        <entityParameter>
+          <name>ExcludedStatus_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ExcludeCommunicationRejecting_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityParameter>
+      <name>IsTestMail_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ExcludeBlacklisted_param</name>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -208,13 +261,10 @@
           <name>CONTACT_ID.displayValue</name>
           <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>HASCOMMRESTRICTION.value</name>
-          <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>EMAIL_ADDRESS.value</name>
           <recordfield>BULKMAILRECIPIENT.EMAIL_ADDRESS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PROBLEM.value</name>
@@ -224,6 +274,14 @@
           <name>PROBLEM.displayValue</name>
           <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>IS_TEST_RECIPIENT.value</name>
+          <recordfield>BULKMAILRECIPIENT.IS_TEST_RECIPIENT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>HASCOMMUNICATIONREJECTION.value</name>
+          <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
@@ -255,6 +313,16 @@
           <readonly v="true" />
         </linkInformation>
       </linkInformation>
+      <filterExtensions>
+        <filterExtension>
+          <name>Blacklist_filter</name>
+          <title>Blacklist</title>
+          <contentType>BOOLEAN</contentType>
+          <filterValuesProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
+      </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js
index f4a5d6a797f85b33b0d1d819d44e0015a28d24c9..32b81b7db33e5508f206cc74db74609c9adae950 100644
--- a/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js
+++ b/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js
@@ -2,5 +2,5 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if (vars.get("$field.HASCOMMRESTRICTION") == "true" || !vars.get("$field.EMAIL_ADDRESS"))
+if (vars.get("$field.HASCOMMUNICATIONREJECTION") == "true" || !vars.get("$field.EMAIL_ADDRESS"))
     result.string(neon.PRIORITY_HIGH_COLOR);
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js
index c67e7c5712da325df0f23f47eee957ce28a3ed54..9c601f430b9bc4dec127fcc3e36e2cd6b9be2cf9 100644
--- a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js
+++ b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js
@@ -1,10 +1,12 @@
+import("Util_lib");
 import("system.vars");
 import("system.result");
 import("Contact_lib");
 
 var type = ContactUtils.getContactTypeByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID"));
+var hasCommunicationRejection = Utils.toBoolean(vars.get("$field.HASCOMMUNICATIONREJECTION"));
 var icon;
-if (vars.get("$field.HASCOMMRESTRICTION") == "true")
+if (hasCommunicationRejection)
     icon = "VAADIN:BAN";
 else if (type == 1)
     icon = "VAADIN:BUILDING";
diff --git a/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a435bfbd638098da63046add8f824e4b77e4bc51
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(0);
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae0c566f408d9f9a4bd2181699b7fadeab9a02a4
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js
@@ -0,0 +1,6 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string(JSON.stringify([
+    $KeywordRegistry.bulkMailRecipientStatus$sent()
+]));
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b19f093933f83c39b3bca1779f28b1a9240aacd3
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js
@@ -0,0 +1,9 @@
+import("Sql_lib");
+import("system.vars");
+import("system.neon");
+
+newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN())
+        .updateData(true, "BULKMAILRECIPIENT", ["IS_TEST_RECIPIENT"], null, [0]);
+        
+neon.refreshAll();
+    
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..69f831c2f7a1a5dfca2708c9fbee266e552f6773
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js
@@ -0,0 +1,9 @@
+import("Sql_lib");
+import("system.vars");
+import("system.neon");
+
+newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN())
+        .updateData(true, "BULKMAILRECIPIENT", ["IS_TEST_RECIPIENT"], null, [1]);
+        
+neon.refreshAll();
+    
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
index 01d4a5dc9c76ee5f350521eea0f4a2bb6016a3ec..da5905dd40d05e6350fa2decc5da91f870a689f7 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
@@ -1,5 +1,39 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("Util_lib");
 import("system.db");
 import("system.result");
 import("Sql_lib");
+import("MarketingCondition_lib");
 
-result.string(newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param").toString());
\ No newline at end of file
+var excludeWithCommunicationRejection = Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param"));
+var excludeBlacklisted = Utils.toBoolean(vars.get("$param.ExcludeBlacklisted_param"));
+var excludedStatus = Utils.parseJSON(vars.get("$param.ExcludedStatus_param"));
+var isTestMail = Utils.toBoolean(vars.get("$param.IsTestMail_param"));
+
+var condition = newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param");
+if (isTestMail)
+{
+    condition.and("BULKMAILRECIPIENT.IS_TEST_RECIPIENT", 1);
+}
+else
+{
+    if (excludeWithCommunicationRejection)
+    {
+        condition.and(new CommunicationSettingsCondition()
+            .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS")
+            .rejected()
+            .existNoSettings()
+            .getCondition());
+    }
+    if (excludeBlacklisted)
+    {
+        condition.and("not (" + CommunicationBlacklist.getMailRecipientBlacklist().buildCondition() + ")");
+    }
+    if (!Utils.isNullOrEmpty(excludedStatus))
+    {
+        condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN());
+    }
+}
+
+result.string(condition.toString());
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..35124c1297165b4c16601cd12bce262eb098d07e
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js
@@ -0,0 +1,31 @@
+import("Sql_lib");
+import("system.result");
+import("Util_lib");
+import("system.vars");
+import("MarketingCondition_lib");
+
+var operator = vars.get("$local.operator2").trim();
+var fetchBlacklisted = Utils.toBoolean(vars.get("$local.rawvalue"));
+var condition = newWhere();
+
+if (operator == "<>")
+{
+    fetchBlacklisted = !fetchBlacklisted;
+    operator = "=";
+}
+if (operator == "=")
+{
+    var blacklistCondition = CommunicationBlacklist.getMailRecipientBlacklist().getCondition();
+    if (fetchBlacklisted && blacklistCondition.hasCondition())
+        condition.and(blacklistCondition);
+    else if (fetchBlacklisted)
+        condition.noResult();
+    else if (blacklistCondition.hasCondition())
+        condition.and(null, blacklistCondition, SqlBuilder.NOT());
+}
+else
+{
+    condition.noResult();
+}
+
+result.string(condition.toString("1=1"));
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..25006aba8d3e6134f97bc10454a6d1888c2fa986
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js
@@ -0,0 +1,8 @@
+import("system.translate");
+import("system.result");
+import("system.translate");
+
+result.object([
+    ["true", translate.text("Yes")], 
+    ["false", translate.text("No")]
+]);
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
deleted file mode 100644
index 04cd6d4dc91c5a7e36cd82b78301acf456fc05ff..0000000000000000000000000000000000000000
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("Sql_lib");
-import("KeywordRegistry_basic");
-import("Contact_lib");
-import("system.db");
-import("system.result");
-
-var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail());
-var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString("true").elseString("false");
-result.string(sql.toString());
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..7517b5a5ded16c4697dab1ccd9826f5e77b9a42c
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js
@@ -0,0 +1,26 @@
+import("system.vars");
+import("Util_lib");
+import("MarketingCondition_lib");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+import("Contact_lib");
+import("system.db");
+import("system.result");
+
+var sql;
+//if recipients with communication restriction are excluded by the where-condition, this can never be true
+if (Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param")))
+{
+    sql = "'false'";
+}
+else
+{
+    var communicationSettingsCondition = new CommunicationSettingsCondition()
+        .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS")
+        .rejected()
+        .existSettings()
+        .buildCondition();
+    sql = SqlBuilder.caseWhen(communicationSettingsCondition).thenString("true").elseString("false").toString();
+}
+
+result.string(sql);
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
index 49b6fefd59233f6aa50934a21ce43f06a3a61172..2b9b21b9b789c2d7823fc09837e0bac6469a8c68 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -1,12 +1,30 @@
+import("system.vars");
+import("Util_lib");
 import("Sql_lib");
 import("Contact_lib");
 import("system.translate");
 import("system.result");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
+import("MarketingCondition_lib");
 
-var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail());
 var keywordSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "BULKMAILRECIPIENT.STATUS");
+var sql;
+if (!Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param")))
+{
+    var communicationSettingsCondition = new CommunicationSettingsCondition()
+        .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS")
+        .rejected()
+        .existSettings()
+        .buildCondition();
 
-var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString(translate.text("Advertising ban")).elseValue(keywordSql);
+    sql = SqlBuilder.caseWhen(communicationSettingsCondition)
+        .thenString(translate.text("Advertising ban"))
+        .elseValue(keywordSql);
+}
+else
+{
+    sql = keywordSql;
+}
+    
 result.string(sql.toString());
diff --git a/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8181a5415a373706ce729488e80b5629e3b604e7
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>BulkMailTestRecipient_entity</name>
+  <title>Test Recipient</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <titlePlural>Test Recipients</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>BulkMailId_param</name>
+      <expose v="true" />
+      <mandatory v="false" />
+    </entityParameter>
+    <entityField>
+      <name>BULKMAILTESTRECIPIENTID</name>
+    </entityField>
+    <entityField>
+      <name>BULKMAIL_ID</name>
+      <valueProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>EMAIL_ADDRESS</name>
+      <title>Email</title>
+      <valueProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Contact</title>
+      <consumer>Contacts</consumer>
+      <linkedContextProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
+    </entityField>
+    <entityProvider>
+      <name>BulkMailTestRecipients</name>
+      <dependencies>
+        <entityDependency>
+          <name>bf4102ef-e33c-4bdc-b62d-844f466f8617</name>
+          <entityName>BulkMail_entity</entityName>
+          <fieldName>BulkMailTestRecipients</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityConsumer>
+      <name>Contacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>PERSON_ID</name>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ID</name>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <fromClauseProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>BULKMAIL_ID.value</name>
+          <recordfield>BULKMAILTESTRECIPIENT.BULKMAIL_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>BULKMAILTESTRECIPIENTID.value</name>
+          <recordfield>BULKMAILTESTRECIPIENT.BULKMAILTESTRECIPIENTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>BULKMAILTESTRECIPIENT.CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>EMAIL_ADDRESS.value</name>
+          <recordfield>BULKMAILTESTRECIPIENT.EMAIL_ADDRESS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ID.value</name>
+          <recordfield>CONTACT.PERSON_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_ID.value</name>
+          <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>e9b90ccc-0edd-4968-b6bf-966f8e0d5bc2</name>
+          <tableName>BULKMAILTESTRECIPIENT</tableName>
+          <primaryKey>BULKMAILTESTRECIPIENTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>566ef9cf-6427-4f60-aa04-e514517c3324</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cea362d78f9084fe85f7764b09d0a1fde3065017
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    if (vars.exists("$param.BulkMailId_param") && vars.get("$param.BulkMailId_param"))
+        result.string(vars.getString("$param.BulkMailId_param"));    
+}
+
diff --git a/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e48676daf3e661032b7d9aaf896c5bfbdd51e2d
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+result.string(ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID")));
\ No newline at end of file
diff --git a/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c55cc06cb71e30c5ffe76fbcf38ddc6e92e68a8e
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Communication_lib");
+
+if (vars.get("$field.CONTACT_ID") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(CommUtil.getStandardMail(vars.get("$field.CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..52cfaea96c15eb2e4ff0c0dcb5281874098355d2
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,5 @@
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+result.string(newWhere("BULKMAILTESTRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param").toString());
\ No newline at end of file
diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b281df21b69e52ecbfe7fe636d423d55887e1634
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+
+result.string("BULKMAILTESTRECIPIENT join CONTACT on BULKMAILTESTRECIPIENT.CONTACT_ID = CONTACT.CONTACTID \
+    left join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID \
+    left join ORGANISATION on CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID");
\ No newline at end of file
diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..35781ff56c5ad7469f74111e5dd20b738a87ec18
--- /dev/null
+++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Contact_lib");
+import("system.result");
+
+result.string(ContactUtils.getResolvingDisplaySubSql("BULKMAILTESTRECIPIENT.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index 3b728ee07f40467fe2f9f1caddd74ca12e531a4f..ea3b4e898599c3ed856f256d7d9d629d78b7bafc 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -55,6 +55,7 @@
     </entityField>
     <entityConsumer>
       <name>Recipients</name>
+      <selectionMode>MULTI</selectionMode>
       <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
@@ -323,6 +324,78 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityField>
+      <name>DATE_TO_SEND</name>
+      <title>Send Date</title>
+      <contentType>DATE</contentType>
+      <resolution>MINUTE</resolution>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js</onValidation>
+    </entityField>
+    <entityConsumer>
+      <name>MailLogs</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MailLog_entity</entityName>
+        <fieldName>MailLogs</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>BulkMailTestRecipients</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>BulkMailTestRecipient_entity</entityName>
+        <fieldName>BulkMailTestRecipients</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>BulkMailId_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Clicks</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WeblinkClick_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>INTEREST_ID</name>
+      <title>Interest</title>
+      <consumer>Interests</consumer>
+      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Interests</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Interest_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -362,7 +435,7 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>SENDER.value</name>
-          <recordfield>BULKMAIL.SENDER</recordfield>
+          <recordfield>BULKMAIL.SENDER_EMAIL_ADDRESS</recordfield>
           <isFilterable v="true" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
@@ -400,6 +473,14 @@
           <name>USE_TEMPLATE_ATTACHMENTS.value</name>
           <recordfield>BULKMAIL.USE_TEMPLATE_ATTACHMENTS</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_TO_SEND.value</name>
+          <recordfield>BULKMAIL.DATE_TO_SEND</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTEREST_ID.value</name>
+          <recordfield>BULKMAIL.INTEREST_ID</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a12b8389ba83e397d6b9ae10eb59989a25590fe
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.BULKMAILID"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8aa64f3404b7d77bd5dfade6cc48235558f0d988
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.result");
+result.string(vars.get("$field.BULKMAILID"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js b/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..008915f61deac19ccdd40fff81701de63eb3b6a2
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js b/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..a14234910f2dd2ff5ffdb94f34a939b6268f0379
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if (vars.get("$field.STATUS") == $KeywordRegistry.bulkMailStatus$planned() && vars.get("$sys.date") > vars.get("local.value"))
+    result.string("Send date already passed.");
+else result.string("");
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..12d91284a8492b11f3f657f03775a4240f5306a9
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js
@@ -0,0 +1,18 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.neon");
+
+var status = vars.get("$field.STATUS");
+var fieldState = neon.COMPONENTSTATE_INVISIBLE;
+
+if (status == $KeywordRegistry.bulkMailStatus$planned())
+{
+    fieldState = neon.COMPONENTSTATE_EDITABLE;
+}
+else if (status == $KeywordRegistry.bulkMailStatus$missed())
+{
+    fieldState = neon.COMPONENTSTATE_READONLY;
+}
+
+result.string(fieldState);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2c5bbf9152d5d220ccba334f4f7b8d2bb15e8f1
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.loadContentTitle("Interest_entity", vars.get("$field.INTEREST_ID")));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8aa64f3404b7d77bd5dfade6cc48235558f0d988
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.result");
+result.string(vars.get("$field.BULKMAILID"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js b/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..008915f61deac19ccdd40fff81701de63eb3b6a2
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js
index 3845e374537d50e6e9ab706741a4a672d7208d04..a77b2d89d480dd2f0018295bfd128955abe390b4 100644
--- a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js
+++ b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js
@@ -1,17 +1,7 @@
-import("system.neon");
-import("system.db");
-import("Employee_lib");
 import("system.vars");
 import("Bulkmail_lib");
 
-var testingContact = vars.get("$field.TESTING_CONTACT_ID");
-var testingEmail = vars.get("$field.TESTING_EMAIL_ADDRESS");
 
-if (testingContact && testingEmail)
-    BulkMailUtils.sendBulkMailOnServer(vars.get("$field.BULKMAILID"), [[testingContact, testingEmail]]);
-else
-    neon.openContext("BulkMailTesting", "BulkMailTesting_view", null, neon.OPERATINGSTATE_VIEW, {
-        "BulkMailId_param" : vars.get("$field.BULKMAILID")
-    });
+BulkMailUtils.sendBulkMailOnServer(vars.get("$field.BULKMAILID"), true);
 
 
diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
index 8f088d36615ee56043631b62277a508976268c50..76ea4711ebda2c2dfbaa5585ed538ad0583f06d3 100644
--- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
+++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
@@ -19,6 +19,7 @@
       <consumer>CampaignConsumer</consumer>
       <mandatory v="true" />
       <state>EDITABLE</state>
+      <stateProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValueChange.js</onValueChange>
@@ -38,6 +39,7 @@
       <state>EDITABLE</state>
       <displayValueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js</onValueChange>
+      <onValidation>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js</onValidation>
     </entityField>
     <entityField>
       <name>campaignParticipantMessage</name>
diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
index b299466750aeaa2162df03031f3dc9098cdf5967..ceeb7e8662d98a71b9a214fd5cd0fbb100c5c8c3 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("Util_lib");
 import("system.neon");
 import("Sql_lib");
 import("system.vars");
@@ -7,67 +9,32 @@ import("Campaign_lib");
 
 var cols = [];
 
-var participantCondition = "";
-var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param"));
-var conditionSourceTableName = vars.getString("$param.dataSourceTableName_param");
 
-var isUpdate = vars.get("$field.isUpdate");
+
+var contactIds = JSON.parse(vars.get("$field.campaignparticipantContactIds"));
+var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param"));
+
 var campaignId = vars.getString("$field.CAMPAIGN_ID");
 var newCampaignStepId = vars.getString("$field.CAMPAIGNSTEP_ID");
 
 var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames();
 
-if(participantRowIds != null && participantRowIds.length > 0)
-{
-    var contactIdsToHandle = participantRowIds;
-    
-    if(isUpdate == "false")
-        contactIdsToHandle = JSON.parse(vars.get("$field.campaignparticipantContactIds"));
-    
-    _handleRowIds(contactIdsToHandle, campaignId);
-}
-else
+if(contactIds != null && contactIds.length > 0)
 {
-    participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition;
-    _handleCondition(campaignId, conditionSourceTableName, participantCondition);
+    _handleRowIds(contactIds, campaignId);
 }
+
 neon.refreshAll();
 if (!vars.exists("$param.currentCampaignId_param") || !vars.get("$param.currentCampaignId_param"))
     neon.openContext("Campaign", "CampaignMain_view", [campaignId], neon.OPERATINGSTATE_VIEW, null);
 
-function _handleCondition(pCampaignId, pTargetTableName, pCondition)
-{
-    var contactIdsToHandle = [];
-    var contextComingFrom = "Person";
-    
-    if(pTargetTableName == "ORGANISATION")
-    {
-        pCondition += "  and PERSON.PERSONID is NULL";
-        contextComingFrom = "Organisation";
-    }
-        
-    /*
-     * If it's an update of participants, get the participants defined by the condition in the selected campaign
-     * Because they already are participants, no restrictions apply to the affected IDs.
-     * 
-     * Otherwise the participants ought to be inserted. The only restriction right now is, hat the participants to be inserted
-     * can't already be in this specific campaign. Therefore all IDs hat are defined by the condition and not in the campaign are selected.
-     */
-    if(isUpdate == "true")
-    {
-        contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition);
-    }
-    else
-        contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, contextComingFrom);
-    
-    _handleRowIds(contactIdsToHandle, pCampaignId);
-}
+
 
 function _handleRowIds(pParticipantRowIds, pCampaignId)
 {
     var oldStepIds = {};
     
-    if(isUpdate == "true")
+    if(isUpdate)
     {
         cols = [
             "CAMPAIGNSTEP_ID",
@@ -75,7 +42,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId)
             "DATE_EDIT"
         ];
     
-        var oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID")
+        var oldSteps = newSelect("CONTACT_ID, CAMPAIGNSTEP_ID")
                             .from("CAMPAIGNPARTICIPANT")
                             .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN())
                             .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
@@ -105,9 +72,10 @@ function _handleRowIds(pParticipantRowIds, pCampaignId)
     {
         var campaignParticipantLogId = util.getNewUUID();
         var valsCampaignParticipantLog;
-        if(isUpdate == "true")
+        if(isUpdate)
         {
             var oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || "";
+
             
             var updatedValues = [
                 newCampaignStepId,
@@ -116,8 +84,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId)
             ];
 
             var condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant])
-                                .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
-                                .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds[participant]);
+                                .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId);
                                  
             valsCampaignParticipantLog = [
                 campaignParticipantLogId,
@@ -159,8 +126,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId)
             logArray.push(["CAMPAIGNPARTICIPANTLOG", colNamesCampaignParticipantLog, null, valsCampaignParticipantLog]);
         }
     }
-    
-    if(isUpdate == "true")
+    if(isUpdate)
     {
         db.updates(statementArray)
     }
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js
index c596003e424ef1b3ec890598ce9a8ecadedc4ec4..f4f7ad8fa87f0ce1c5983c6913e0c14fc7d4f3ff 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js
@@ -1,24 +1,17 @@
+import("Util_lib");
 import("system.vars");
 import("system.result");
 import("Sql_lib");
 import("system.translate");
 
+var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
+var maxCount = vars.get("$field.campaignStepMaxParticipantCount");
+var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param"));
 
-if (vars.get("$param.campaignParticipantsRowIds_param") != null && vars.get("$param.campaignParticipantsRowIds_param") != "")
-{
-    let participants = JSON.parse(vars.get("$param.campaignParticipantsRowIds_param"));
+if (vars.get("$field.CAMPAIGN_ID")){
 
-    if(participants.length > 0)
-    {
-        let thisParticipantCount = newSelect("COUNT(*)")
-                                        .from("CAMPAIGNPARTICIPANT")
-                                        .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$field.CAMPAIGN_ID"))
-                                        .and("CAMPAIGNPARTICIPANT.CONTACT_ID", participants, SqlBuilder.IN())
-                                        .cell();
-
-        if(parseInt(thisParticipantCount) > 0)
-        {
-            result.string(translate.text("Participant is already participating"));
-        }
+    
+    if (validCount == 0 && !isUpdate){
+        result.string(translate.text("All of the chosen records are already in the campaign"));
     }
 }
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..31931105f9e8011ac8e49b1ec3e9443c6ec2095b
--- /dev/null
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+
+if(vars.exists("$param.currentCampaignId_param") && vars.get("$param.currentCampaignId_param"))
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
+else result.string(neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
index d1c7824536e06bed2ffb8d47a1b93cc8f1260253..6511d5abbe134859e02af1b780da968a76fdd7ba 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
@@ -1,3 +1,4 @@
+import("Util_lib");
 import("system.eMath");
 import("system.result");
 import("system.vars");
@@ -6,10 +7,10 @@ import("FilterViewAction_lib");
 import("Campaign_lib");
 
 
-if(vars.get("$field.CAMPAIGN_ID"))
+if(vars.get("$field.CAMPAIGN_ID") && vars.get("$field.CAMPAIGNSTEP_ID"))
 {
     var contactIds, filteredContactIds;
-    var isUpdate = vars.getString("$param.isUpdate_param");
+    var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param"));
     var comingfrom = vars.getString("$param.dataSourceTableName_param");
     var selection = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param"));
     
@@ -28,17 +29,18 @@ if(vars.get("$field.CAMPAIGN_ID"))
     {
         if (vars.get("$param.campaignParticipantsCondition_param"))
         {
+            
             var contactFilterCondition = JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition;
-            contactIds = CampaignUtils.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition);
+            contactIds = CampaignUtils.GetContactIdsNotInCampaignStepByCondition(vars.get("$field.CAMPAIGNSTEP_ID"),vars.get("$field.CAMPAIGN_ID"), contactFilterCondition);
         } 
         else
         {
-            contactIds = selection;
+            contactIds = CampaignUtils.GetContactIdsNotInCampaignStepByRowIds(vars.get("$field.CAMPAIGNSTEP_ID"), selection);
         }
     }
     else 
     {
-        contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), JSON.parse(selection));
+        contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), selection);
     }
     
     result.string(JSON.stringify(contactIds));
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..29f8f42cc56cd1e466728103419fe1cc5a893226
--- /dev/null
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js
@@ -0,0 +1,21 @@
+import("Campaign_lib");
+import("Util_lib");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+import("system.translate");
+
+var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
+var maxCount = vars.get("$field.campaignStepMaxParticipantCount");
+
+var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param"));
+
+if (vars.get("$field.CAMPAIGN_ID")){
+    var currentCount = CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"),vars.get("$field.CAMPAIGN_ID"));
+    if ( (validCount+currentCount) > maxCount)
+        result.string(translate.text("Not enough room in campaignstep"));
+    
+    if (validCount == 0 && isUpdate){
+        result.string(translate.text("All of the chosen records are already in the campaignstep"));
+    }
+}
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index ab1ebaa775b6f01cf20840381913eae2b48065d8..a7d5b31ea8b7b7d5f57bfe49ba6b3aafdef8a982 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -195,6 +195,12 @@
           <fieldName>CampaignConsumer</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>3cc06d94-0274-49be-8d1b-7a5f2a3a689e</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Campaigns</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityConsumer>
diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod
index d883abe34f2f787be5becd750d6a0116cb12cbee..33a0522dbead26e0b28e023d1dab41f40ae0633c 100644
--- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod
+++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod
@@ -5,7 +5,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <icon>NEON:MQL</icon>
   <imageProcess>%aditoprj%/entity/ChecklistEntryValue_entity/imageProcess.js</imageProcess>
-  <recordContainer>jdito</recordContainer>
+  <recordContainer>jDito</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
@@ -14,9 +14,6 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
-    <entityField>
-      <name>CHECKLISTENTRYVALUEID</name>
-    </entityField>
     <entityField>
       <name>CHECKLISTENTRY_ID</name>
       <title>Checklist entry</title>
@@ -48,6 +45,7 @@
     <entityParameter>
       <name>ObjectRowId_param</name>
       <expose v="true" />
+      <mandatory v="true" />
     </entityParameter>
     <entityParameter>
       <name>ObjectType_param</name>
@@ -60,7 +58,6 @@
     <entityProvider>
       <name>ChecklistEntryValues</name>
       <titlePlural>Checklist entries</titlePlural>
-      <recordContainer>jdito</recordContainer>
       <dependencies>
         <entityDependency>
           <name>7eae9b1e-cea7-4688-898a-754dba82eac7</name>
@@ -76,13 +73,6 @@
         </entityDependency>
       </dependencies>
     </entityProvider>
-    <entityParameter>
-      <name>Verifier_param</name>
-      <valueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js</valueProcess>
-    </entityParameter>
-    <entityParameter>
-      <name>VerifierFnName_param</name>
-    </entityParameter>
     <entityField>
       <name>UID</name>
     </entityField>
@@ -104,33 +94,26 @@
     <entityField>
       <name>AUTO</name>
       <title>Automatically</title>
+      <contentType>BOOLEAN</contentType>
     </entityField>
-    <entityParameter>
-      <name>ChecklistEntryValueId_param</name>
-      <expose v="true" />
-    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
-      <name>jdito</name>
+      <name>jDito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
       <contentProcess>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
-      <onUpdate>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
       <recordFieldMappings>
         <jDitoRecordFieldMapping>
           <name>UID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>CHECKLISTENTRY_ID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CHECKLISTENTRYVALUEID.value</name>
+          <name>AUTO.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>DATE_EDIT.value</name>
+          <name>CHECKLISTENTRY_ID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>DATE_NEW.value</name>
+          <name>CHECKLISTENTRY_ID.displayValue</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>IS_FULFILLED.value</name>
@@ -142,19 +125,16 @@
           <name>OBJECT_TYPE.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>USER_EDIT.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>USER_NEW.value</name>
+          <name>DATE_EDIT.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>CHECKLISTENTRY_ID.displayValue</name>
+          <name>DATE_NEW.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>AUTO.value</name>
+          <name>USER_EDIT.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>AUTO.displayValue</name>
+          <name>USER_NEW.value</name>
         </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js
index 86551188b3435613792827d85700777731b72092..ccff131335c861fe9e09bb9f170e0485cf631dcb 100644
--- a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js
+++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js
@@ -1,7 +1,29 @@
+import("Util_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.neon");
-import("Sql_lib");
 
-newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID")
-    .updateFields({"IS_FULFILLED": parseInt(vars.get("$field.IS_FULFILLED")) > 0 ? 0 : 1});
-neon.refresh();
\ No newline at end of file
+var fulfilledValue = Utils.toBoolean(vars.get("$field.IS_FULFILLED")) ? "0" : "1";
+var cond = newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", vars.get("$field.UID")).toString();
+
+if(Utils.toBoolean(newSelect("count(*)").from("CHECKLISTENTRYVALUE").where(cond).cell()))
+{
+    newWhere(cond).updateFields({
+        IS_FULFILLED: fulfilledValue
+    }, "CHECKLISTENTRYVALUE");
+}
+else
+{
+    new SqlBuilder().insertFields({
+        CHECKLISTENTRYVALUEID: vars.get("$field.UID"),
+        CHECKLISTENTRY_ID: vars.get("$field.CHECKLISTENTRY_ID"),
+        IS_FULFILLED: fulfilledValue,
+        OBJECT_TYPE: vars.get("$field.OBJECT_TYPE"),
+        OBJECT_ROWID: vars.get("$field.OBJECT_ROWID"),
+        DATE_EDIT: vars.get("$field.DATE_EDIT"),
+        DATE_NEW: vars.get("$field.DATE_NEW"),
+        USER_EDIT: vars.get("$field.USER_EDIT"),
+        USER_NEW: vars.get("$field.USER_NEW")
+    }, "CHECKLISTENTRYVALUE");
+}
+neon.refresh();
diff --git a/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js
deleted file mode 100644
index bd99ebeed2027694251b6959689c55508a87b6bb..0000000000000000000000000000000000000000
--- a/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import("Util_lib");
-import("system.result");
-import("system.vars");
-import("ChecklistEntryRegistry_basic");
-
-
-var fnName = vars.get("$param.VerifierFnName_param");
-var objectRowId = vars.get("$param.ObjectRowId_param");
-var isFulfilledFn = $ChecklistEntryRegistry[fnName];
-
-if (Utils.isFunction(isFulfilledFn))
-    result.string(isFulfilledFn().verifierFn(objectRowId));
-
-
diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
index a17f5785d37a462f4d534cf5770264812e1d2cfe..16a48ff0220dc6c9f068c46556ac69b6eb2864f5 100644
--- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
@@ -1,172 +1,46 @@
-import("system.translate");
-import("system.result");
-import("system.vars");
 import("system.util");
-import("system.db");
-import("KeywordRegistry_basic");
-import("Util_lib");
+import("system.vars");
+import("system.result");
+import("system.datetime");
 import("Sql_lib");
 import("ChecklistEntryRegistry_basic");
 
-var newUid;
-var doesExist;
-var checklistEntryIds = [];
-var preparedStatements = [];
-var checklistEntryValues = [];
-var manualChecklistEntries = [];
-var manualChecklistEntryValues = [];
-var cols = ["CHECKLISTENTRYVALUEID", "CHECKLISTENTRY_ID", "OBJECT_ROWID", "OBJECT_TYPE", 
-                "IS_FULFILLED", "USER_NEW", "USER_EDIT", "DATE_NEW", "DATE_EDIT"];
-
-var checklistId = vars.get("$param.ChecklistId_param");
-var objectRowId = vars.get("$param.ObjectRowId_param");
-var checklistEntries = [];
-var checklistEntryValueId = vars.get("$param.ChecklistEntryValueId_param");
-if (checklistEntryValueId)
-{
-    //get all entries of the current checklist
-    checklistEntries = newSelect([
-                                    "CHECKLISTENTRY.CHECKLISTENTRYID", 
-                                    "CHECKLISTENTRY.CHECKLIST_ID", 
-                                    "CHECKLISTENTRY.TITLE", 
-                                    "CHECKLISTENTRY.AUTO", 
-                                    "CHECKLISTENTRY.USER_NEW", 
-                                    "CHECKLISTENTRY.USER_EDIT", 
-                                    "CHECKLISTENTRY.DATE_NEW", 
-                                    "CHECKLISTENTRY.DATE_EDIT"])
-                            .from("CHECKLISTENTRY")
-                            .join("CHECKLISTENTRYVALUE", "CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID = CHECKLISTENTRY.CHECKLISTENTRYID")
-                            .where("CHECKLISTENTRY.CHECKLIST_ID", checklistId)
-                            .and("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", checklistEntryValueId)
-                            .table();
-                            
-    checklistEntries.forEach(function(pRow){
-        if (pRow[0]) 
-        {
-            checklistEntryIds.push(pRow[0]);
-        }
-    });
-}
-else if (checklistId)
-{
-    //get all entries of the current checklist
-    checklistEntries = newSelect([
-                                    "CHECKLISTENTRY.CHECKLISTENTRYID", 
-                                    "CHECKLISTENTRY.CHECKLIST_ID", 
-                                    "CHECKLISTENTRY.TITLE", 
-                                    "CHECKLISTENTRY.AUTO", 
-                                    "CHECKLISTENTRY.USER_NEW", 
-                                    "CHECKLISTENTRY.USER_EDIT", 
-                                    "CHECKLISTENTRY.DATE_NEW", 
-                                    "CHECKLISTENTRY.DATE_EDIT"])
-                            .from("CHECKLISTENTRY")
-                            .where("CHECKLISTENTRY.CHECKLIST_ID", checklistId)
-                            .table();
-                            
-    checklistEntries.forEach(function(pRow){
-        if (pRow[0]) 
-        {
-            checklistEntryIds.push(pRow[0]);
-        }
-    });
-}
-
-//loop trough the checklistEntries and handle them according to their type
-for (let i = 0; i < checklistEntries.length; i++) 
+var data = newSelect([
+    "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID",
+    "CHECKLISTENTRY.AUTO",
+    "CHECKLISTENTRY.CHECKLISTENTRYID",
+    "CHECKLISTENTRY.TITLE",
+    "CHECKLISTENTRYVALUE.IS_FULFILLED",
+    "CHECKLISTENTRYVALUE.OBJECT_ROWID",
+    "CHECKLISTENTRYVALUE.OBJECT_TYPE",
+    "CHECKLISTENTRYVALUE.DATE_EDIT",
+    "CHECKLISTENTRYVALUE.DATE_NEW",
+    "CHECKLISTENTRYVALUE.USER_EDIT",
+    "CHECKLISTENTRYVALUE.USER_NEW"
+]).from("CHECKLISTENTRY")
+.leftJoin(
+    "CHECKLISTENTRYVALUE",
+    newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID = CHECKLISTENTRY.CHECKLISTENTRYID")
+    .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", vars.get("$param.ObjectRowId_param"))
+    .andIfSet("CHECKLISTENTRYVALUE.OBJECT_TYPE", vars.get("$param.ObjectType_param"))
+).whereIfSet("CHECKLISTENTRY.CHECKLIST_ID", vars.get("$param.ChecklistId_param"))
+.table();
+
+for(let i = 0; i < data.length; i++)
 {
-    for (let ii = 0; ii < checklistEntries[i].length; ii++) 
+    data[i][0] = data[i][0] || util.getNewUUID();
+    data[i][4] = data[i][4] || "0";
+    data[i][5] = data[i][5] || vars.get("$param.ObjectRowId_param");
+    data[i][6] = data[i][6] || vars.get("$param.ObjectType_param");
+    data[i][8] = data[i][8] || datetime.date();
+    data[i][10] = data[i][10] || vars.get("$sys.user");
+    
+    if(parseInt(data[i][1]))
     {
-        checklistEntryValues[i] = new Array(13);
-
-        if (checklistEntries[i][3] == 1)//if auto == true
-        {
-            newUid = util.getNewUUID();
-            vars.set("$param.VerifierFnName_param", checklistEntries[i][2]);
-            checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), 
-                                        Utils.toBoolean(vars.get("$param.Verifier_param")) ? 1 : 0, objectRowId,
-                                        "", "null", vars.get("$sys.user")];
-        }
-        else//else manual
-        {
-            doesExist = newSelect([
-                                    "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", 
-                                    "CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID", 
-                                    "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID",
-                                    "CHECKLISTENTRYVALUE.DATE_EDIT", 
-                                    "CHECKLISTENTRYVALUE.DATE_NEW", 
-                                    "CHECKLISTENTRYVALUE.IS_FULFILLED",
-                                    "CHECKLISTENTRYVALUE.OBJECT_ROWID", 
-                                    "CHECKLISTENTRYVALUE.OBJECT_TYPE", 
-                                    "CHECKLISTENTRYVALUE.USER_EDIT", 
-                                    "CHECKLISTENTRYVALUE.USER_NEW"])
-                                    .from("CHECKLISTENTRYVALUE")
-                                    .where("CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID", checklistEntries[i][0])
-                                    .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", objectRowId)
-                                    .arrayRow();
-            if (doesExist.length > 0)
-            {
-                checklistEntryValues[i] = doesExist;
-            }
-            else
-            {
-                newUid = util.getNewUUID();
-                checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), "0", objectRowId, "", 
-                                            "null", vars.get("$sys.user"), ""];
-                doesExist = preparedStatements.some(function(pPreparedStatement){
-                    return pPreparedStatement[3].includes(checklistEntries[i][0]) && pPreparedStatement[3].includes(objectRowId);
-                });
-                
-                if (!doesExist)
-                {
-                    preparedStatements.push(["CHECKLISTENTRYVALUE", 
-                                            cols,
-                                            db.getColumnTypes("CHECKLISTENTRYVALUE", cols),
-                                            [checklistEntryValues[i][0],
-                                                checklistEntryValues[i][1],
-                                                checklistEntryValues[i][6],
-                                                checklistEntryValues[i][7],
-                                                checklistEntryValues[i][5].toString(),
-                                                checklistEntryValues[i][9],
-                                                checklistEntryValues[i][8],
-                                                checklistEntryValues[i][4],
-                                                checklistEntryValues[i][3]]]);
-                }
-            }
-        }
+        var checklistEntry = $ChecklistEntryRegistry[data[i][3]]();
+        data[i][3] = checklistEntry.title;
+        data[i][4] = checklistEntry.verifierFn(vars.get("$param.ObjectRowId_param")) ? "1" : "0";
     }
-    checklistEntryValues[i][10] = _checklistEntryDisplayValue(checklistEntries[i][2]);
-    checklistEntryValues[i][11] = checklistEntries[i][3];
-    checklistEntryValues[i][12] = _autoDisplayValue(checklistEntries[i][3]);
-} 
-
-db.inserts(preparedStatements);//insert the ones that don't already exist
-result.object(checklistEntryValues);
-
-
-function _checklistEntryDisplayValue(pChecklistEntryTitle)
-{
-    var displayValue;
-    var verfierFnName = pChecklistEntryTitle;
-                                
-    var verifierFn = $ChecklistEntryRegistry[verfierFnName];
-
-
-    if (Utils.isFunction(verifierFn))
-        displayValue = verifierFn().title;
-    else{
-        displayValue = translate.text(verfierFnName);
-    }
-    return displayValue;
 }
 
-function _autoDisplayValue(pAutoValue)
-{
-    if(pAutoValue == 1)
-    {
-        return translate.text("Automatically");
-    }
-    else
-    {
-        return translate.text("Manually");
-    }
-}
\ No newline at end of file
+result.object(data);
diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js
deleted file mode 100644
index 666ee575b4538a2df8721203cf2feaea2a61158e..0000000000000000000000000000000000000000
--- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("Sql_lib");
-import("system.vars");
-
-var changed = vars.get("$local.changed");
-
-if(changed)
-{
-    newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID")
-        .updateFields({"IS_FULFILLED" : vars.get("$field.IS_FULFILLED")});
-}
\ No newline at end of file
diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
index 3385604c588240288d04438c5f6946dc6b7b6d22..d484cdac8c4b5700221c38e0fcff424c2615bd85 100644
--- a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
+++ b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
@@ -30,6 +30,9 @@
       <placeholderProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/placeholderProcess.js</placeholderProcess>
       <displayValueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
     </entityField>
     <entityField>
       <name>USER_EDIT</name>
diff --git a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..0b6d0eedc3e5dfada987166ab52fedb1ece253c0
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>CommunicationBlacklist_entity</name>
+  <title>Blacklist</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <onValidation>%aditoprj%/entity/CommunicationBlacklist_entity/onValidation.js</onValidation>
+  <iconId>VAADIN:BAN</iconId>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>COMMUNICATIONBLACKLISTID</name>
+    </entityField>
+    <entityField>
+      <name>START_DATE</name>
+      <title>Start date</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+    </entityField>
+    <entityField>
+      <name>END_DATE</name>
+      <title>End date</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+    </entityField>
+    <entityField>
+      <name>BLACKLIST_FILTER</name>
+      <title>Condition</title>
+      <contentType>FILTER_TREE</contentType>
+      <stateProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>REASON</name>
+      <title>Reason</title>
+      <contentType>LONG_TEXT</contentType>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>BLACKLIST_TYPE</name>
+      <title>Type</title>
+      <consumer>BlacklistTypeKeyword</consumer>
+      <mandatory v="true" />
+    </entityField>
+    <entityConsumer>
+      <name>BlacklistTypeKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>DATE_NEW</name>
+      <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>BLACKLIST_FILTER.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_FILTER</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>BLACKLIST_TYPE.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_TYPE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COMMUNICATIONBLACKLISTID.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.COMMUNICATIONBLACKLISTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>END_DATE.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.END_DATE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>REASON.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.REASON</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>START_DATE.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.START_DATE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>COMMUNICATIONBLACKLIST.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>BLACKLIST_TYPE.displayValue</name>
+          <expression>%aditoprj%/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>007ad42a-0a7a-49a9-a71d-917ee3c94aa7</name>
+          <tableName>COMMUNICATIONBLACKLIST</tableName>
+          <primaryKey>COMMUNICATIONBLACKLISTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..234a26e9827c511b12b09fbbe1f5552bfd78f912
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter())
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bb45e823a21888b77385d2950bfb48fc5d530d9
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (!vars.get("$this.value") && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+{
+    var emptyFilter = {entity: "BulkMailRecipient_entity", filter: {type: "group", operator: "AND", childs: []}};
+    result.string(JSON.stringify(emptyFilter));
+}
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e28921b3c32d79d55a29aebe44878a9c766c91d
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.communicationBlacklistType());
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb1c3887f7cdc3e41fc6ddd1bcb3c4032843c5
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d9eb72f007f3af16b698a9483ed117730ec3680
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/onValidation.js b/entity/CommunicationBlacklist_entity/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..0652d9c0f9ff0ba032e0b7561c04ee345ba99223
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/onValidation.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("Util_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.neon");
+import("JditoFilter_lib");
+
+if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter())
+{
+    var filter = Utils.parseJSON(vars.get("$field.BLACKLIST_FILTER"));
+    filter = new FilterConditionGroup(filter);
+    if (filter.isEmpty())
+        result.string(translate.text("Filter can't be empty"));
+}
\ No newline at end of file
diff --git a/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js b/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..6cf151ddba7fdaa25222f92a4fe98aba79c4b803
--- /dev/null
+++ b/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationBlacklistType(), "COMMUNICATIONBLACKLIST.BLACKLIST_TYPE"));
\ No newline at end of file
diff --git a/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..1ad20c2a04f2e19d21325dbc1628c55e6589771b
--- /dev/null
+++ b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>CommunicationChannel_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>ContactId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Addresses</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>ContactAddresses</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Communications</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>AllCommunications</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>CommCategory_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityProvider>
+      <name>ContactCommunicationChannels</name>
+      <targetConsumerProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js</targetConsumerProcess>
+      <dependencies>
+        <entityDependency>
+          <name>a1ac784e-a932-48a5-9aa5-285f8c9ad483</name>
+          <entityName>CommunicationSettings_entity</entityName>
+          <fieldName>CommunicationChannels</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>CommunicationChannelType_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>CommunicationCategory_param</name>
+      <expose v="true" />
+    </entityParameter>
+  </entityFields>
+</entity>
diff --git a/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f392d5c2e143090012fa5b4cc765d8e5ba278ac
--- /dev/null
+++ b/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f113cc9898867b3769345d93eb25eaf25e89ee31
--- /dev/null
+++ b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$param.CommunicationCategory_param"));
\ No newline at end of file
diff --git a/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f392d5c2e143090012fa5b4cc765d8e5ba278ac
--- /dev/null
+++ b/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js b/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..87fa13898fe7efe1acb5adc1ad3c941c2b6a4bc3
--- /dev/null
+++ b/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+var channelType = vars.get("$param.CommunicationChannelType_param");
+var consumer = "Communications"; //fallback
+if (channelType == $KeywordRegistry.communicationChannelType$communication())
+    consumer = "Communications";
+else if (channelType == $KeywordRegistry.communicationChannelType$address())
+    consumer = "Addresses";
+
+result.string(consumer);
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..09065e34bb370b7d14806ff55e393df36c67093f
--- /dev/null
+++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>CommunicationSettings_entity</name>
+  <title>Communication Settings</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <contentTitleProcess>%aditoprj%/entity/CommunicationSettings_entity/contentTitleProcess.js</contentTitleProcess>
+  <iconIdProcess>%aditoprj%/entity/CommunicationSettings_entity/iconIdProcess.js</iconIdProcess>
+  <titlePlural>Communication Settings</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityProvider>
+      <name>SettingsForContact</name>
+      <dependencies>
+        <entityDependency>
+          <name>811c8c4c-20f8-4e20-9ae3-9aa7ae5e1dc0</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>ContactCommunicationSettings</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>COMMUNICATIONSETTINGSID</name>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <title>Created on</title>
+      <contentType>DATE</contentType>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <title>Last change</title>
+      <contentType>DATE</contentType>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Contact</title>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <groupable v="true" />
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>MEDIUM</name>
+      <title>Medium</title>
+      <consumer>MediumKeyword</consumer>
+      <groupable v="true" />
+      <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>CHANNEL_TYPE</name>
+      <title>Channel type</title>
+      <consumer>ChannelTypeKeyword</consumer>
+      <groupable v="true" />
+      <mandatory v="true" />
+      <onValueChange>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>CHANNEL_ID</name>
+      <title>Channel</title>
+      <consumer>CommunicationChannels</consumer>
+      <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js</stateProcess>
+      <titleProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js</titleProcess>
+      <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>StatusKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityParameter>
+      <name>ContactId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>ChannelTypeKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MediumKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>CommunicationChannels</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CommunicationChannel_entity</entityName>
+        <fieldName>ContactCommunicationChannels</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>CommunicationChannelType_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>CommunicationCategory_param</name>
+          <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>ICON</name>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>COMMUNICATIONLEGALBASEID</name>
+    </entityField>
+    <entityField>
+      <name>INFO</name>
+      <title>Info</title>
+      <contentType>LONG_TEXT</contentType>
+    </entityField>
+    <entityField>
+      <name>COMMUNICATIONSETTINGS_ID</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW_LEGALBASE</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW_LEGALBASE</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT_LEGALBASE</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT_LEGALBASE</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>VERSION</name>
+      <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <fromClauseProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CHANNEL_ID.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.CHANNEL_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CHANNEL_TYPE.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.CHANNEL_TYPE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COMMUNICATIONSETTINGSID.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MEDIUM.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.MEDIUM</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CHANNEL_TYPE.displayValue</name>
+          <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MEDIUM.displayValue</name>
+          <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CHANNEL_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INFO.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.INFO</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>COMMUNICATIONSETTINGS.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COMMUNICATIONLEGALBASEID.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.COMMUNICATIONLEGALBASEID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COMMUNICATIONSETTINGS_ID.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.COMMUNICATIONSETTINGS_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT_LEGALBASE.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW_LEGALBASE.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT_LEGALBASE.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW_LEGALBASE.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>VERSION.value</name>
+          <recordfield>COMMUNICATIONLEGALBASE.VERSION</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>c618d72c-9ae5-4f24-bfc7-92911df8ee67</name>
+          <tableName>COMMUNICATIONSETTINGS</tableName>
+          <primaryKey>COMMUNICATIONSETTINGSID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>ce7a5962-18b9-4840-9c64-3b05a111a4b0</name>
+          <tableName>COMMUNICATIONLEGALBASE</tableName>
+          <primaryKey>COMMUNICATIONLEGALBASEID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/CommunicationSettings_entity/contentTitleProcess.js b/entity/CommunicationSettings_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d8c4734469b997363f4f33fa17b92701bfca98a
--- /dev/null
+++ b/entity/CommunicationSettings_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.MEDIUM.displayValue") || vars.get("$field.CHANNEL_TYPE.displayValue"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..da04d27adcdef470f0549ab22050affb126be286
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js
@@ -0,0 +1,17 @@
+import("PostalAddress_lib");
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+
+var channelType = vars.get("$field.CHANNEL_TYPE");
+var channel = vars.get("$field.CHANNEL_ID");
+
+if (channelType == $KeywordRegistry.communicationChannelType$address())
+{
+    result.string(AddressUtils.getFormattedOnlineAddressById(channel));
+}
+else if (channelType == $KeywordRegistry.communicationChannelType$communication())
+{
+    result.string(newSelect("ADDR").from("COMMUNICATION").where("COMMUNICATION.COMMUNICATIONID", channel).cell());
+}
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9caec77e4d7a7a9fc66d0d97fb57ce87f0752279
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$communication()
+    && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$address())
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..67d56550550b8196260ba8942cc2d377a6b6a3c6
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js
@@ -0,0 +1,10 @@
+import("system.translate");
+import("KeywordRegistry_basic");
+import("system.result");
+import("system.vars");
+
+var type = vars.get("$field.CHANNEL_TYPE");
+if (type == $KeywordRegistry.communicationChannelType$communication())
+    result.string(translate.text("Communication"));
+else if (type == $KeywordRegistry.communicationChannelType$address())
+    result.string(translate.text("Address"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js b/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..a37d392eb37dd225820f7a7d6f3c9ea390dd2ebb
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js
@@ -0,0 +1,6 @@
+import("system.neon");
+
+neon.setFieldValues({
+    "$field.MEDIUM": "",
+    "$field.CHANNEL_ID": ""
+});
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..353ea6f4bf85e804015624dbf0c96655491125f8
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.communicationChannelType());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc362f395eb7ce08a4386585b8c3276ac6d5a5dd
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CHANNEL_TYPE"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..92dc282c45a62faa071d7ccb0b88ca26570da90d
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("Keyword_lib")
+import("KeywordRegistry_basic");
+
+var medium = vars.get("$field.MEDIUM");
+if (medium)
+{
+    var categoryAttribute = new KeywordAttribute($KeywordRegistry.communicationMediumCampaign(), "category");
+    var category = categoryAttribute.getValue(medium);
+    result.string(category);
+}
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef0d5bcac51027b862291e5abd61c0c05773a8df
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b3c724dc990b3caf81399f58b86abf6c71cf1fe
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$field.COMMUNICATIONSETTINGSID"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d877bfcaca49d927d93af76a0600ce037fe93bf8
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2194ba21bc59d11cfba9d4f1b84375b73ec67525
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2194ba21bc59d11cfba9d4f1b84375b73ec67525
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb1c3887f7cdc3e41fc6ddd1bcb3c4032843c5
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb1c3887f7cdc3e41fc6ddd1bcb3c4032843c5
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4483d06c910b2a47246299abe962b7387d38d6e9
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var medium = vars.getString("$field.MEDIUM");
+var icon = "";
+if (medium)
+{
+    var keywordAttributes = KeywordUtils.getAttributeRelationsByKey(medium, $KeywordRegistry.communicationMediumCampaign());
+    icon = keywordAttributes.AdvertisingBanIcon;
+}
+result.string(icon);
diff --git a/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..496cea3abe31f14d58f44eee73b6f870e43e206f
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), vars.get("$field.MEDIUM")));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js b/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d056e37f40741c4ad66405d2e11c328aaf1d5d
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js
@@ -0,0 +1,5 @@
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$local.value"))
+    neon.setFieldValue("$field.CHANNEL_ID", "");
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..58b2b7867af34f2d3a13d59798bc14ad040a0854
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$communication())
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7553cb4bb5d328f447bc621fa071696d8418b6e
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.communicationMediumCampaign());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3ac19b3e9138d5e98a5772ba56a104449011868
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationSettingStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd4556b964af6e506db2dd34ff8419b542db23c9
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,7 @@
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string($KeywordRegistry.communicationSettingStatus$pending());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e9094784904aeb14e3231ab86844965215e4481
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.communicationSettingStatus());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..47a3dbd1201377ecf0a93083e23b7706175c359f
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..47a3dbd1201377ecf0a93083e23b7706175c359f
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d9eb72f007f3af16b698a9483ed117730ec3680
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d9eb72f007f3af16b698a9483ed117730ec3680
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd82c76775cd61c184add5a2ad4ac153a00b16fe
--- /dev/null
+++ b/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string("1");
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js b/entity/CommunicationSettings_entity/iconIdProcess.js
similarity index 55%
rename from entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js
rename to entity/CommunicationSettings_entity/iconIdProcess.js
index f8b07f56abc4e6b2df8800916a77fa58b50e99bf..f86b12ac2a9815380d0355d333a56acb87083bb0 100644
--- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js
+++ b/entity/CommunicationSettings_entity/iconIdProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string("Person_entity");
\ No newline at end of file
+result.string(vars.get("$field.ICON"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e2c1224ac30a3a48370f694af38d97653922684
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Sql_lib");
+
+var condition = newWhere("COMMUNICATIONSETTINGS.CONTACT_ID", "$param.ContactId_param");
+
+result.string(condition.toString());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d178b505c1a0cd0177f4253deac9784d7152eca2
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("Sql_lib");
+
+var from = new SqlBuilder()
+    .from("COMMUNICATIONSETTINGS")
+    .join("COMMUNICATIONLEGALBASE", new SqlBuilder()
+        .where("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMUNICATIONLEGALBASE.COMMUNICATIONSETTINGS_ID")
+        .and(null, new SqlBuilder()
+            .select("fresher.COMMUNICATIONLEGALBASEID")
+            .from("COMMUNICATIONLEGALBASE", "fresher")
+            .where("fresher.COMMUNICATIONSETTINGS_ID = COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID")
+            .and("fresher.DATE_NEW > COMMUNICATIONLEGALBASE.DATE_NEW"),
+            SqlBuilder.NOT_EXISTS()));
+
+result.string(from.toString());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..aff37a959f83f072af80884f84351b32c2c6103a
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js
@@ -0,0 +1,18 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("PostalAddress_lib");
+
+var displayValueSql = SqlBuilder.caseStatement()
+    .when("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$address())
+        .then(new SqlBuilder()
+            .select(AddressUtils.formatOnelineSql())
+            .from("ADDRESS")
+            .where("ADDRESS.ADDRESSID = COMMUNICATIONSETTINGS.CHANNEL_ID"))
+    .when("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$communication())
+        .then(new SqlBuilder()
+            .select("ADDR")
+            .from("COMMUNICATION")
+            .where("COMMUNICATIONID = COMMUNICATIONSETTINGS.CHANNEL_ID"));
+
+result.string(displayValueSql.toString());
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2b7346dd81d0b28adc307f0d533740ae06d0fc9
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationChannelType(), "COMMUNICATIONSETTINGS.CHANNEL_TYPE"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..531e372f98c68180b2883f8702140dbe8dac4c6e
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM"));
\ No newline at end of file
diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..47b4114fc5c2961b0af902a8401d06551d9c3bd5
--- /dev/null
+++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationSettingStatus(), "COMMUNICATIONSETTINGS.STATUS"));
\ No newline at end of file
diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod
index 31f48ebaa3a51281176d95c6a40ea1c27f54c59d..d05064079162def233cf42c06700e32a33ee3914 100644
--- a/entity/Communication_entity/Communication_entity.aod
+++ b/entity/Communication_entity/Communication_entity.aod
@@ -90,6 +90,12 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <fieldName>Communications</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>8266f568-f15d-42c5-8ba3-5254fed7fd99</name>
+          <entityName>CommunicationChannel_entity</entityName>
+          <fieldName>Communications</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Communication_entity/afterOperatingState.js b/entity/Communication_entity/afterOperatingState.js
index 7085e9f853c10e7ebaadcd76f44b8786c5d621ed..8c0033867c1e45e42fa9b62d26f0d6218a48452d 100644
--- a/entity/Communication_entity/afterOperatingState.js
+++ b/entity/Communication_entity/afterOperatingState.js
@@ -2,4 +2,7 @@ import("system.vars");
 import("system.neon");
 
 if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW)
-    vars.set("$context.PushDataPrivacyNotification", "false");
\ No newline at end of file
+{
+    vars.set("$context.PushDataPrivacyNotification", "false");
+}
+    
\ No newline at end of file
diff --git a/entity/Contact_entity/recordcontainers/db/onDBDelete.js b/entity/Contact_entity/recordcontainers/db/onDBDelete.js
index 61afa46ba950988b60515de3cae0e732553cfe69..c7b08f7110800f03efb3ca755622080493d3fd48 100644
--- a/entity/Contact_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Contact_entity/recordcontainers/db/onDBDelete.js
@@ -5,7 +5,8 @@ import("system.vars");
 import("DuplicateScanner_lib");
 
 var contactId = vars.get("$field.CONTACTID");
-DuplicateScannerUtils.deleteCachedDuplicate(contactId);
+DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]);
+DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [contactId]);
 
 new AttributeRelationQuery(contactId, null, "Person")
     .deleteAllAttributes();
diff --git a/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b9124ce356f046cabb41c785bba831062c024234
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>DSGVOConfigurationAttribute_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/documentation.adoc</documentation>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityField>
+      <name>ATTRIBUTE_PARENT_ID</name>
+    </entityField>
+    <entityField>
+      <name>ATTRIBUTE_NAME</name>
+      <title>Name</title>
+      <displayValueProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>isDSGVORelevant</name>
+      <title>is DSGVO Relevant</title>
+      <contentType>BOOLEAN</contentType>
+      <valueProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>DSGVOAttributeConfig</name>
+      <dependencies>
+        <entityDependency>
+          <name>96e9f7e0-1f47-47d5-beee-0e28b3e203e1</name>
+          <entityName>DSGVOConfiguration_entity</entityName>
+          <fieldName>DSGVOConfigurationAttributes</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityActionGroup>
+      <name>FilterActions</name>
+      <state>DISABLED</state>
+      <stateProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js</stateProcess>
+      <children>
+        <entityActionField>
+          <name>changeDSGVORelevance</name>
+          <title>change DSGVO Relevance</title>
+          <onActionProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isSelectionAction v="true" />
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ATTRIBUTE_NAME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ATTRIBUTE_PARENT_ID.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DSGVOConfigurationAttribute_entity/documentation.adoc b/entity/DSGVOConfigurationAttribute_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..4441147717e0c61613ba2e247db2e3f0c5828431
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/documentation.adoc
@@ -0,0 +1,5 @@
+= DSGVOConfigurationAttribute_entity
+
+The entity shows all attributes relevant to the person and it is for the configuration of the GDPR-relevant attributes.
+If a attribute is markt as GDPR-relevant you get a data privacy message, when you update or insert one in the persons. 
+Also these attributes are shown in the data privacy tap of the person.
diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5717eabb76417046c488939aadcfa7beb915dcd
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+result.string(translate.text(vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c425285f1ac351bf2327587da08f930c866eef7
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js
@@ -0,0 +1,34 @@
+import("system.neon");
+import("Sql_lib");
+import("system.entities");
+import("system.vars");
+
+
+if (vars.get("$field.isDSGVORelevant") == "0")
+{
+    let fields = {
+        "OBJECT_TYPE" : "DSGVO",
+        "AB_ATTRIBUTE_ID" : vars.get("$field.UID"),
+        "MAX_COUNT": "1"
+    }
+    
+    let createRowConfig = entities.createConfigForAddingRows()
+    .entity("AttributeUsage_entity");
+    entities.createRow(createRowConfig.fieldValues(fields));
+}
+else 
+{
+    newSelect("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID")
+        .from("AB_ATTRIBUTEUSAGE")
+        .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO")
+        .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.UID"))
+        .arrayColumn()
+        .forEach(function (pUsageId) {
+            let deleteRowConfig = entities.createConfigForDeletingRows()
+            .uid(pUsageId)
+            .entity("AttributeUsage_entity");
+            entities.deleteRow(deleteRowConfig);
+        });
+}
+
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bc43bb218f1477c70b73958cf6784458b2714f0
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.selection").length > 0)
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..10bd0fec530097f2fabb20287cc417d16b1f8946
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+
+result.string( newSelect("COUNT(*)")
+.from("AB_ATTRIBUTEUSAGE")
+.where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO")
+.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.UID")).cell());
diff --git a/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js b/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd4950c921fc7cc464cc4e86555ea9970df6d009
--- /dev/null
+++ b/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("Attribute_lib");
+import("Sql_lib");
+
+
+result.object(newSelect(["AB_ATTRIBUTE.AB_ATTRIBUTEID", "AB_ATTRIBUTE.ATTRIBUTE_NAME", "AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID"])
+    .from("AB_ATTRIBUTE")
+    .join("AB_ATTRIBUTEUSAGE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID")
+    .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "Person")
+    .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.COMBOVALUE(), SqlBuilder.NOT_EQUAL())
+    .and("ATTRIBUTE_ACTIVE = 1")
+    .orderBy("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID DESC").table());
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5336dde6e7664ffbc2df7cb8f90be75f87ac4239
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>DSGVOConfiguration_entity</name>
+  <title>DSGVO Configuration</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DSGVOConfiguration_entity/documentation.adoc</documentation>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <contentType>DATE</contentType>
+      <mandatory v="false" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <contentType>DATE</contentType>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DSGVOCONFIGURATIONID</name>
+    </entityField>
+    <entityField>
+      <name>FILTER</name>
+      <title>Filter</title>
+      <contentType>FILTER_TREE</contentType>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>REASON</name>
+      <title>Reason</title>
+      <mandatory v="true" />
+      <dropDownProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js</dropDownProcess>
+      <textInputAllowed v="true" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js</valueProcess>
+      <onValidation>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <mandatory v="false" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>entity</name>
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>alreadyMarked</name>
+      <title>Marked for deletion</title>
+      <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>COUNT_USAGE</name>
+      <title>Count Usage</title>
+      <state>READONLY</state>
+      <stateProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js</stateProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Persons</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contacts</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityActionGroup>
+      <name>FilterConfigActions</name>
+      <children>
+        <entityActionField>
+          <name>MarkToDelete</name>
+          <title>Mark to Delete</title>
+          <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js</onActionProcess>
+          <isObjectAction v="true" />
+          <iconId>NEON:SAL</iconId>
+          <titleProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js</titleProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>AnonymizePersons</name>
+          <title>anonymize Persons</title>
+          <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <iconId>NEON:TRASH</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityActionField>
+      <name>OpenContacts</name>
+      <title>Open Contacts</title>
+      <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js</onActionProcess>
+      <isMenuAction v="true" />
+      <isSelectionAction v="false" />
+      <iconId>VAADIN:USERS</iconId>
+    </entityActionField>
+    <entityConsumer>
+      <name>ConfigKeywordAttributeRelation</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordAttributeRelation_entity</entityName>
+        <fieldName>AttributesForKeywordEntry</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>KeywordEntryId_param</name>
+          <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DSGVOConfigurationAttributes</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DSGVOConfigurationAttribute_entity</entityName>
+        <fieldName>DSGVOAttributeConfig</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>REASONID</name>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <isPageable v="true" />
+      <onDBInsert>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBUpdate>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
+      <onDBDelete>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>DSGVOCONFIGURATION.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>DSGVOCONFIGURATION.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DSGVOCONFIGURATIONID.value</name>
+          <recordfield>DSGVOCONFIGURATION.DSGVOCONFIGURATIONID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>DSGVOCONFIGURATION.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>DSGVOCONFIGURATION.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>FILTER.value</name>
+          <recordfield>DSGVOCONFIGURATION.FILTER</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COUNT_USAGE.value</name>
+          <expression>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>REASONID.value</name>
+          <recordfield>DSGVOCONFIGURATION.REASON</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>6efbaa15-d5ef-49d5-b2fc-ca21f55b110a</name>
+          <tableName>DSGVOCONFIGURATION</tableName>
+          <primaryKey>DSGVOCONFIGURATIONID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DSGVOConfiguration_entity/documentation.adoc b/entity/DSGVOConfiguration_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0c451d61a372f05803f38408206387690b2f4309
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/documentation.adoc
@@ -0,0 +1,8 @@
+= DSGVOConfiguration_entity
+
+This entity is for the configurations of the filter to set the marks for deletion in the persons. 
+In the filter_view also can start the two processes.
+
+- The prozess to mark all to delete
+- and then anonymize the persons with the second prozess
+
diff --git a/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2689a33903eceb090cc1103977eac0c779804fe0
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Sql_lib");
+
+result.string(parseInt(newSelect("COUNT(*)").from("CONTACT").where("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()).cell()));
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..abbda7b1960a316165e5285f1c5c12875b696db4
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.dsgvoConfiguration$configId());
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js b/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb8e12bf234d636a35da74d064f5ddaf2f3a4369
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+var res = neon.COMPONENTSTATE_INVISIBLE
+
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT)
+{
+    res = neon.COMPONENTSTATE_READONLY;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cd90b34ea56f1e22f023e13710fed73f62d2c78
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.date"));
+}
+    
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c68e0b1ce5d1bcb6519f306dfa01de18c10be7c
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.date"));
+}
+    
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js
similarity index 98%
rename from entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js
rename to entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js
index 0f7bee25ea3bd34aeeceff7f47f7f9118e69b7ba..c8fadb7380feb48636999dc2c70bd9b79ef5927e 100644
--- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js
+++ b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js
@@ -1,2 +1,3 @@
 import("system.result");
+
 result.string("Person_entity");
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d66c48f85bd3a672a0c4f094b134377989e1a5c
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js
@@ -0,0 +1,23 @@
+import("system.translate");
+import("system.vars");
+import("system.result");
+
+if (!vars.get("$this.value"))
+{
+    result.string(JSON.stringify({
+        entity: "" + vars.get("$field.entity") + "", 
+        filter: {
+            type: "group", 
+            operator: "AND", 
+            childs: [{
+        "type":"row",
+        "name":"#EXTENSION.IsEmployee_filter.IsEmployee_filter#BOOLEAN",
+        "operator":"EQUAL",
+        "value":translate.text("No"),
+        "key":"false",
+        "contenttype":"BOOLEAN"
+    }]
+        }
+    }));
+}
+
diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..84cb5f3efd8a922cf45861cbc260fa2170398cc9
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js
@@ -0,0 +1,18 @@
+import("system.translate");
+import("system.question");
+import("system.neon");
+import("system.vars");
+import("system.process");
+
+let deleteFlags = question.askYesNo(translate.text("DSGVO"), translate.text("Do you really want to anonymize all marked persons?"), false);
+
+if (deleteFlags)
+{
+    var processConfig = process.createStartAsyncConfig()
+    .setShowErrorDialog(true)
+    .setName("DSGVOAnonymize_serverProcess");
+
+    process.startAsync(processConfig);
+}
+
+
diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d811e528c09a14d498ebbc9774f22a779d33b6fe
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("system.question");
+import("system.neon");
+import("system.vars");
+import("system.process");
+
+let deleteFlags = question.askYesNo(translate.text("DSGVO"), translate.text("Do you want to delete the flags of the already maked Persons?"), false);
+
+var processConfig = process.createStartConfig()
+.setLocalVariables({"deleteFlags" : deleteFlags, "tableSelection": JSON.stringify(vars.get("$sys.selection"))})
+.setName("DSGVOSetDeleteFlags_serverProcess");
+
+process.start(processConfig);
+
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c5b8ed9a40d00d0d8ccc0a55708200a0b0a7164
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js
@@ -0,0 +1,12 @@
+import("system.translate");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.selection").length)
+{
+    result.string(translate.text("Mark selection to delete"));
+}
+else 
+{
+    result.string(translate.text("Mark all to delete"));
+}
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..36f8bf311d6d36d3c7f19d97c0df4c02ad6ae438
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.translate");
+import("system.vars");
+import("system.neon");
+
+neon.openContext("Person", "PersonFilterOverlay_view", null, neon.OPERATINGSTATE_SEARCH , {
+    FilterPreSet_param: JSON.stringify(JSON.parse(vars.get("$field.FILTER")).filter)
+});
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..11968ec24ef3cae230df9e488fdc909dade2ef4b
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js
@@ -0,0 +1,12 @@
+import("system.logging");
+import("system.result");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+
+let keywords = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.dsgvoReason());
+
+keywords.shift();
+
+logging.log(JSON.stringify(keywords));
+
+result.object(keywords);
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js b/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..315525a5cb90558f9db0c496138b193c93fcbdcb
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+if (vars.getString("$local.value") && vars.getString("$local.value").length > 100)
+{
+    result.string(translate.text("Characters to use"));
+}
diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..13e5f3cef514c67ebdd301630820e4d50cb80ce2
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+
+if (!vars.get("$this.value") && vars.get("$field.REASONID"))
+{
+    result.string(vars.get("$field.REASONID"));
+}
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b5364ae7513fbd76d26cbb9bfe34adc90541764
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
+    
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..821388b7f44d42e12179d8886bd3f42b59c984b1
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.user"));
+}
+    
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..e291fe5c7e99d2b8cb2b8bc39621fd5dd980b8dc
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,17 @@
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("system.vars");
+
+let reason = vars.get("$local.rowdata")["DSGVOCONFIGURATION.REASON"];
+
+newWhereIfSet("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete())
+        .and("CONTACT.CONTACTID", 
+            newSelect("DSGVODELETEFLAG.CONTACT_ID")
+            .from("DSGVODELETEFLAG")
+            .where("DSGVODELETEFLAG.REASON", reason),
+            SqlBuilder.IN())
+        .updateData(true, "CONTACT", ["STATUS"], null, [$KeywordRegistry.contactStatus$active()]);
+
+newWhereIfSet("DSGVODELETEFLAG.REASON", reason)
+        .deleteData(true, "DSGVODELETEFLAG");
+        
diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5181af765a21d043dd354ba9ba2858ee01caaf0
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js
@@ -0,0 +1,36 @@
+import("Sql_lib");
+import("system.entities");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.util");
+import("system.vars");
+
+let rowdata = vars.get("$local.rowdata");
+let reason = vars.get("$field.REASON");
+let reasonID;
+
+if ( vars.get("$property.REASON.dropDown")[reason] == reason )
+{
+    let newUID = util.getNewUUID();
+    
+    let fields = {
+        "AB_KEYWORD_CATEGORY_ID" : KeywordUtils.getCategoryIdByName($KeywordRegistry.dsgvoReason()),
+        "TITLE" : reason,
+        "ISACTIVE": "1",
+        "KEYID" : newUID,
+        "AB_KEYWORD_ENTRYID": newUID
+    }
+
+    let createRowConfig = entities.createConfigForAddingRows()
+    .entity("KeywordEntry_entity");
+    entities.createRow(createRowConfig.fieldValues(fields));
+
+    reasonID = newUID;
+} else {
+    reasonID = reason;
+}
+
+ newWhere("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", rowdata["DSGVOCONFIGURATION.DSGVOCONFIGURATIONID"])
+        .updateFields({
+            "DSGVOCONFIGURATION.REASON" : reasonID
+        }, "DSGVOCONFIGURATION");
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5181af765a21d043dd354ba9ba2858ee01caaf0
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js
@@ -0,0 +1,36 @@
+import("Sql_lib");
+import("system.entities");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.util");
+import("system.vars");
+
+let rowdata = vars.get("$local.rowdata");
+let reason = vars.get("$field.REASON");
+let reasonID;
+
+if ( vars.get("$property.REASON.dropDown")[reason] == reason )
+{
+    let newUID = util.getNewUUID();
+    
+    let fields = {
+        "AB_KEYWORD_CATEGORY_ID" : KeywordUtils.getCategoryIdByName($KeywordRegistry.dsgvoReason()),
+        "TITLE" : reason,
+        "ISACTIVE": "1",
+        "KEYID" : newUID,
+        "AB_KEYWORD_ENTRYID": newUID
+    }
+
+    let createRowConfig = entities.createConfigForAddingRows()
+    .entity("KeywordEntry_entity");
+    entities.createRow(createRowConfig.fieldValues(fields));
+
+    reasonID = newUID;
+} else {
+    reasonID = reason;
+}
+
+ newWhere("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", rowdata["DSGVOCONFIGURATION.DSGVOCONFIGURATIONID"])
+        .updateFields({
+            "DSGVOCONFIGURATION.REASON" : reasonID
+        }, "DSGVOCONFIGURATION");
\ No newline at end of file
diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2be7823837c0c6680941efd8f3c746c7e90efa3
--- /dev/null
+++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("COUNT(*)").from("DSGVODELETEFLAG").where("DSGVOCONFIGURATION.REASON = DSGVODELETEFLAG.REASON").toString())
\ No newline at end of file
diff --git a/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2689a96d7cdbfef9a422fdc07b7c5f5012c8fb47
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>DSGVODeleteFlag_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DSGVODeleteFlag_entity/documentation.adoc</documentation>
+  <siblings>
+    <element>Person_entity</element>
+    <element>LogHistory_entity</element>
+  </siblings>
+  <grantUpdate v="false" />
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>DATE_NEW</name>
+      <title>Date</title>
+      <contentType>DATE</contentType>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>DSGVODELETEFLAGID</name>
+    </entityField>
+    <entityField>
+      <name>REASON</name>
+      <title>Reason</title>
+      <consumer>DSGVOReasonKeywords</consumer>
+      <mandatory v="true" />
+      <state>READONLY</state>
+      <displayValueProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <title>User</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>CONTACT_ID</name>
+    </entityField>
+    <entityProvider>
+      <name>DSGVODeleteFlags</name>
+      <dependencies>
+        <entityDependency>
+          <name>94915ca8-aca8-457a-ac12-05408ba8ab37</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>DSGVODeleteFlags</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>ContactId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>DSGVOReasonKeywords</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>OrderedBySortingFieldKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityActionGroup>
+      <name>FilterActions</name>
+      <children>
+        <entityActionField>
+          <name>AddManualDeleteFlag</name>
+          <title>Add Manual Delete Flag</title>
+          <onActionProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:PLUS</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <conditionProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <onDBDelete>%aditoprj%/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>DSGVODELETEFLAG.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DSGVODELETEFLAGID.value</name>
+          <recordfield>DSGVODELETEFLAG.DSGVODELETEFLAGID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>REASON.value</name>
+          <recordfield>DSGVODELETEFLAG.REASON</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>DSGVODELETEFLAG.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>DSGVODELETEFLAG.CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>883f262d-bb32-48ca-a3b0-5256df85bf59</name>
+          <tableName>DSGVODELETEFLAG</tableName>
+          <primaryKey>DSGVODELETEFLAGID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DSGVODeleteFlag_entity/documentation.adoc b/entity/DSGVODeleteFlag_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..415fdca25d9a77d239b9ac97d03d6288321058d6
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/documentation.adoc
@@ -0,0 +1,9 @@
+= DSGVODeleteFlag_entity
+
+This Entity handles the Delete Flags for a Person and you can set it manually or delete the already set ones.
+If one Delete Flag is set, the Person Status will set to "mark to delete". 
+If all Delete Flags was removed, the Status of the Person will set to "active".
+
+
+
+
diff --git a/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7aca2ec20585e17c01b70bee2aa7e852b84e6a88
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.dsgvoReason());
\ No newline at end of file
diff --git a/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9601edb7847d4f03e9ac2b2b55e1af4ff2833455
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js
@@ -0,0 +1,15 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.util");
+import("system.entities");
+import("Sql_lib");
+
+new SqlBuilder().insertData("DSGVODELETEFLAG", ["DSGVODELETEFLAGID","REASON", "CONTACT_ID", "USER_NEW", "DATE_NEW"], null, [util.getNewUUID(), $KeywordRegistry.dsgvoReason$manuel(), vars.get("$param.ContactId_param"), vars.get("$sys.user"), vars.get("$sys.date")]);
+
+let config = entities.createConfigForUpdatingRows()
+.ignorePermissions(true)
+.entity("Person_entity")
+.fieldValues({"STATUS": $KeywordRegistry.contactStatus$markToDelete() })
+.uid(vars.get("$param.ContactId_param"));
+
+entities.updateRow(config);
\ No newline at end of file
diff --git a/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e63a5beb356861619d2729e0598b7ca8bc1651d
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.dsgvoReason(), vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js b/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7c168d2d17b472e51c40d06b642d103dad36a38
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("DSGVODELETEFLAG.CONTACT_ID", "$param.ContactId_param", SqlBuilder.EQUAL());
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js b/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6365c6f9fc7804381168a37c33b86a7240597f7
--- /dev/null
+++ b/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,19 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.entities");
+import("Sql_lib");
+
+let contactId = vars.get("$param.ContactId_param");
+
+if (parseInt(newSelect(["Count(*)"]).from("DSGVODELETEFLAG").where("DSGVODELETEFLAG.CONTACT_ID", contactId).cell()) == 1)
+{
+    let config = entities.createConfigForUpdatingRows()
+    .ignorePermissions(true)
+    .entity("Person_entity")
+    .fieldValues({
+        "STATUS": $KeywordRegistry.contactStatus$active()
+    })
+    .uid(contactId);
+    
+    entities.updateRow(config);
+}
\ No newline at end of file
diff --git a/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js b/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js
index e7ffc71bedc55beb9053abc8da900f809680228c..14f74060919a8c1a315722141e9c31f814003bc7 100644
--- a/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js
+++ b/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js
@@ -1,3 +1,4 @@
+import("KeywordRegistry_basic");
 import("system.logging");
 import("system.translate");
 import("system.vars");
@@ -19,10 +20,12 @@ var emailFilename = translate.text(reportType == "DSGVO_Disclosure_report" ? "Di
 var fullname = ContactUtils.getTitleByContactId(contactId);
 emailFilename = emailFilename + " " + fullname;
 
-dsgvoReport.content = reportData;
+dsgvoReport.content = reportData.substr(1);
 dsgvoReport.mimeType = MimeTypes.PDF();
 dsgvoReport.filename = emailFilename + ".pdf";
 
 attachmentArray[0] = dsgvoReport;
 
-EmailWritingUtils.sendReportAsMail(recipient, attachmentArray, "DSGVOReport", null, emailFilename, null, null);
+
+EmailWritingUtils.sendReportAsMail(recipient, attachmentArray, "DSGVOReport", null, emailFilename, null, null, 
+                                        $KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod
index be47ef0d4009d01d94464151a2e7ecf970b46d83..1e6d35b7292ed57e384ff29bf2687f5bf70387fd 100644
--- a/entity/DSGVO_entity/DSGVO_entity.aod
+++ b/entity/DSGVO_entity/DSGVO_entity.aod
@@ -52,6 +52,17 @@
       <name>ROW_ID</name>
       <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/row_id/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>bindata</name>
+      <title>File</title>
+      <contentType>FILE</contentType>
+      <mandatory v="true" />
+      <mandatoryProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js</mandatoryProcess>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js</displayValueProcess>
+    </entityField>
     <entityField>
       <name>STATUORITYSOURCE</name>
       <title>DataPrivacy Right</title>
diff --git a/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js b/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..82d715638aff20681723c714a0b94f32702ed2cc
--- /dev/null
+++ b/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js
@@ -0,0 +1,15 @@
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+import("system.db");
+
+var binMetadatas = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE");
+
+if (binMetadatas.length > 0)
+{
+    result.string(binMetadatas[0].filename);
+} 
+else 
+{
+    result.string("FILE MISSING");
+}
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js b/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ec1aa1eb03e216f66ff40491d918f9cfa6213da
--- /dev/null
+++ b/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js
@@ -0,0 +1,13 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+var res = "false";
+
+if (vars.get("$field.DSGVOTYPE") == $KeywordRegistry.dsgvoType$privacyNotice())
+{
+    res = "true";
+}
+    
+result.string(res);
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/bindata/stateProcess.js b/entity/DSGVO_entity/entityfields/bindata/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..51bae3fa772a47011ab6cf8eb7e6c6ceaaf39925
--- /dev/null
+++ b/entity/DSGVO_entity/entityfields/bindata/stateProcess.js
@@ -0,0 +1,10 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$field.DSGVOTYPE") == $KeywordRegistry.dsgvoType$privacyNotice())
+{
+    result.string("EDITABLE");
+}
+    
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/bindata/valueProcess.js b/entity/DSGVO_entity/entityfields/bindata/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a5737b0600a4fc027888b6a571c4fa94ba022bf
--- /dev/null
+++ b/entity/DSGVO_entity/entityfields/bindata/valueProcess.js
@@ -0,0 +1,18 @@
+import("system.translate");
+import("system.result");
+import("system.neon");
+import("Sql_lib");
+import("system.db");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    var binMetadatas = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE");
+    if (binMetadatas.length > 0)
+    {
+        // preset the field. This is to allow just editing the other fields without uploading a file (because this field is mandatory)
+        // if the user did not upload a file "FILE NOT CHANGED" will be still in the field in onDBUpdate and nothing has to be done there
+        // --> this is a marking that the field didn't change
+        result.string(translate.text("FILE NOT CHANGED"));
+    }
+}
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js b/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js
index 154dd846f477bee30e3d50c88b73a9f1be840acb..d5f013ed1b214e04593755cf0e405b91c1e84e6a 100644
--- a/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js
+++ b/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("DataPrivacy_lib");
 
 // TODO open View DSGVOPreviewAnonym_view mit Auswahl an Kategorien
-//DataPrivacyUtils.dsgvoMkDataAnonymous(vars.get("$field.CONTACT_ID"), vars.get("$field.ROW_ID"));
\ No newline at end of file
+// DataPrivacyUtils.dsgvoMkDataAnonymous(vars.get("$field.CONTACT_ID"), vars.get("$field.ROW_ID"));
\ No newline at end of file
diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
index 5197563de59cb12e5b47e19d0800de70288d720e..014592cb299052ba5248bbec35950c038e4e69fc 100644
--- a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
@@ -1,8 +1,29 @@
+import("Binary_lib");
+import("Document_lib");
 import("system.neon");
 import("system.db");
 import("Sql_lib");
 import("system.vars");
 
+var binMetadata = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE");
+var assignmentRowId = vars.get("$field.CONTACT_ID");
+
+// "FILE NOT CHANGED" is set in the value process of the field to indicate that the user didn't upload a new file
+if (vars.get("$field.bindata") != "FILE NOT CHANGED")
+{
+    let bindata = DocumentUtil.getBindataFromUpload(vars.get("$field.bindata"));
+    let filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.bindata"));
+    
+    if(bindata != '' && filename != '')
+    {
+        if (binMetadata.length == 1)
+        {
+            db.updateBinaryMetadata(binMetadata[0].id, "", binMetadata[0].filename, "", "", SqlUtils.getBinariesAlias());
+        }
+        db.insertBinary("CONTACT", "DOCUMENT", assignmentRowId, "", bindata, filename, "", "PRIVACY_NOTICE", SqlUtils.getBinariesAlias());
+    }
+}
+
 var columns = [
     "STATUORITYSOURCE",
     "PURPOSE",
diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index db44542e1140ab1217d412a752b85812417d5935..59a71017299588752f9f8091e7c54f78059ce7cc 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -68,19 +68,6 @@
       </onValueChangeTypes>
       <onValidation>%aditoprj%/entity/Document_entity/entityfields/bindata_upload/onValidation.js</onValidation>
     </entityField>
-    <entityActionGroup>
-      <name>Document_actions</name>
-      <children>
-        <entityActionField>
-          <name>downloadFilesAction</name>
-          <title>Download</title>
-          <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:DOWNLOAD</iconId>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityParameter>
       <name>AssignmentTable_param</name>
       <expose v="true" />
@@ -124,6 +111,7 @@
       <title>Main document</title>
       <contentType>BOOLEAN</contentType>
       <placeholderProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js</placeholderProcess>
+      <stateProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/valueProcess.js</valueProcess>
       <onValueChange>%aditoprj%/entity/Document_entity/entityfields/is_main_document/onValueChange.js</onValueChange>
       <onValueChangeTypes>
@@ -136,12 +124,6 @@
       <mandatory v="false" />
       <description>PARAMETER</description>
     </entityParameter>
-    <entityActionField>
-      <name>downloadSingleFileAction</name>
-      <title>Download</title>
-      <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/downloadsinglefileaction/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:DOWNLOAD</iconId>
-    </entityActionField>
     <entityProvider>
       <name>Documents</name>
       <documentation>%aditoprj%/entity/Document_entity/entityfields/documents/documentation.adoc</documentation>
@@ -376,6 +358,56 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityParameter>
+      <name>MSTTeamId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>assignmentRowID</name>
+      <valueProcess>%aditoprj%/entity/Document_entity/entityfields/assignmentrowid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionGroup>
+      <name>Document_actions</name>
+      <title>Document actions</title>
+      <children>
+        <entityActionField>
+          <name>openFileAction</name>
+          <title>${ACTION_DO_OPEN}</title>
+          <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <isSaveAction v="false" />
+          <iconId>VAADIN:FOLDER_OPEN</iconId>
+          <state>AUTO</state>
+          <stateProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>downloadFilesAction</name>
+          <title>Download</title>
+          <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:DOWNLOAD</iconId>
+          <state>EDITABLE</state>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityActionField>
+      <name>openSingleFileAction</name>
+      <title>${ACTION_DO_OPEN}</title>
+      <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js</onActionProcess>
+      <isSelectionAction v="false" />
+      <iconId>VAADIN:FOLDER_OPEN</iconId>
+      <state>AUTO</state>
+      <stateProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js</stateProcess>
+    </entityActionField>
+    <entityActionField>
+      <name>downloadSingleFileAction</name>
+      <title>Download</title>
+      <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/downloadsinglefileaction/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:DOWNLOAD</iconId>
+    </entityActionField>
     <entityActionGroup>
       <name>MSTeam</name>
       <title>MS Teams</title>
@@ -390,14 +422,6 @@
         </entityActionField>
       </children>
     </entityActionGroup>
-    <entityParameter>
-      <name>MSTTeamId_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityField>
-      <name>assignmentRowID</name>
-      <valueProcess>%aditoprj%/entity/Document_entity/entityfields/assignmentrowid/valueProcess.js</valueProcess>
-    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b33a4fd30ed0c36f55a21b834ff8580c7110ecb5
--- /dev/null
+++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("Document_lib");
+
+DocumentUtil.openSelectedDocument(vars.get("$param.AssignmentName_param"));
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d29ab3ca86a4675ae8d22a18bdad6bfd7b3c49f9
--- /dev/null
+++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.result");
+import("Document_lib");
+
+var openFileState;
+if(DocumentUtil.canOpenSelectedDocument())
+    openFileState = neon.COMPONENTSTATE_EDITABLE;
+else
+    openFileState = neon.COMPONENTSTATE_INVISIBLE;
+
+result.string(openFileState);
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/is_main_document/stateProcess.js b/entity/Document_entity/entityfields/is_main_document/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e938ad58641a89586b266f8c509d02aefe402237
--- /dev/null
+++ b/entity/Document_entity/entityfields/is_main_document/stateProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+if(vars.get("$field.KEYWORD") == 'PRIVACY_NOTICE')
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
+    
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/is_main_document/valueProcess.js b/entity/Document_entity/entityfields/is_main_document/valueProcess.js
index 044f5d99f80a775c390b772a5d8e1cf875c87479..e835769e69dd948edc744ace57110039ee884e0f 100644
--- a/entity/Document_entity/entityfields/is_main_document/valueProcess.js
+++ b/entity/Document_entity/entityfields/is_main_document/valueProcess.js
@@ -1,7 +1,11 @@
 import("system.vars");
 import("system.result");
 
-if(vars.get("$field.KEYWORD") == 'MAINDOCUMENT')
-    result.string("1");
-else
-    result.string("0");
\ No newline at end of file
+var res = "0"
+
+if(vars.get("$field.KEYWORD") == 'MAINDOCUMENT' || vars.get("$field.KEYWORD") == 'PRIVACY_NOTICE')
+{
+    res = "1";
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b33a4fd30ed0c36f55a21b834ff8580c7110ecb5
--- /dev/null
+++ b/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("Document_lib");
+
+DocumentUtil.openSelectedDocument(vars.get("$param.AssignmentName_param"));
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d29ab3ca86a4675ae8d22a18bdad6bfd7b3c49f9
--- /dev/null
+++ b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.result");
+import("Document_lib");
+
+var openFileState;
+if(DocumentUtil.canOpenSelectedDocument())
+    openFileState = neon.COMPONENTSTATE_EDITABLE;
+else
+    openFileState = neon.COMPONENTSTATE_INVISIBLE;
+
+result.string(openFileState);
\ No newline at end of file
diff --git a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..eb3318d1aad761ad8f944dd5596c80d20a8999b3
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>DuplicateOrganisation_entity</name>
+  <title>Duplicate</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <grantCreate v="false" />
+  <grantUpdate v="false" />
+  <grantDelete v="false" />
+  <initFilterProcess>%aditoprj%/entity/DuplicateOrganisation_entity/initFilterProcess.js</initFilterProcess>
+  <titlePlural>Duplicates</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <targetContextField>targetContext</targetContextField>
+      <targetIdField>CONTACTID</targetIdField>
+      <dependencies>
+        <entityDependency>
+          <name>a666bb24-2875-481a-879e-86b8e8517c1e</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>Duplicates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>CONTACTID</name>
+      <linkedContext>Organisation</linkedContext>
+    </entityField>
+    <entityField>
+      <name>ORGNAME</name>
+      <title>Name</title>
+      <linkedContext>Organisation</linkedContext>
+    </entityField>
+    <entityParameter>
+      <name>Id_param</name>
+      <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js</valueProcess>
+      <mandatory v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>Obj_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <description>Contains a name value object of all variables that can be used to scan for duplicates</description>
+    </entityParameter>
+    <entityActionGroup>
+      <name>filterActions</name>
+      <children>
+        <entityActionField>
+          <name>ignoreDuplicates</name>
+          <title>${IGNORE_DUPLICATE}</title>
+          <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:CLOSE</iconId>
+          <titleProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>mergeselectedintocurrent</name>
+          <title>Integrate selected into current contact</title>
+          <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>NEON:IMPORT</iconId>
+        </entityActionField>
+        <entityActionField>
+          <name>mergecurrentintoselected</name>
+          <title>Integrate current into selected contact</title>
+          <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>NEON:EXPORT</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>KeywordContactStates</consumer>
+    </entityField>
+    <entityField>
+      <name>CUSTOMERCODE</name>
+      <title>Customercode</title>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordContactStates</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>TYPE</name>
+      <title>Type</title>
+      <consumer>KeywordOrganisationTypes</consumer>
+    </entityField>
+    <entityField>
+      <name>STANDARD_EMAIL_COMMUNICATION</name>
+      <title>E-Mail</title>
+    </entityField>
+    <entityField>
+      <name>STANDARD_PHONE_COMMUNICATION</name>
+      <title>Phone</title>
+    </entityField>
+    <entityField>
+      <name>STANDARD_ADDRESS</name>
+      <title>Address</title>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordOrganisationTypes</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>targetContext</name>
+      <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DUPLICATE</name>
+      <title>Duplicate</title>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityField>
+      <name>PICTURE</name>
+      <title>Picture</title>
+      <contentType>IMAGE</contentType>
+      <displayValueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js</displayValueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <isReadOnly v="true" />
+      <fromClauseProcess>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CONTACTID.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGNAME.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGNAME.displayValue</name>
+          <recordfield>ORGANISATION.NAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CUSTOMERCODE.value</name>
+          <recordfield>ORGANISATION.CUSTOMERCODE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>CONTACT.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_ADDRESS.value</name>
+          <recordfield>ADDRESS.ADDRESS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.value</name>
+          <recordfield>ORGANISATION.KIND</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.displayValue</name>
+          <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DUPLICATE.value</name>
+          <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PICTURE.value</name>
+          <recordfield>ORGANISATION.PICTURE</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>49ea0faa-d04e-4d9d-b489-5a7b815e9e89</name>
+          <tableName>ORGANISATION</tableName>
+          <primaryKey>ORGANISATIONID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>523f6891-14ee-49ba-952d-7d5981e14b0c</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>6b73b998-a194-4fb6-8659-42eac09e20cc</name>
+          <tableName>ADDRESS</tableName>
+          <primaryKey>ADDRESSID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a070181a8e991188f1a7ff62ab87423364cdb5a6
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateIgnored("Organisation_entity", vars.get("$param.Id_param"), vars.get("$sys.selection"), parseInt(vars.get("$field.DUPLICATE")));
+neon.refreshAll(); // Update the rows, because UNRELATEDDUPLICATES wont trigger a refresh even with write entities
diff --git a/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c5ccfffeb0e7b5efc940eba237fbdc99ab9b603
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js
@@ -0,0 +1,9 @@
+import("system.translate");
+import("system.vars");
+import("system.result");
+
+result.string(
+    parseInt(vars.get("$field.DUPLICATE")) ?
+    translate.text("${IGNORE_DUPLICATE}") :
+    translate.text("${UNIGNORE_DUPLICATE}")
+);
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
similarity index 51%
rename from entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
rename to entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
index 29dab7b72c8898044cfabd79426552733f9f7dc4..b23396c01c1214f15be0e2bae435e1e9da91c702 100644
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
+++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
@@ -1,20 +1,29 @@
+import("system.translate");
+import("system.question");
 import("Employee_lib");
 import("system.vars");
 import("system.neon");
-import("DuplicateScanner_lib");
+import("DuplicateMerge_lib");
 
-let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
+if(vars.get("$sys.selection").length == 1)
+{
+let sourceContactId = vars.get("$param.Id_param");
 let targetContactId = vars.get("$sys.selection")[0];
 
 //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user.
-let mergeSuccess = DuplicateScannerUtils.mergeOrganisation(sourceContactId, targetContactId);
+let mergeSuccess = DuplicateMergeUtils.mergeOrganisation(sourceContactId, targetContactId);
 
 if(mergeSuccess)
 {
     let currentContactId = EmployeeUtils.getCurrentContactId();
     if(currentContactId == null)
         currentContactId = "";
-    DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation");
+    DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation");
     
     neon.openContext("Organisation", "OrganisationMain_view", [targetContactId], neon.OPERATINGSTATE_VIEW, null)
-}
\ No newline at end of file
+}
+}
+else
+{
+    question.showMessage(translate.text("Please select only one element"));
+}
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
similarity index 61%
rename from entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
rename to entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
index 5ac58579f1326724bf4e6340a751ee86b12850b4..ac1a9260b226c00b472e5222a97c0c4f8286bfad 100644
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
+++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
@@ -1,22 +1,31 @@
+import("system.translate");
+import("system.question");
 import("Employee_lib");
 import("system.vars");
 import("system.neon");
-import("DuplicateScanner_lib");
+import("DuplicateMerge_lib");
 
-let targetContactId = vars.get("$param.DuplicateCurrentContactId_param");
+if(vars.get("$sys.selection").length == 1)
+{
+let targetContactId = vars.get("$param.Id_param");
 let sourceContactId = vars.get("$sys.selection")[0];
 
 //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user.
-let mergeSuccess = DuplicateScannerUtils.mergeOrganisation(sourceContactId, targetContactId);
+let mergeSuccess = DuplicateMergeUtils.mergeOrganisation(sourceContactId, targetContactId);
 
 if(mergeSuccess)
 {
     let currentContactId = EmployeeUtils.getCurrentContactId();
     if(currentContactId == null)
         currentContactId = "";
-    DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation");
+    DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation");
     //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both,
     //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted 
     //and does not exist any more which results in an exception
     neon.refresh();
-}
\ No newline at end of file
+}
+}
+else
+{
+    question.showMessage(translate.text("Please select only one element"));
+}
diff --git a/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bffe18eb097c82b9fa662880ad23d5d1ee32f7ff
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+
+var jsonObj = JSON.parse(vars.get("$param.Obj_param"));
+result.string(jsonObj["CONTACTID"]);
diff --git a/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..43e8d27c6a6cdd11f092f8b404a97dc237577a38
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.contactStatus());
diff --git a/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f418ef99a76f73e9ce0e06b98eb299c5431d63c
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.organisationType());
diff --git a/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa69acba15ba5aa0635f9e0a4a391a04c5819c2f
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+
+if (vars.get("$field.PICTURE"))
+{
+    result.string(vars.get("$field.PICTURE"));
+}
+else
+{
+    result.string("TEXT:" + vars.getString("$field.ORGNAME.displayValue").trim());
+}
diff --git a/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..84e4b61c2566393178456e74db7e36eb6abdaf80
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getContextName("Organisation"));
diff --git a/entity/DuplicateOrganisation_entity/initFilterProcess.js b/entity/DuplicateOrganisation_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..92797e84dbb193011bf821bb4ecc828681a2d414
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/initFilterProcess.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("system.result");
+
+result.string(JSON.stringify({
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "DUPLICATE",
+        operator: "EQUAL",
+        contenttype: "BOOLEAN",
+        key: "1",
+        value: translate.text("Yes")
+    }]
+}));
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e53fabe5b3f46c2048bdb6500df6f37ca9300d61
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("Sql_lib");
+import("DuplicateScanner_lib");
+import("system.result");
+
+var duplicateIds = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Organisation_entity", JSON.parse(vars.get("$param.Obj_param")));
+duplicateIds.push("-"); // workaround empty arrays
+result.string(newWhere("CONTACT.CONTACTID", duplicateIds, SqlBuilder.IN()).toString());
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5412501fe024b394c16299840fb75b9997368d1f
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,14 @@
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+var unrelatedCondition = newWhere("UNRELATEDDUPLICATES.DUPLICATETYPE", "Organisation_entity")
+    .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", vars.get("$param.Id_param"))
+    .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID = CONTACT.CONTACTID");
+
+result.string(
+    "ORGANISATION " +
+    "join CONTACT on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID) " +
+    "left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID) " +
+    "left join UNRELATEDDUPLICATES on " + unrelatedCondition.toString()
+);
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f7063b2ac8e637e6618ccc1ff745653daf0b339
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("Sql_lib");
+
+var statement = SqlBuilder.caseStatement()
+    .when("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID is not null")
+    .thenString("0").elseString("1");
+result.string(statement);
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..5827c59c416c332ba9281a60756f919fcb75c0a2
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Communication_lib");
+
+result.string(CommUtil.getStandardSubSqlMail());
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f438c2535b21180c5ad03637de90f577f2c736e
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Communication_lib");
+
+result.string(CommUtil.getStandardSubSqlPhone());
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..b63b2d57742bc29e8f35acd8bae539ec0a560c9c
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contactStatus(), "CONTACT.STATUS");
+result.string(sql);
diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ab8eb06526a4f6be6502246408fe7891c4dc46d
--- /dev/null
+++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.organisationType(), "ORGANISATION.KIND");
+result.string(sql);
diff --git a/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2d5dd73d048c99ae42a4b422275198df818f39d1
--- /dev/null
+++ b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>DuplicatePerson_entity</name>
+  <title>Duplicate</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <grantCreate v="false" />
+  <grantUpdate v="false" />
+  <grantDelete v="false" />
+  <initFilterProcess>%aditoprj%/entity/DuplicatePerson_entity/initFilterProcess.js</initFilterProcess>
+  <titlePlural>Duplicates</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <targetContextField>parentContext</targetContextField>
+      <targetIdField>CONTACTID</targetIdField>
+      <dependencies>
+        <entityDependency>
+          <name>7f8210c4-644f-4c45-a571-e232582f8d34</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Duplicates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>fd3253c7-f3f8-483f-8f49-6192f4e75979</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Duplicates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>Obj_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <description>Contains a name value object of all variables that can be used to scan for duplicates</description>
+    </entityParameter>
+    <entityActionGroup>
+      <name>filterActions</name>
+      <children>
+        <entityActionField>
+          <name>ignoreDuplicates</name>
+          <title>${IGNORE_DUPLICATE}</title>
+          <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:CLOSE</iconId>
+          <titleProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>mergeselectedintocurrent</name>
+          <title>Integrate selected into current contact</title>
+          <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>NEON:IMPORT</iconId>
+        </entityActionField>
+        <entityActionField>
+          <name>mergecurrentintoselected</name>
+          <title>Integrate current into selected contact</title>
+          <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>NEON:EXPORT</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityField>
+      <name>CONTACTID</name>
+      <linkedContext>Person</linkedContext>
+    </entityField>
+    <entityParameter>
+      <name>Id_param</name>
+      <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js</valueProcess>
+      <mandatory v="true" />
+    </entityParameter>
+    <entityField>
+      <name>FIRSTNAME</name>
+      <title>Firstname</title>
+    </entityField>
+    <entityField>
+      <name>LASTNAME</name>
+      <title>Lastname</title>
+      <linkedContext>Person</linkedContext>
+    </entityField>
+    <entityField>
+      <name>MIDDLENAME</name>
+      <title>Middlename</title>
+    </entityField>
+    <entityField>
+      <name>LETTERSALUTATION</name>
+      <title>Salutation</title>
+    </entityField>
+    <entityField>
+      <name>TITLE</name>
+      <title>Title</title>
+    </entityField>
+    <entityField>
+      <name>PICTURE</name>
+      <title>Picture</title>
+      <contentType>IMAGE</contentType>
+      <displayValueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>STANDARD_EMAIL_COMMUNICATION</name>
+      <title>E-Mail</title>
+    </entityField>
+    <entityField>
+      <name>STANDARD_PHONE_COMMUNICATION</name>
+      <title>Phone</title>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ID</name>
+      <title>Company</title>
+      <consumer>Organisations</consumer>
+      <linkedContext>Organisation</linkedContext>
+    </entityField>
+    <entityConsumer>
+      <name>Organisations</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>KeywordContactStates</consumer>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordContactStates</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>STANDARD_ADDRESS</name>
+      <title>Address</title>
+    </entityField>
+    <entityField>
+      <name>parentContext</name>
+      <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DUPLICATE</name>
+      <title>Duplicate</title>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <isReadOnly v="true" />
+      <fromClauseProcess>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CONTACTID.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MIDDLENAME.value</name>
+          <recordfield>PERSON.MIDDLENAME</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LASTNAME.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>FIRSTNAME.value</name>
+          <recordfield>PERSON.FIRSTNAME</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LETTERSALUTATION.value</name>
+          <recordfield>PERSON.SALUTATION</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LASTNAME.displayValue</name>
+          <recordfield>PERSON.LASTNAME</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TITLE.value</name>
+          <recordfield>PERSON.TITLE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PICTURE.value</name>
+          <recordfield>PERSON.PICTURE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_ID.value</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>CONTACT.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_ADDRESS.value</name>
+          <recordfield>ADDRESS.ADDRESS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_ID.displayValue</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DUPLICATE.value</name>
+          <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>93f86a28-8c69-491e-8f62-79f5840e23a5</name>
+          <tableName>PERSON</tableName>
+          <primaryKey>PERSONID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>c989f19d-d211-4f54-9ea5-ddf16e5a13a0</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>7ff69154-f1ff-4e33-8cd4-5a88e3b18269</name>
+          <tableName>ADDRESS</tableName>
+          <primaryKey>ADDRESSID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..69c03d7bc979275e8276e8bc9700787e0e513f13
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateIgnored("Person_entity", vars.get("$param.Id_param"), vars.get("$sys.selection"), parseInt(vars.get("$field.DUPLICATE")));
+neon.refreshAll(); // Update the rows, because UNRELATEDDUPLICATES wont trigger a refresh even with write entities
diff --git a/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c5ccfffeb0e7b5efc940eba237fbdc99ab9b603
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js
@@ -0,0 +1,9 @@
+import("system.translate");
+import("system.vars");
+import("system.result");
+
+result.string(
+    parseInt(vars.get("$field.DUPLICATE")) ?
+    translate.text("${IGNORE_DUPLICATE}") :
+    translate.text("${UNIGNORE_DUPLICATE}")
+);
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
similarity index 60%
rename from entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
rename to entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
index d5f864db525910dd0635ee2ab84279e3346599b6..8e96e7fcea38ebc093da5fceaaa9ad34a9a5c7a9 100644
--- a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
+++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js
@@ -1,14 +1,18 @@
+import("system.translate");
+import("system.question");
 import("system.tools");
 import("Employee_lib");
 import("system.vars");
 import("system.neon");
-import("DuplicateScanner_lib");
+import("DuplicateMerge_lib");
 
-var sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
+if(vars.get("$sys.selection").length == 1)
+{
+var sourceContactId = vars.get("$param.Id_param");
 var targetContactId = vars.get("$sys.selection")[0];
 
 //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user.
-var mergeSuccess = DuplicateScannerUtils.mergePerson(sourceContactId, targetContactId);
+var mergeSuccess = DuplicateMergeUtils.mergePerson(sourceContactId, targetContactId);
 
 if(mergeSuccess)
 {
@@ -21,7 +25,12 @@ if(mergeSuccess)
     var currentContactId = EmployeeUtils.getCurrentContactId();
     if(currentContactId == null)
         currentContactId = "";
-    DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
+    DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
 
     neon.openContext("Person", "PersonMain_view", [targetContactId], neon.OPERATINGSTATE_VIEW, null)
-}
\ No newline at end of file
+}
+}
+else
+{
+    question.showMessage(translate.text("Please select only one element"));
+}
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
similarity index 70%
rename from entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
rename to entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
index 6a9f2ac39a7238d7dd5fbaec53e41c57eabec241..30d97b1c8023db93074e3cee7b3f30487e920aad 100644
--- a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
+++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js
@@ -1,3 +1,5 @@
+import("system.translate");
+import("system.question");
 import("system.tools");
 import("system.db");
 import("Employee_lib");
@@ -5,14 +7,16 @@ import("KeywordRegistry_basic");
 import("ActivityTask_lib");
 import("system.vars");
 import("system.neon");
-import("DuplicateScanner_lib");
+import("DuplicateMerge_lib");
 
-var targetContactId = vars.get("$param.DuplicateCurrentContactId_param");
+if(vars.get("$sys.selection").length == 1)
+{
+var targetContactId = vars.get("$param.Id_param");
 var sourceContactIdArray = vars.get("$sys.selection");
 var sourceContactId = sourceContactIdArray[0];
 
 //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user.
-var mergeSuccess = DuplicateScannerUtils.mergePerson(sourceContactId, targetContactId);
+var mergeSuccess = DuplicateMergeUtils.mergePerson(sourceContactId, targetContactId);
 
 if(mergeSuccess)
 {
@@ -25,9 +29,14 @@ if(mergeSuccess)
     var currentContactId = EmployeeUtils.getCurrentContactId();
     if(currentContactId == null)
         currentContactId = "";
-    DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
+    DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
     //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both,
     //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted 
     //and does not exist any more which results in an exception
     neon.refresh();
-}
\ No newline at end of file
+}
+}
+else
+{
+    question.showMessage(translate.text("Please select only one element"));
+}
diff --git a/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bffe18eb097c82b9fa662880ad23d5d1ee32f7ff
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+
+var jsonObj = JSON.parse(vars.get("$param.Obj_param"));
+result.string(jsonObj["CONTACTID"]);
diff --git a/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..43e8d27c6a6cdd11f092f8b404a97dc237577a38
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.contactStatus());
diff --git a/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7baa76a6be6f585b2829869961b69b1ca4a5e15
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getContextName("Person"));
diff --git a/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js b/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e09fa2ae490ce0756966fd490af0150cc05e726f
--- /dev/null
+++ b/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+
+if (vars.get("$field.PICTURE"))
+{
+    result.string(vars.get("$field.PICTURE"));
+}
+else
+{
+    result.string("TEXT:" + (vars.getString("$field.FIRSTNAME") + " " + vars.getString("$field.LASTNAME")).trim());
+}
diff --git a/entity/DuplicatePerson_entity/initFilterProcess.js b/entity/DuplicatePerson_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..92797e84dbb193011bf821bb4ecc828681a2d414
--- /dev/null
+++ b/entity/DuplicatePerson_entity/initFilterProcess.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("system.result");
+
+result.string(JSON.stringify({
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "DUPLICATE",
+        operator: "EQUAL",
+        contenttype: "BOOLEAN",
+        key: "1",
+        value: translate.text("Yes")
+    }]
+}));
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js b/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..658b1af578f9b7fb2d68728d73cef7393c3a7740
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("Sql_lib");
+import("DuplicateScanner_lib");
+import("system.result");
+
+var duplicateIds = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Person_entity", JSON.parse(vars.get("$param.Obj_param")));
+duplicateIds.push("-"); // workaround empty arrays
+result.string(newWhere("CONTACT.CONTACTID", duplicateIds, SqlBuilder.IN()).toString());
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js b/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2205f0c5af7cbe0439abdf3017bae42b6e9be2cd
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,14 @@
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+var unrelatedCondition = newWhere("UNRELATEDDUPLICATES.DUPLICATETYPE", "Person_entity")
+    .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", vars.get("$param.Id_param"))
+    .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID = CONTACT.CONTACTID");
+
+result.string(
+    "PERSON " +
+    "join CONTACT on (PERSON.PERSONID = CONTACT.PERSON_ID) " +
+    "left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID) " +
+    "left join UNRELATEDDUPLICATES on " + unrelatedCondition.toString()
+);
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f7063b2ac8e637e6618ccc1ff745653daf0b339
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("Sql_lib");
+
+var statement = SqlBuilder.caseStatement()
+    .when("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID is not null")
+    .thenString("0").elseString("1");
+result.string(statement);
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..64f71be666b2bbb3421d182e2fe8b25d989a3316
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("Sql_lib");
+import("system.result");
+
+result.string(newSelect("ORGANISATION.NAME").from("ORGANISATION")
+    .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID").toString());
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..e37273248e57bcb47a83af87693aa9cca2ed5636
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("c.CONTACTID").from("CONTACT as c")
+    .where("c.ORGANISATION_ID = CONTACT.ORGANISATION_ID")
+    .and("c.PERSON_ID is null").toString());
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..5827c59c416c332ba9281a60756f919fcb75c0a2
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Communication_lib");
+
+result.string(CommUtil.getStandardSubSqlMail());
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f438c2535b21180c5ad03637de90f577f2c736e
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Communication_lib");
+
+result.string(CommUtil.getStandardSubSqlPhone());
diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..50433a35e5f298cf550485a4d9ea33ac405a6ebd
--- /dev/null
+++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contactStatus(), "CONTACT.STATUS"));
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod b/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod
deleted file mode 100644
index b336a59f809d6d5834741fc16f8a6034815597b2..0000000000000000000000000000000000000000
--- a/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
-  <name>DuplicateScannerResultFieldConfig_entity</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <recordContainer>recordContainer</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-    <entityField>
-      <name>ENTITY_FIELD_NAME</name>
-      <title>Entity field name</title>
-    </entityField>
-    <entityField>
-      <name>DATE_EDIT</name>
-      <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>DATE_NEW</name>
-      <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>USER_NEW</name>
-      <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>USER_EDIT</name>
-      <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js</valueProcess>
-    </entityField>
-    <entityParameter>
-      <name>DuplicateScannerId_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-    </entityParameter>
-    <entityProvider>
-      <name>ScannerResultFieldConfigProvider</name>
-      <dependencies>
-        <entityDependency>
-          <name>119b48a5-ce78-4169-bd31-76e524cece99</name>
-          <entityName>DuplicateScanner_entity</entityName>
-          <fieldName>ScannerResultFieldsConfig_Consumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-    </entityProvider>
-    <entityField>
-      <name>DUPLICATESCANNER_ID</name>
-      <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js</valueProcess>
-    </entityField>
-    <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
-    </entityProvider>
-  </entityFields>
-  <recordContainers>
-    <dbRecordContainer>
-      <name>recordContainer</name>
-      <conditionProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js</conditionProcess>
-      <alias>Data_alias</alias>
-      <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>DATE_EDIT.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_EDIT</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DATE_NEW.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_NEW</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>ENTITY_FIELD_NAME.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ENTITY_FIELD_NAME</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>UID.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>USER_EDIT.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_EDIT</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>USER_NEW.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_NEW</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DUPLICATESCANNER_ID.value</name>
-          <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID</recordfield>
-        </dbRecordFieldMapping>
-      </recordFieldMappings>
-      <linkInformation>
-        <linkInformation>
-          <name>f7126f94-9e4c-46a0-8dc9-9e52fda1c7c0</name>
-          <tableName>DUPLICATESCANNERRESULTFIELDCONFIG</tableName>
-          <primaryKey>ID</primaryKey>
-          <isUIDTable v="false" />
-          <readonly v="false" />
-        </linkInformation>
-      </linkInformation>
-    </dbRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js
deleted file mode 100644
index b8c682ad670116ff553d3774001f92eeec9478ce..0000000000000000000000000000000000000000
--- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.result");
-import("system.vars");
-
-if(vars.get("$this.value") == null || vars.get("$this.value") == "")
-{
-    result.string(vars.get("$param.DuplicateScannerId_param"));
-}
\ No newline at end of file
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js
deleted file mode 100644
index b9bff609c91222abb6c3b0292492600907585487..0000000000000000000000000000000000000000
--- a/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-
-if (vars.get("$param.DuplicateScannerId_param"))
-    result.string(newWhere("DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID", "$param.DuplicateScannerId_param").toString());
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
index 34fb0577dfe0c9ee42cc2f58458267359bd8f094..220ca8da86b7ff352ba94fa259602a9f004e9585 100644
--- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
+++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
@@ -33,16 +33,6 @@
       <contentType>BOOLEAN</contentType>
       <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/external_service_usage_allowed/valueProcess.js</valueProcess>
     </entityField>
-    <entityActionGroup>
-      <name>TestActionGroup</name>
-      <children>
-        <entityActionField>
-          <name>TestDuplicateScanner</name>
-          <title>Test DuplicateSearch</title>
-          <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js</onActionProcess>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityField>
       <name>USER_NEW</name>
       <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/user_new/valueProcess.js</valueProcess>
@@ -71,40 +61,36 @@
       <state>AUTO</state>
       <stateProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scan_pattern/stateProcess.js</stateProcess>
     </entityField>
-    <entityConsumer>
-      <name>ScannerResultFieldsConfig_Consumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicateScannerResultFieldConfig_entity</entityName>
-        <fieldName>ScannerResultFieldConfigProvider</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>DuplicateScannerId_param</name>
-          <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
     <entityActionGroup>
-      <name>RunActionGroup</name>
-      <documentation>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc</documentation>
+      <name>FilterActions</name>
       <children>
         <entityActionField>
-          <name>RebuildPersonDuplicatesCache</name>
-          <title>Rebuild Person duplicates cache</title>
-          <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js</onActionProcess>
+          <name>rebuild</name>
+          <title>Rebuild selected entries</title>
+          <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:CALC</iconId>
+          <tooltip>Rebuild all duplicates from the selected scanners</tooltip>
         </entityActionField>
         <entityActionField>
-          <name>RebuildOrganisationDuplicatesCache</name>
-          <title>Rebuild Organisation duplicates cache</title>
-          <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js</onActionProcess>
+          <name>viewDuplicates</name>
+          <title>View duplicates</title>
+          <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:TABLE</iconId>
+          <tooltip>View all duplicates from this scanner</tooltip>
         </entityActionField>
       </children>
     </entityActionGroup>
-    <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
-    </entityProvider>
+    <entityField>
+      <name>DUPLICATECOUNT</name>
+      <title>Count</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -154,6 +140,11 @@
           <name>SCAN_PATTERN.value</name>
           <recordfield>DUPLICATESCANNER.SCAN_PATTERN</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DUPLICATECOUNT.value</name>
+          <expression>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc6ae65d2d318b7ba951ae069442ed54db022857
--- /dev/null
+++ b/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js
@@ -0,0 +1,34 @@
+import("system.process");
+import("system.logging");
+import("system.entities");
+import("system.vars");
+import("DuplicateScanner_lib");
+
+var selectedIds = vars.get("$sys.selection");
+var loadConfig = entities.createConfigForLoadingRows()
+    .entity("DuplicateScanner_entity")
+    .uids(selectedIds)
+    .fields(["FILTER_NAME", "ENTITY_TO_SCAN_NAME", "ID_FIELD_NAME", "SCAN_PATTERN"]);
+var selectedEntries = entities.getRows(loadConfig);
+logging.log("Rebuilding " + selectedEntries.length + " entries");
+
+selectedEntries.forEach(function(currEntry)
+{
+    var filterName = currEntry["FILTER_NAME"];
+    var targetEntity = currEntry["ENTITY_TO_SCAN_NAME"];
+    var targetIdField = currEntry["ID_FIELD_NAME"];
+    var filter = JSON.parse(currEntry["SCAN_PATTERN"]);
+    
+    var startConfig = process.createStartAsyncConfig()
+    .setName("rebuildDuplicates_serverProcess")
+    .setShowErrorDialog(true)
+    .setLocalVariables({
+        filterName: filterName,
+        targetEntity: targetEntity,
+        targetIdField: targetIdField,
+        filter: JSON.stringify(filter.filter)
+    })
+    .setUser(vars.get("$sys.user"))
+    .setTimerType(process.TIMERTYPE_SERVER);
+    process.startAsync(startConfig);
+});
diff --git a/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..064e1f6c17fd9f84dc46723d329baf5a181ddc6d
--- /dev/null
+++ b/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js
@@ -0,0 +1,35 @@
+import("system.translate");
+import("system.question");
+import("system.vars");
+import("system.neon");
+import("system.entities");
+import("Context_lib");
+
+if(vars.get("$sys.selection").length == 1)
+{
+    var config = entities.createConfigForLoadingRows()
+        .entity("DuplicateScanner_entity")
+        .uid(vars.get("$sys.selection")[0])
+        .fields(["ENTITY_TO_SCAN_NAME"]);
+    var scanner = entities.getRow(config);
+    var contextId = ContextUtils.getContextName(ContextUtils.getContextId(scanner["ENTITY_TO_SCAN_NAME"]));
+
+    neon.openContext(contextId, null, null, neon.OPERATINGSTATE_SEARCH, {
+        FilterPreSet_param: JSON.stringify({
+            type: "group",
+            operator: "AND",
+            childs: [{
+                type: "row",
+                name: "#EXTENSION.Duplicates_filter.Duplicates_filter#NUMBER",
+                operator: "GREATER",
+                value: "All Duplicates",
+                key: "0",
+                contenttype: "NUMBER"
+            }]
+        })
+    });
+}
+else
+{
+    question.showMessage(translate.text("Please select only one element"));
+}
diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js
deleted file mode 100644
index e391b4c1938da96eddca596f8fb2211dd3d681ab..0000000000000000000000000000000000000000
--- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import("system.logging");
-import("system.logging");
-import("DuplicateScanner_lib");
-
-var filterName = "OrganisationDuplicates";
-var targetEntity = "Organisation_entity";
-var recordBlockSize = DuplicateScannerUtils.getBlockSize();
-
-logging.log(filterName + ": Delete duplicates -> ");
-DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-
-logging.log(filterName + ": Recalculate duplicates -> ");
-DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
-
-logging.log(filterName + ": Refresh unrelated duplicates -> ");
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-logging.log(filterName + ": Done rebuilding ");
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js
deleted file mode 100644
index cad8736382338846edff77ef164f85488513731d..0000000000000000000000000000000000000000
--- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import("system.project");
-import("system.logging");
-import("DuplicateScanner_lib");
-
-var filterName = "PersonDuplicates";
-var targetEntity = "Person_entity";
-var recordBlockSize = DuplicateScannerUtils.getBlockSize();
-
-logging.log(filterName + ": Delete duplicates -> ");
-DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-
-logging.log(filterName + ": Recalculate duplicates -> ");
-DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
-
-logging.log(filterName + ": Refresh unrelated duplicates -> ");
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-logging.log(filterName + ": Done rebuilding ");
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc b/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc
deleted file mode 100644
index f998dfcc78c6497f121cd16b294c8d01e6e1c1c7..0000000000000000000000000000000000000000
--- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc
+++ /dev/null
@@ -1 +0,0 @@
-Since duplicate caching is disabled there is no need  to show this action group within views at the moment.
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js
deleted file mode 100644
index af7cd56a2472c2305bf914b22fc59c89a7ba03a8..0000000000000000000000000000000000000000
--- a/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js
+++ /dev/null
@@ -1,432 +0,0 @@
-import("system.process");
-import("KeywordRegistry_basic");
-import("system.db");
-import("ActivityTask_lib");
-import("Employee_lib");
-import("system.util");
-import("system.notification");
-import("system.notificationtypes");
-import("system.entities");
-import("system.project");
-import("system.indexsearch");
-import("system.question");
-import("system.logging");
-import("DuplicateScanner_lib");
-import("JditoFilter_lib");
-
-//let testFields = [];
-//let filters = DuplicateScannerUtils.loadFilters("PersonDuplicates", "Person_entity")
-//logging.log("filters -> " + filters);
-//
-//for (let i = 0; i < filters.length; i++) 
-//{
-//    logging.log("filters[i] -> " + filters[i]);
-//    let filter = JSON.parse(filters[i][0]).filter;
-//    let fields = JditoFilterUtils.getFilterFields(filter.childs);
-//    testFields = testFields.concat(fields);
-//}
-//logging.log("testFields -> " + testFields);
-
-
-//##############################Test Duplicate Scan######################################################
-
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//var resultFieldsIdFieldName = "CONTACTID";
-//
-//var tmpFieldsInFilterRay = ["CONTACTID", "FIRSTNAME", "LASTNAME", "GENDER"];
-//var queryPersonContactIds = "select CONTACTID, FIRSTNAME, LASTNAME, GENDER from CONTACT"
-//                            + " join PERSON on PERSONID = PERSON_ID";
-//
-//
-//var filterFieldValueRays = [["CONTACTID", "29271db0-4253-46c9-b7c2-5e25376b9d19"], ["FIRSTNAME", "Narkus"], ["LASTNAME", "Bltinger"], ["GENDER", "m"]];
-//
-////DuplicateScannerUtils.ScanForDuplicatesIndex = function(pFilterName, pTargetEntity, pFilterFieldValueRays,
-////pTargetEntityResultFields, pRecordIdFieldToIgnore, pRecordIdValueToIgnore)
-//
-///* 
-// * 
-// */
-//
-//
-//
-//let duplicateFieldsConfig = DuplicateScannerUtils.LoadDuplicateIndexFieldsConfiguration(filterName, targetEntity);
-//
-//let querySelectFields = "";
-//for (let i = 0; i < duplicateFieldsConfig.length; i++) 
-//{
-//    querySelectFields += duplicateFieldsConfig[i][0];
-//    
-//    if(i < duplicateFieldsConfig.length)
-//        querySelectFields += ", ";
-//}
-//
-//let queryPersonFieldData = "select " + querySelectFields + " from CONTACT"
-//                            + " join PERSON on PERSONID = PERSON_ID";
-//
-//DuplicateScannerUtils.GetEntityFieldNameValueMap(duplicateFieldsConfig);
-//
-//DuplicateScannerUtils.ScanForDuplicatesIndex(filterName, targetEntity, 
-//filterFieldValueRays, [], resultFieldsIdFieldName, "29271db0-4253-46c9-b7c2-5e25376b9d19");
-
-
-//##############################ANs Beispiel######################################################
-
-
-//logging.log("TEST INDEX API with Entities");
-//logging.log(indexsearch.lookupIndexField("Person_entity", "FIRSTNAME"));
-//logging.log(indexsearch.lookupIndexField("Person_entity", "FIRSTNAME.value"));
-//logging.log(indexsearch.lookupIndexField("Person_entity", "PersAddresses.CITY"));
-//logging.log(indexsearch.lookupIndexField("Person_entity", "PersAddresses.CITY.value"));
-//logging.log(indexsearch.lookupIndexField(null, "Person_entity.FIRSTNAME.value"));
-//logging.log(indexsearch.lookupIndexField(null, "Person_entity.PersAddresses.CITY.value"));
-//var json = '{"entity":"Person_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"FIRSTNAME","operator":"STARTSWITH","value":"asd","key":"","contenttype":"TEXT"},{"type":"group","operator":"OR","childs":[{"type":"row","name":"LASTNAME","operator":"STARTSWITH","value":"L","key":"","contenttype":"TEXT"}]}]}}';
-//logging.log(indexsearch.buildQueryFromSearchCondition(json));
-//
-//var t1 = indexsearch.createTerm("lisa").setEntityField("Person_entity.FIRSTNAME");
-//var t2 = indexsearch.createTerm("sommer").setEntityField("Person_entity.LASTNAME");
-//var t3 = indexsearch.createWildcardTerm("L").setEntityField("Person_entity.PersAddresses.CITY");
-//
-//var patternConf = indexsearch.createPatternConfig().or(t1).or(t2).or(t3);
-//var pattern = indexsearch.buildPatternString(patternConf);
-//logging.log(pattern); 
-//
-//var query = indexsearch.createIndexQuery()
-//.setPattern(pattern)
-//.setEntities("Person_entity")
-////.addResultIndexFields(indexsearch.FIELD_ID)
-//.addResultFields("Person_entity.FIRSTNAME")
-//.addSearchFields("Person_entity.FIRSTNAME", "Person_entity.LASTNAME");
-//
-//var res = indexsearch.searchIndex(query);
-//logging.log("" + res);
-
-
-
-//######################################Demosuche nach Datensatz##############################################
-
-
-
-
-//
-//let indexQuery = indexsearch.createIndexQuery()
-//                            .setPattern("(+(-contactid_value:(29271db0-4253-46c9-b7c2-5e25376b9d19)) +gender_value:m*)")
-//                            .setEntities(["Person_entity"])
-//                            .addResultFields("Person_entity.FIRSTNAME")
-//                            .setRows(50);
-//
-//
-//let filterTerm1 = indexsearch.createTerm("Barkus")
-//                            .setIndexField("firstname_value")
-//                            .setFuzzySearchFactor(0);
-////let filterTerm2 = indexsearch.createTerm("Altinger")
-////                            .setIndexField("lastname_value")
-////                            .setFuzzySearchFactor(0);
-//
-//let filterPatternConfig = indexsearch.createPatternConfig().and(filterTerm1);
-//
-//let filterPatternString = indexsearch.buildPatternString(filterPatternConfig);
-//logging.log("Hauptsuche filterPatternString -> " + filterPatternString);
-//indexQuery = indexQuery.addFilter(filterPatternString);
-//
-//let searchResult = indexsearch.searchIndex(indexQuery);
-//logging.log("searchResult -> " + searchResult);
-//
-//logging.log("searchResults hits length -> " + searchResult[indexsearch.HITS].length);
-//
-//for (let i = 0; i < searchResult[indexsearch.HITS].length; i++) 
-//{
-//    logging.log("Treffer Nr -> " + i);
-//    //searchResults hits 0 -> {#ADITO_SEARCH_ID=1868bd3a-05af-4b7f-a633-e3aec50ac45c, _index_group_=Person, #ADITO_SEARCH_TYPE=Person, firstname_value=Peter, _local_id_=1868bd3a-05af-4b7f-a633-e3aec50ac45c}
-//    let localId = searchResult[indexsearch.HITS][i]["_local_id_"];
-//    let firstname = searchResult[indexsearch.HITS][i]["firstname_value"];
-//    let indexGroup = searchResult[indexsearch.HITS][i]["_index_group_"];
-//    logging.log("localId -> " + localId);
-//    logging.log("firstname -> " + firstname);
-//    logging.log("indexGroup -> " + indexGroup);
-//}
-
-
-
-
-
-//####################################################################################
-
-
-//
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//var resultFieldsIdFieldName = "CONTACTID";
-//var queryPersonContactIds = "select CONTACTID, FIRSTNAME, LASTNAME, GENDER from CONTACT"
-//                            + " join PERSON on PERSONID = PERSON_ID";
-//var tmpFieldsInFilterRay = ["CONTACTID", "FIRSTNAME", "LASTNAME", "GENDER"];
-//
-//logging.log("Löschen von PERSON Dubletten -> ");
-//DuplicateScannerUtils.deleteClustersByTargetEntity("Person_entity");
-//
-//logging.log("Neu berechnen von PERSON Dubletten -> ");
-//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonContactIds,
-//tmpFieldsInFilterRay, resultFieldsIdFieldName);
-//
-//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-//##############################################################################
-
-//filterName = "OrganisationDuplicates";
-//targetEntity = "Organisation_entity";
-//resultFieldsIdFieldName = "CONTACTID";
-//queryPersonContactIds = "select CONTACTID, ORGANISATION.NAME from ORGANISATION"
-//                            + " join CONTACT on CONTACT.CONTACTID = ORGANISATION.ORGANISATIONID"
-//                            + " where CONTACTID != '0'";
-//tmpFieldsInFilterRay = ["CONTACTID", "NAME"];
-//
-//
-//logging.log("Löschen von ORGANISATION Dubletten -> ");
-//DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity)
-//
-//logging.log("Neu berechnen von ORGANISATION Dubletten -> ");
-//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonContactIds,
-//tmpFieldsInFilterRay, resultFieldsIdFieldName);
-//
-//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-
-//####################################Rebuild person duplicates##########################################
-
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//
-//let duplicateFieldsConfig = DuplicateScannerUtils.LoadIndexFieldsConfiguration(filterName, targetEntity);
-//let resultFields = DuplicateScannerUtils.getResultFields(filterName, targetEntity);
-//
-//logging.log("duplicateFieldsConfig -> " + duplicateFieldsConfig);
-//logging.log("resultFields -> " + resultFields);
-//
-//let querySelectFields = DuplicateScannerUtils.BuildSqlSelectFieldsFromFieldConfig(duplicateFieldsConfig);
-//logging.log("querySelectFields -> " + querySelectFields);
-//
-//let queryPersonFieldData = "select " + querySelectFields + " from CONTACT"
-//                            + " join PERSON on PERSONID = PERSON_ID"
-//                            + " left join ADDRESS on ADDRESS.CONTACT_ID = CONTACT.CONTACTID";
-//
-//logging.log("Löschen von PERSON Dubletten -> ");
-//DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-//
-//let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay)
-//{
-//    let indexResultFields = DuplicateScannerUtils.translateEntityToIndexFields(targetEntity, resultFields)
-//
-//    //Run thru every duplicate result an read out the resultfields
-//    for (let i = 0; i < pPossibleDuplicatesRay.length; i++)
-//    {
-//        for (let b = 0; b < resultFields.length; b++)
-//        {
-//            let entityFieldName = resultFields[b];
-//            let indexFieldName = indexResultFields[entityFieldName];
-//            //logging.log("Entity Field -> "+ pPossibleDuplicatesRay[i][indexFieldName]);
-//            //format values
-//        }
-//    }
-//    //call webservice
-//    //reformat results to same structure as before
-//    return pPossibleDuplicatesRay;
-//};
-//
-//logging.log("Neu berechnen von PERSON Dubletten -> ");
-//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonFieldData,
-//duplicateFieldsConfig, resultFields, formatToJsonAndCallWsCallback);
-//
-//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-
-
-
-
-//##################################single scanForDuplicates#######################################################################
-
-
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//
-////Values to check, the same fields as configured
-//let valuesToCheck = {};
-//valuesToCheck["CONTACTID"] = "c7ddf982-0e58-4152-b82b-8f5673b0b729";
-//valuesToCheck["FIRSTNAME"] = "Tim";
-//valuesToCheck["GENDER"] = "m                                   ";
-//
-////The result values can be accessed as seen above in "formatToJsonAndCallWsCallback"
-//let pPossibleDuplicatesRay = DuplicateScannerUtils.scanForDuplicates(filterName, targetEntity, valuesToCheck, null);
-//
-//logging.log(" pPossibleDuplicatesRay-> " + pPossibleDuplicatesRay);
-//
-//for (let i = 0; i < pPossibleDuplicatesRay.length; i++) 
-//{
-//    logging.log("pPossibleDuplicatesRay[i] -> " + pPossibleDuplicatesRay[i]);
-//}
-//
-
-
-//################################ entity structure auslesen ##############################################
-
-
-//var model = project.getEntityStructure("Person_entity"); 
-//logging.log("Name: " + model.name); 
-//logging.log("Title: " + model.title); 
-//logging.log("Description: " + model.description); 
-//logging.log("UsePermissions: " + model.usePermissions); 
-//
-//for (fieldname in model.fields) 
-//{ 
-//    field = model.fields[fieldname]; 
-//    if(field.fieldType == project.ENTITYFIELDTYPE_FIELD)
-//    {
-//        logging.log(" Name: " + field.name); 
-//        logging.log(" Type: " + field.fieldType); 
-//        logging.log(" Title: " + field.title); 
-//        logging.log(" Description: " + field.description); 
-//        logging.log(" UsePermissions: " + field.usePermissions); 
-//        logging.log("###################### -> ");
-//    }
-//    if(field.fieldType == project.ENTITYFIELDTYPE_CONSUMER)
-//    {
-//        let consumerEntity = field.entityName;
-//        
-//        if(consumerEntity == null || consumerEntity == "")
-//            continue;
-//        
-//        let consumerEntityFields = project.getEntityStructure(consumerEntity);
-//        for (consumerEntityFieldname in consumerEntityFields.fields) 
-//        { 
-//            consumerField = consumerEntityFields.fields[consumerEntityFieldname]; 
-//            if(consumerField.fieldType == project.ENTITYFIELDTYPE_FIELD)
-//            {
-//                logging.log(" Name: " + consumerField.name); 
-//                logging.log(" Type: " + consumerField.fieldType); 
-//                logging.log(" Title: " + consumerField.title); 
-//                logging.log(" Description: " + consumerField.description); 
-//                logging.log(" UsePermissions: " + consumerField.usePermissions); 
-//                logging.log("###################### -> ");
-//            }
-//        }
-//    }
-//}
-
-//##############################################################################
-
-//var model = project.getEntityStructure("Person_entity"); 
-//let duplicateFieldsConfig = DuplicateScannerUtils.LoadIndexFieldsConfiguration(filterName, targetEntity);
-//
-//let combinedData = []
-//let entityFieldsToLoad = [];
-//for (field in duplicateFieldsConfig) 
-//{
-//    let entityFieldName = duplicateFieldsConfig[field][0];
-//    let isIdField = duplicateFieldsConfig[field][1];
-//    let useForIndexSearch = duplicateFieldsConfig[field][2];
-//    let entityFieldData = model[entiyFieldName];
-//    combinedData.push(entityFieldName, isIdField, useForIndexSearch, entityFieldData);
-//}
-//
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//DuplicateScannerUtils.getEntityRecords(targetEntity, entityFieldsToLoad, 0, 50);
-
-//Beispiel 1: 
-//Feld mit verknüpftem Consumer
-
-//[entity, feldname, consumerName, ProviderName]
-//let test = ["Communication_entity", "STANDARD_EMAIL_COMMUNICATION", "EmailCommunications", "EmailCommunications"];
-//
-//let testrow = entities.createConfigForLoadingRows()
-//                        .fields([test[1]])
-//                        .entity(test[0])
-//                        .provider(test[3])
-//                        .addParameter("ContactId_param", "d4c1bec3-656f-45ec-ae03-1c4d729d99fe")
-//                        //.uid()
-//let resultTest = entities.getRows(testrow);
-//logging.log("resultTest -> " + JSON.stringify(resultTest));
-
-
-
-//Beispiel 2: 
-//Feld direkt von anderem Entity
-//let testrow = entities.createConfigForLoadingRows()
-//                        .fields(["ZIP"])
-//                        .entity("Address_entity")
-//                        .uid("1a67eaa7-21da-4a18-97ab-755ac5cb74f7")
-//
-//let resultTest = entities.getRows(testrow);
-//logging.log("resultTest Beispiel 2 -> " + JSON.stringify(resultTest));
-
-
-//indexsearch.runIndexer(["Person"]);
-
-
-
-
-//let resultClusterId = DuplicateScannerUtils.GetClusterWithDuplicates(["7a34d9d0-04c7-478c-a8e2-f584fe625c45", "c7ddf982-0e58-4152-b82b-8f5673b0b729"]);
-//logging.log("resultClusterId -> " + resultClusterId);
-
-
-//
-//var filterName = "PersonDuplicates";
-//var targetEntity = "Person_entity";
-//var recordBlockSize = DuplicateScannerUtils.GetBlockSizeForScanner(filterName, targetEntity);
-//
-//logging.log("recordBlockSize -> " + recordBlockSize);
-
-//try 
-//{
-//    let sourceContactId = "sourceContactId";
-//    let targetContactId = "targetContactId";
-//    
-//    var activityDataForInsert = {
-//        subject: "Es wurde ein Personendatensatz in diesen integriert",
-//        content: "Person mit ID " + sourceContactId + " wurde in Person mit ID " + targetContactId + " integriert",
-//        //categoryKeywordId: $KeywordRegistry.ac
-//        directionKeywordId: "x",
-//        responsibleContactId: EmployeeUtils.getCurrentContactId()
-//    };
-//    
-//    var activityLinks = [["Person", "6e667085-bb97-4039-8dfe-2230002985e0"]]
-//
-//    //activityLinks = ArrayUtils.distinct2d(activityLinks);//TODO: better check before adding the elements into the array if it already exists there
-//    
-//    var activityRes = ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias());
-//} 
-//catch (exception) 
-//{ 
-//    logging.log("exception -> " + exception);
-//}
-
-////notification.addNotification(util.getNewUUID(), null, null, null, notification., notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
-
-
-//let currentContactId = EmployeeUtils.getCurrentContactId();
-//DuplicateScannerUtils.CreateMergeSuccessActivity("a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d", "6e667085-bb97-4039-8dfe-2230002985e0", currentContactId, "Person");
-
-
-//logging.log("$KeywordRegistry.activityDirection$internal() -> " + $KeywordRegistry.activityDirection$internal());
-
-
-
-//let processParameters = {
-//    filterName: "PersonDuplicates",
-//    targetEntity: "Person_entity" //process.execute is only able to handle strings
-//}
-//let userId = EmployeeUtils.getCurrentUserId();
-//if(userId == null)
-//    userId == "";
-//try 
-//{
-//    let processId = "manualrun_rebuild_duplicatecache_" + util.getNewUUID();
-//    process.executeTimer(processId, "RebuildAllDuplicatesCache_serverProcess", 0, true, false, process.TIMERTYPE_SERVER_RUN, userId, false, process.THREADPRIORITY_LOW)
-//    process.stopTimer(processId);
-//    logging.log("test -> ");
-//    process.executeAsync("RebuildAllDuplicateCaches_serverProcess", processParameters, false, userId, process.THREADPRIORITY_LOW)
-//    logging.log("test2 -> ");
-//} 
-//catch (exception) 
-//{ 
-//    logging.log(" exception-> " + exception);
-//}
diff --git a/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..a49f1a0db948473f671384d79a28219c3a23cd17
--- /dev/null
+++ b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js
@@ -0,0 +1,13 @@
+import("system.result");
+import("Sql_lib");
+
+var subselect = newSelect("count(*)").from("UNRELATEDDUPLICATES")
+.where("UNRELATEDDUPLICATES.DUPLICATETYPE = HASDUPLICATE.OBJECT_TYPE")
+.and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID = HASDUPLICATE.OBJECT_ROWID");
+result.string(
+    newSelect("count(*)")
+    .from("HASDUPLICATE")
+    .where("HASDUPLICATE.OBJECT_TYPE = DUPLICATESCANNER.ENTITY_TO_SCAN_NAME")
+    .and("(HASDUPLICATE.DUPLICATECOUNT - (" + subselect.toString() + ")) > 0")
+    .toString()
+);
diff --git a/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod b/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod
deleted file mode 100644
index 7d2241b72c2014a236b28f81f3f8a49060a1f768..0000000000000000000000000000000000000000
--- a/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
-  <name>DuplicatesUnrelated_entity</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/entity/DuplicatesUnrelated_entity/documentation.adoc</documentation>
-  <siblings>
-    <element>Duplicates_entity</element>
-  </siblings>
-  <recordContainer>jditoRecordContainer</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityProvider>
-      <name>UnrelatedPersonsProvider</name>
-      <titlePlural>Unrelated person duplicates</titlePlural>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <expose v="true" />
-          <mandatory v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityParameter>
-      <name>TargetEntity</name>
-      <expose v="true" />
-      <mandatory v="true" />
-    </entityParameter>
-    <entityProvider>
-      <name>UnrelatedOrganisationsProvider</name>
-      <titlePlural>Unrelated organisations duplicates</titlePlural>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <expose v="true" />
-          <mandatory v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityField>
-      <name>SourceDuplicateDescription</name>
-      <title>Source duplicate</title>
-    </entityField>
-    <entityField>
-      <name>UnrelatedDuplicateDescription</name>
-      <title>Unrelated duplicate</title>
-    </entityField>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-    <entityParameter>
-      <name>ClusterId_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-    </entityParameter>
-    <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
-    </entityProvider>
-  </entityFields>
-  <recordContainers>
-    <jDitoRecordContainer>
-      <name>jditoRecordContainer</name>
-      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
-      <contentProcess>%aditoprj%/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js</contentProcess>
-      <onDelete>%aditoprj%/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js</onDelete>
-      <recordFieldMappings>
-        <jDitoRecordFieldMapping>
-          <name>UID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>SourceDuplicateDescription.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>UnrelatedDuplicateDescription.value</name>
-        </jDitoRecordFieldMapping>
-      </recordFieldMappings>
-    </jDitoRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/DuplicatesUnrelated_entity/documentation.adoc b/entity/DuplicatesUnrelated_entity/documentation.adoc
deleted file mode 100644
index 06d0fa27494b89bf6d02bef96f9872cb1409c379..0000000000000000000000000000000000000000
--- a/entity/DuplicatesUnrelated_entity/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-=DuplicateUnrelated_entity
-
-These Duplicates not related to another Entity.
\ No newline at end of file
diff --git a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js b/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js
deleted file mode 100644
index 7f6beb6cd3e8fff07df2f33aa29835976eedc12d..0000000000000000000000000000000000000000
--- a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import("system.result");
-import("system.vars");
-import("system.db");
-import("Sql_lib");
-
-var INDEX_ID = 0;
-var INDEX_SOURCE_INFO1 = 1;
-var INDEX_SOURCE_INFO2 = 3;
-var INDEX_UNRELATED_INFO1 = 2;
-var INDEX_UNRELATED_INFO2 = 4;
-var INDEX_SOURCE_INFO = 1;
-var INDEX_UNRELATED_INFO = 2;
-
-
-let unrelatedDuplicates = [];
-let resultUnrelatedDuplicates = [];
-let targetEntity = vars.get("$param.TargetEntity");
-let clusterId = vars.get("$param.ClusterId_param");
-let querySelect = new SqlBuilder();
-
-if(targetEntity == 'Person_entity')
-{
-    querySelect.select("ud.ID,"
-                    + " pSource.FIRSTNAME, pUnrelated.FIRSTNAME,"
-                    + " pSource.LASTNAME, pUnrelated.LASTNAME")
-                .from("UNRELATEDDUPLICATES", "ud")
-                .join("CONTACT", "cUnrelated.CONTACTID = ud.UNRELATEDDUPLICATEID", "cUnrelated")
-                .join("PERSON", "pUnrelated.PERSONID = cUnrelated.PERSON_ID", "pUnrelated")
-                .join("CONTACT", "cSource.CONTACTID = ud.SOURCEDUPLICATEID", "cSource")
-                .join("PERSON", "pSource.PERSONID = cSource.PERSON_ID", "pSource")
-                //If the clusterid parameter is present, only load the duplicates for this particular cluster
-                .whereIfSet(["UNRELATEDDUPLICATES", "CLUSTERID", "ud"], clusterId);
-
-}
-else
-{
-    querySelect.select("ud.ID,"
-                    + " oSource.\"NAME\","
-                    + " oUnrelated.\"NAME\"")
-                .from("UNRELATEDDUPLICATES", "ud")
-                .join("CONTACT", "cUnrelated.CONTACTID = ud.UNRELATEDDUPLICATEID", "cUnrelated")
-                .join("ORGANISATION", "oUnrelated.ORGANISATIONID = cUnrelated.CONTACTID", "oUnrelated")
-                .join("CONTACT", "cSource.CONTACTID = ud.SOURCEDUPLICATEID", "cSource")
-                .join("ORGANISATION", "oSource.ORGANISATIONID = cSource.CONTACTID", "oSource")
-                //If the clusterid parameter is present, only load the duplicates for this particular cluster
-                .whereIfSet(["UNRELATEDDUPLICATES", "CLUSTERID", "ud"], clusterId);
-}
-
-unrelatedDuplicates = querySelect.table();
-
-for (let i = 0; i < unrelatedDuplicates.length; i++) 
-{
-    let id = unrelatedDuplicates[i][INDEX_ID];
-    let sourceInfo = "";
-    let unrelatedInfo = "";
-    
-        let sourceInfo1 = unrelatedDuplicates[i][INDEX_SOURCE_INFO1];
-        let sourceInfo2 = unrelatedDuplicates[i][INDEX_SOURCE_INFO2];
-        let unrelatedInfo1 = unrelatedDuplicates[i][INDEX_UNRELATED_INFO1];
-        let unrelatedInfo2 = unrelatedDuplicates[i][INDEX_UNRELATED_INFO2];
-        
-        sourceInfo = sourceInfo1;
-        if(sourceInfo2 != undefined)
-            sourceInfo += " " + sourceInfo2;
-        
-        unrelatedInfo = unrelatedInfo1;
-        if(unrelatedInfo2 != undefined)
-            unrelatedInfo += " " + unrelatedInfo2;
-    
-    resultUnrelatedDuplicates.push([id, sourceInfo, unrelatedInfo]);
-}
-
-result.object(resultUnrelatedDuplicates);
\ No newline at end of file
diff --git a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js b/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js
deleted file mode 100644
index 4cb5ca4f2a88d7144b24d27ecf99028f547ca144..0000000000000000000000000000000000000000
--- a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("Sql_lib");
-
-newWhere("UNRELATEDDUPLICATES.ID", "$local.uid").deleteData();
\ No newline at end of file
diff --git a/entity/Duplicates_entity/Duplicates_entity.aod b/entity/Duplicates_entity/Duplicates_entity.aod
deleted file mode 100644
index fe9a19485083c678b01823430ae02631da122683..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/Duplicates_entity.aod
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
-  <name>Duplicates_entity</name>
-  <title>Duplicates</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/entity/Duplicates_entity/documentation.adoc</documentation>
-  <siblings>
-    <element>DuplicatesUnrelated_entity</element>
-  </siblings>
-  <iconId>VAADIN:DATABASE</iconId>
-  <recordContainer>recordContainer</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>CLUSTER_DESCRIPTION</name>
-      <title>Cluster description</title>
-    </entityField>
-    <entityField>
-      <name>COUNT_DUPLICATES_IN_CLUSTER</name>
-      <title>Count duplicates in cluster</title>
-      <contentType>NUMBER</contentType>
-    </entityField>
-    <entityField>
-      <name>TARGET_ENTITY</name>
-    </entityField>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-    <entityProvider>
-      <name>SelfPersonDuplicatesProvider</name>
-      <titlePluralProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js</titlePluralProcess>
-      <titlePlural>Person duplicates</titlePlural>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityConsumer>
-      <name>SelfPersonDuplicatesConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Duplicates_entity</entityName>
-        <fieldName>SelfPersonDuplicatesProvider</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess>
-          <title></title>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityParameter>
-      <name>TargetEntity</name>
-      <expose v="true" />
-      <mandatory v="true" />
-    </entityParameter>
-    <entityConsumer>
-      <name>SelfOrganisationDuplicatesConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Duplicates_entity</entityName>
-        <fieldName>SelfOrganisationDuplicatesProvider</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityProvider>
-      <name>SelfOrganisationDuplicatesProvider</name>
-      <titlePlural>Organisation duplicates</titlePlural>
-    </entityProvider>
-    <entityConsumer>
-      <name>DuplicatesUnrelatedPersonConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicatesUnrelated_entity</entityName>
-        <fieldName>UnrelatedPersonsProvider</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityField>
-      <name>CLUSTER_ID</name>
-    </entityField>
-    <entityConsumer>
-      <name>DuplicatePersonsConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>NonselfDuplicates</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityActionGroup>
-      <name>DuplicateClusterActionGroup</name>
-      <title>Duplicate actions</title>
-      <children>
-        <entityActionField>
-          <name>IgnoreWholeCluster</name>
-          <title>Ignore whole cluster</title>
-          <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:CLOSE</iconId>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
-    <entityConsumer>
-      <name>DuplicatesUnrelatedOrganisationConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicatesUnrelated_entity</entityName>
-        <fieldName>UnrelatedOrganisationsProvider</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>TargetEntity</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClusterId_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityActionGroup>
-      <name>PersonOpenClusterDetailActionGroup</name>
-      <children>
-        <entityActionField>
-          <name>PersonOpenClusterDetail</name>
-          <title></title>
-          <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:FOLDER_OPEN</iconId>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
-    <entityParameter>
-      <name>ClusterId_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityActionGroup>
-      <name>OrganisationOpenClusterDetailActionGroup</name>
-      <children>
-        <entityActionField>
-          <name>OrganisationOpenClusterDetail</name>
-          <title>Open cluster detail</title>
-          <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:FOLDER_OPEN</iconId>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
-    <entityConsumer>
-      <name>DuplicateOrganisationsConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>NonselfDuplicates</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
-    </entityProvider>
-  </entityFields>
-  <recordContainers>
-    <jDitoRecordContainer>
-      <name>recordContainer</name>
-      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
-      <contentProcess>%aditoprj%/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js</contentProcess>
-      <recordFieldMappings>
-        <jDitoRecordFieldMapping>
-          <name>UID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLUSTER_DESCRIPTION.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>COUNT_DUPLICATES_IN_CLUSTER.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>TARGET_ENTITY.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLUSTER_ID.value</name>
-        </jDitoRecordFieldMapping>
-      </recordFieldMappings>
-    </jDitoRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/Duplicates_entity/documentation.adoc b/entity/Duplicates_entity/documentation.adoc
deleted file mode 100644
index aa8d46c4a31d622c6ed142e3e92422218a302ae9..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-=Duplicates_entity
-
-This Entity shows the Duplicates of 
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js b/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js
deleted file mode 100644
index 77822dbca0461d5ffccc31af058b9a5750002a4b..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import("system.logging");
-import("system.neon");
-import("system.vars");
-import("DuplicateScanner_lib");
-import("system.notification");
-
-let clusterId = vars.get("$sys.selection");
-
-let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId)
-
-if(duplicateContactIdsInClusterRay.length > 1)
-{
-    let referenceDuplicateId = duplicateContactIdsInClusterRay[0];
-    for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) 
-    {
-        DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId);
-    }
-    //notification.createConfig().notificationType(notification.t)
-    //neon.refresh(["$field.SelfPersonDuplicatesConsumer"])
-
-    //todo Temporary!!! In the first refresh is the record via idValue selected and gets refreshed but stays visible in the record container
-    //todo Temporary!!! on the second refresh, no selecten remains and the container loads the remaining records as expected
-    neon.refreshAll();
-    neon.refreshAll();
-}
-
-
diff --git a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js
deleted file mode 100644
index 5267adbe23e51fbb6b2c1c2aa44c947c3c3e7c34..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("2");//todo exchange with keyword
diff --git a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js
deleted file mode 100644
index ecb8c518cd40068c5e36606b64c83765a69962f6..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import("system.logging");
-import("system.result");
-import("system.vars");
-import("DuplicateScanner_lib");
-
-let clusterRecordId = vars.get("$field.UID");
-
-let contactIdsInCluster = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterRecordId);
-
-/*
- * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
- * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
- * Because of its invalidity, no records are shown.
-*/
-if(contactIdsInCluster.length == 0)
-    result.string(JSON.stringify(["nodata"]));
-else
-    result.string(JSON.stringify(contactIdsInCluster));
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js
deleted file mode 100644
index 5267adbe23e51fbb6b2c1c2aa44c947c3c3e7c34..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("2");//todo exchange with keyword
diff --git a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js
deleted file mode 100644
index ecb8c518cd40068c5e36606b64c83765a69962f6..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import("system.logging");
-import("system.result");
-import("system.vars");
-import("DuplicateScanner_lib");
-
-let clusterRecordId = vars.get("$field.UID");
-
-let contactIdsInCluster = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterRecordId);
-
-/*
- * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
- * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
- * Because of its invalidity, no records are shown.
-*/
-if(contactIdsInCluster.length == 0)
-    result.string(JSON.stringify(["nodata"]));
-else
-    result.string(JSON.stringify(contactIdsInCluster));
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js
deleted file mode 100644
index 152dfe0324a75ddba53552148d86b4af97acc6dd..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-
-let clusterId = vars.get("$field.UID");
-result.string(clusterId);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js
deleted file mode 100644
index 03d5df5be8044683b94f306002bcbeada25b8737..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-
-//let clusterId = vars.get("$field.UID");
-let clusterId = vars.get("$param.ClusterId_param");
-result.string(clusterId);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js b/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js
deleted file mode 100644
index f599915bdc2dbbb45a9b52bb92e7de622c74f618..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-
-let contextName = "Duplicates";
-let viewName = "OrganisationClusterMain_view";
-
-var params = {};
-params["ClusterId_param"] = vars.get("$sys.selection")[0];
-params["TargetEntity"] = "Organisation_entity";
-
-neon.openContext(contextName, viewName, null, neon.OPERATINGSTATE_VIEW, params);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js b/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js
deleted file mode 100644
index 9d5cf8d6da175cc02200a6874c07f460589f6745..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-
-let contextName = "Duplicates";
-let viewName = "PersonClusterMain_view";
-
-var params = {};
-params["ClusterId_param"] = vars.get("$sys.selection")[0];
-params["TargetEntity"] = "Person_entity";
-
-neon.openContext(contextName, viewName, null, neon.OPERATINGSTATE_VIEW, params);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js
deleted file mode 100644
index 8ef7b768764a4f534b886492c99ec2e9408c00e5..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-
-let clusterId = vars.get("$param.ClusterId_param");
-result.string(clusterId);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js b/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js
deleted file mode 100644
index e781fb72fd248164b8b63a98008094744aee7460..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("Organisation_entity");
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js
deleted file mode 100644
index 258d52e236265f259b354a56fd04b1a3d2fcb566..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-
-//let clusterId = vars.get("$sys.selection");
-let clusterId = vars.get("$param.ClusterId_param");
-result.string(clusterId);
\ No newline at end of file
diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js b/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js
deleted file mode 100644
index b213a20410d97225b6a299a51857dcf0057ba50c..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("system.result");
-import("system.translate");
-result.string(translate.text("Person duplicates"));
\ No newline at end of file
diff --git a/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js b/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js
deleted file mode 100644
index fc29941db97b09cd069a88b166304eb2be952b1e..0000000000000000000000000000000000000000
--- a/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import("Sql_lib");
-import("system.logging");
-import("system.db");
-import("system.vars");
-import("system.result");
-
-var INDEX_CLUSTERID = 0;
-var INDEX_FIRSTNAME = 1;
-var INDEX_LASTNAME = 2;
-var INDEX_ORGNAME = 1;
-
-let targetEntity = vars.get("$param.TargetEntity");
-let duplicates = [];
-
-let selectedClusterId = vars.get("$param.ClusterId_param");
-    
-let duplicateInfosQuery = new SqlBuilder();
-
-let selectedId = vars.get("$local.idvalues");
-
-if(selectedId)
-{
-    /* 
-     * Definitely a todo.
-     * Support for the action "Ignore whole cluster"
-     * If this action is used two times in a row, an error occurs on the second time.
-     * Although the selected record isn't present in the recordcontainer any more, the core tries to load a record with the same id.
-     * As a result an error gets thrown. If a dummy record gets returned here, it plays along with the current internal logic and doesn't throw an error.
-     * If a preview should be shown, this part of the container has to be extended.
-     */
-    duplicates.push([selectedId, "", "", "", ""]);
-    result.object(duplicates);
-}
-else
-{
-    if(targetEntity == "Person_entity")
-    {
-        duplicateInfosQuery.select("CLUSTERID, FIRSTNAME, LASTNAME")
-                           .from("DUPLICATECLUSTERS")
-                           .join("CONTACT", "CONTACT.CONTACTID = DUPLICATEID")
-                           .join("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID")
-                           .where("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)")
-                           .andIfSet("DUPLICATECLUSTERS.CLUSTERID", selectedClusterId)
-                           .orderBy("CLUSTERID");
-    }
-    else
-    {
-        duplicateInfosQuery.select("CLUSTERID, ORGANISATION.\"NAME\"")
-                           .from("DUPLICATECLUSTERS")
-                           .join("CONTACT", "CONTACT.CONTACTID = DUPLICATEID")
-                           .join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
-                           .where("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)")
-                           .andIfSet("DUPLICATECLUSTERS.CLUSTERID", vars.get("$local.idvalues"), SqlBuilder.IN())
-                           .orderBy("CLUSTERID");
-    }   
-    let duplicateInfos = duplicateInfosQuery.table();
-
-    let MAX_SHOW_CLUSTER_RECORDS = 4;
-    let recordClusterId = "";
-    let recordDescription = "";
-    let recordDuplicateInClusterCount = 0;
-
-    for (let i = 0; i < duplicateInfos.length; i++) 
-    {
-        let currentClusterId = duplicateInfos[i][INDEX_CLUSTERID];
-        let currentDescription = "";
-
-        //Build the description depending on the targetEntity
-        if(targetEntity == "Person_entity")
-            currentDescription = duplicateInfos[i][INDEX_FIRSTNAME] + " " + duplicateInfos[i][INDEX_LASTNAME];
-        else
-            currentDescription = duplicateInfos[i][INDEX_ORGNAME];
-
-        if(i == 0)
-        {
-            recordClusterId = currentClusterId;
-            recordDescription = currentDescription;
-            recordDuplicateInClusterCount = 1;
-            continue;
-        }
-
-        //If the record belongs to the same Cluster as the one before, append its value and increase the counter
-        //otherwise write the clusters record an start a new record.
-        if(recordClusterId == currentClusterId)
-        {
-            if(recordDuplicateInClusterCount < MAX_SHOW_CLUSTER_RECORDS)
-                recordDescription += ", " + currentDescription;
-            if(recordDuplicateInClusterCount == MAX_SHOW_CLUSTER_RECORDS)
-                recordDescription += ", ..."
-            recordDuplicateInClusterCount++;
-
-            /*
-             * Finish the current record if its the last duplicate.
-             * It has to be checked wether or not more than one element is currently in the cluster:
-             * Normally, there are always at least 2 elements in a cluster. If then a duplicate relation
-             * is beign ignored, there's only one record left in this particluar cluster. 
-             * As there are then no interactions possible (and a cluster of one is no cluster), this cluster musn't be shown in the list.
-             */
-            if(i == duplicateInfos.length-1 && recordDuplicateInClusterCount > 1)
-                duplicates.push([recordClusterId, recordDescription, recordDuplicateInClusterCount, targetEntity, recordClusterId]);
-        }
-        else
-        {
-            /*
-             * Finish the current record if its the next cluster.
-             * It has to be checked wether or not more than one element is currently in the cluster:
-             * Normally, there are always at least 2 elements in a cluster. If then a duplicate relation
-             * is beign ignored, there's only one record left in this particluar cluster. 
-             * As there would be no interactions possible (and a cluster of one is no cluster), this cluster musn't be shown in the list.
-             */
-            if(recordDuplicateInClusterCount > 1)
-                duplicates.push([recordClusterId, recordDescription, recordDuplicateInClusterCount, targetEntity, recordClusterId]);
-
-            recordClusterId = currentClusterId
-            recordDescription = currentDescription
-            recordDuplicateInClusterCount = 1;
-        }
-    }
-
-    result.object(duplicates);
-}
diff --git a/entity/Favorite_entity/Favorite_entity.aod b/entity/Favorite_entity/Favorite_entity.aod
index 4d3a729393f10f8feb1957675d44092d7a05ba30..9ce8f7b4045ccc69f83b71c3922e47957267050d 100644
--- a/entity/Favorite_entity/Favorite_entity.aod
+++ b/entity/Favorite_entity/Favorite_entity.aod
@@ -71,7 +71,7 @@
       <jDitoRecordAlias>_____SYSTEMALIAS</jDitoRecordAlias>
       <isFilterable v="true" />
       <isGroupable v="true" />
-      <isSortable v="true" />
+      <isSortable v="false" />
       <contentProcess>%aditoprj%/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js</contentProcess>
       <onDelete>%aditoprj%/entity/Favorite_entity/recordcontainers/jditorecordcontainer/onDelete.js</onDelete>
       <recordFieldMappings>
diff --git a/entity/InterestLink_entity/InterestLink_entity.aod b/entity/InterestLink_entity/InterestLink_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7f4c396f063b7d9e1f693af97fc79b101abbd226
--- /dev/null
+++ b/entity/InterestLink_entity/InterestLink_entity.aod
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>InterestLink_entity</name>
+  <title>Interest</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <titlePlural>Interests</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>INTEREST_ID</name>
+      <title>Interest</title>
+      <consumer>Interests</consumer>
+      <displayValueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>INTERESTLINKID</name>
+    </entityField>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Interests</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Interest_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>StatusKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityParameter>
+      <name>ContactId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>InterestsForContact</name>
+      <dependencies>
+        <entityDependency>
+          <name>97de1501-3646-475b-bf3c-2fec20843ee4</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>InterestLinks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+      <state>READONLY</state>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <fromClauseProcess>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>INTERESTLINK.CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+          <recordfield>INTEREST.DESCRIPTION</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTEREST_ID.value</name>
+          <recordfield>INTERESTLINK.INTEREST_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTERESTLINKID.value</name>
+          <recordfield>INTERESTLINK.INTERESTLINKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>INTERESTLINK.STATUS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTEREST_ID.displayValue</name>
+          <recordfield>INTEREST.TITLE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>085ae9b5-3760-460a-911c-cb4b8ffb336f</name>
+          <tableName>INTERESTLINK</tableName>
+          <primaryKey>INTERESTLINKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>f8e78ecd-8d26-4285-95c8-093a08877374</name>
+          <tableName>INTEREST</tableName>
+          <primaryKey>INTERESTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js b/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d877bfcaca49d927d93af76a0600ce037fe93bf8
--- /dev/null
+++ b/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js b/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2c5bbf9152d5d220ccba334f4f7b8d2bb15e8f1
--- /dev/null
+++ b/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.loadContentTitle("Interest_entity", vars.get("$field.INTEREST_ID")));
\ No newline at end of file
diff --git a/entity/InterestLink_entity/entityfields/status/displayValueProcess.js b/entity/InterestLink_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..99daaad8a4f81f5e36f990ce8230fefd42f01029
--- /dev/null
+++ b/entity/InterestLink_entity/entityfields/status/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getViewValue($KeywordRegistry.interestLinkStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/InterestLink_entity/entityfields/status/valueProcess.js b/entity/InterestLink_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..544c9707223d3140fcd7f1d04a87f9ea362d954a
--- /dev/null
+++ b/entity/InterestLink_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,7 @@
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string($KeywordRegistry.interestLinkStatus$subscribed());
\ No newline at end of file
diff --git a/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9b1fd0fbd8593e28529bef2a05cc48ff5874276
--- /dev/null
+++ b/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.interestLinkStatus());
\ No newline at end of file
diff --git a/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js b/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..23abeb0f0cd7dcf2cf1cc63a56165555c2071c9c
--- /dev/null
+++ b/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Sql_lib");
+
+var condition = newWhere("INTERESTLINK.CONTACT_ID", "$param.ContactId_param");
+
+result.string(condition.toString());
\ No newline at end of file
diff --git a/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js b/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f4a87ce8c145477940f84f29238b1dc3730f5e3
--- /dev/null
+++ b/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("Sql_lib");
+
+var from = new SqlBuilder()
+    .from("INTEREST")
+    .join("INTERESTLINK", "INTEREST.INTERESTID = INTERESTLINK.INTEREST_ID");
+
+result.string(from.toString());
\ No newline at end of file
diff --git a/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d9a79c193a877db1499d034091c56605d9ee994
--- /dev/null
+++ b/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.interestLinkStatus(), "INTERESTLINK.STATUS"));
\ No newline at end of file
diff --git a/entity/Interest_entity/Interest_entity.aod b/entity/Interest_entity/Interest_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f2485ca1f25930f9712a6e510a4c5ee0dd1769bc
--- /dev/null
+++ b/entity/Interest_entity/Interest_entity.aod
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>Interest_entity</name>
+  <title>Interest</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <contentTitleProcess>%aditoprj%/entity/Interest_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Interest_entity/contentDescriptionProcess.js</contentDescriptionProcess>
+  <iconId>VAADIN:GAMEPAD</iconId>
+  <titlePlural>Interests</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>a7f69959-a663-4089-828f-71cdc461262b</name>
+          <entityName>InterestLink_entity</entityName>
+          <fieldName>Interests</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>3b09958b-0175-47fa-9528-2d5570c21162</name>
+          <entityName>BulkMail_entity</entityName>
+          <fieldName>Interests</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>INTERESTID</name>
+    </entityField>
+    <entityField>
+      <name>TITLE</name>
+      <title>Title</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+      <contentType>LONG_TEXT</contentType>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Interest_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Interest_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>IS_DEFAULT</name>
+      <title>Default</title>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityConsumer>
+      <name>StatusKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+          <recordfield>INTEREST.DESCRIPTION</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTERESTID.value</name>
+          <recordfield>INTEREST.INTERESTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>IS_DEFAULT.value</name>
+          <recordfield>INTEREST.IS_DEFAULT</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>INTEREST.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TITLE.value</name>
+          <recordfield>INTEREST.TITLE</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>62b56e0f-e284-4d95-ac45-4e23a33d7758</name>
+          <tableName>INTEREST</tableName>
+          <primaryKey>INTERESTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/Interest_entity/contentDescriptionProcess.js b/entity/Interest_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..06a46eb63894622c07e5021280fbb098c3d4385c
--- /dev/null
+++ b/entity/Interest_entity/contentDescriptionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.DESCRIPTION"));
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js b/entity/Interest_entity/contentTitleProcess.js
similarity index 53%
rename from entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js
rename to entity/Interest_entity/contentTitleProcess.js
index 3c559d42002c59103607e03f79eb792d99d74d31..94f61859cc64100bb6a6dcd445efc67835002c1a 100644
--- a/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js
+++ b/entity/Interest_entity/contentTitleProcess.js
@@ -1,3 +1,4 @@
 import("system.vars");
 import("system.result");
-result.string(vars.get("$field.UID"));
\ No newline at end of file
+
+result.string(vars.get("$field.TITLE"));
\ No newline at end of file
diff --git a/entity/Interest_entity/entityfields/status/displayValueProcess.js b/entity/Interest_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef495661f151f322c852e7655df9bbb2ae22d397
--- /dev/null
+++ b/entity/Interest_entity/entityfields/status/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getViewValue($KeywordRegistry.interestStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/Interest_entity/entityfields/status/valueProcess.js b/entity/Interest_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7e43680cde9693212cb0123d4685a3455ee1663
--- /dev/null
+++ b/entity/Interest_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,7 @@
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string($KeywordRegistry.interestStatus$active());
\ No newline at end of file
diff --git a/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e99e16494cb8494d0fd4d749c57805325ae1b14b
--- /dev/null
+++ b/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.interestStatus());
\ No newline at end of file
diff --git a/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1072f1cee61b8fbadeec10d4efb9826f450f69d
--- /dev/null
+++ b/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+    
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.interestStatus(), "INTEREST.STATUS"));
\ No newline at end of file
diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
index b5a77caf977897ec0e18eeab0f316384718fc55e..c21c9e8558f3698e9184b5f1fad67a257dcfc2cc 100644
--- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
+++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
@@ -58,6 +58,12 @@
           <fieldName>KeywordAttributeRelations</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>e6e2abfd-b504-47ff-bdb3-5927aaf9df5c</name>
+          <entityName>DSGVOConfiguration_entity</entityName>
+          <fieldName>ConfigKeywordAttributeRelation</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 995222aa8beb491c011f3d9ec0dc3116a4648788..41dd1030625cf58109578092224a874c04ba1507 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -103,12 +103,6 @@
       <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc</documentation>
       <recordContainer>jDito</recordContainer>
       <dependencies>
-        <entityDependency>
-          <name>bb48a3ee-f340-4fd4-8c80-ef73b765ab58</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>KeywordContactStates</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>4b1d1def-36d3-45e9-9ed5-eaef12d1ec82</name>
           <entityName>Activity_entity</entityName>
@@ -343,12 +337,6 @@
           <fieldName>KeywordPaymentTerm</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>77be3cca-8b50-4810-9549-3fd3e6fdf220</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>KeywordContactStates</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>7945545b-f1e6-446d-84c3-ef68486652f4</name>
           <entityName>Contact_entity</entityName>
@@ -637,6 +625,77 @@
           <fieldName>KeywordPhases</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>414ad662-727b-4e9f-9e86-0659d92ec60d</name>
+          <entityName>DuplicatePerson_entity</entityName>
+          <fieldName>KeywordContactStates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>0f8f9bfc-379c-4f05-8364-8270e718fe9a</name>
+          <entityName>DuplicateOrganisation_entity</entityName>
+          <fieldName>KeywordContactStates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>b78c0dd7-a35c-4d9b-9a23-1a20e7e41464</name>
+          <entityName>DuplicateOrganisation_entity</entityName>
+          <fieldName>KeywordOrganisationTypes</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>98608b12-9927-4197-adfe-1398a388bcb0</name>
+          <entityName>WebtrackingTag_entity</entityName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>8cfca9b8-3128-4e31-bb77-358d500c4b9a</name>
+          <entityName>Weblink_entity</entityName>
+          <fieldName>KeywordLinkType</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>7a7e6cc4-3e5b-4a2b-8ed9-1e84436cac15</name>
+          <entityName>WeblinkTag_entity</entityName>
+          <fieldName>KeywordLinkTags</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>f85bfcbc-627a-4746-acc1-e228b56ab122</name>
+          <entityName>CommunicationSettings_entity</entityName>
+          <fieldName>StatusKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>d6fe81c3-fadc-444d-8962-53c64b8ecd33</name>
+          <entityName>CommunicationSettings_entity</entityName>
+          <fieldName>MediumKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>81b5b8f4-74a7-42fe-84d1-05211ddcd221</name>
+          <entityName>CommunicationSettings_entity</entityName>
+          <fieldName>ChannelTypeKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>23da94c2-910f-4b89-a92e-0826e00fe293</name>
+          <entityName>Interest_entity</entityName>
+          <fieldName>StatusKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>9afcf60e-4854-45bb-a9f9-924926be7b25</name>
+          <entityName>InterestLink_entity</entityName>
+          <fieldName>StatusKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>a4d04777-82dc-4384-a4a5-c6a4a71e7a65</name>
+          <entityName>CommunicationBlacklist_entity</entityName>
+          <fieldName>BlacklistTypeKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
         <entityDependency>
           <name>bf774c79-2902-4fdb-a8d2-8a157294bc27</name>
           <entityName>Planning_entity</entityName>
@@ -778,6 +837,24 @@
           <fieldName>OrderedBySortingFieldKeywordsConsumer</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>815a5b03-64ec-4480-8a2b-f02077386158</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>KeywordContactStates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>51a15faf-a4a8-45be-8aae-416e6288439f</name>
+          <entityName>DSGVODeleteFlag_entity</entityName>
+          <fieldName>DSGVOReasonKeywords</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>a96898c5-5af2-4e91-84b0-ed079bbfbe06</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>KeywordContactStates</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js b/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js
index d564b4d76feb764e6f7db9d65f92c66db58a1a28..e78831577965cb8f629169b00cf80af0fae5a171 100644
--- a/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js
+++ b/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js
@@ -1,6 +1,4 @@
 import("system.vars");
 import("Context_lib");
 
-AdminViewUtils.open("AB_KEYWORD_ENTRYID", [
-    ["KEYID", vars.get("$field.KEYID")]
-]);
\ No newline at end of file
+AdminViewUtils.open("AB_KEYWORD_ENTRYID", ["KEYID", "AB_KEYWORD_CATEGORY_ID"]);
\ No newline at end of file
diff --git a/entity/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..37a6fcbb87d0ffe78e25a1818ff8b9d15ba206af
--- /dev/null
+++ b/entity/MailLog_entity/MailLog_entity.aod
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>MailLog_entity</name>
+  <title>Maillog</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <grantCreate v="false" />
+  <grantUpdate v="false" />
+  <grantDelete v="false" />
+  <titlePlural>Maillogs</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Contact</title>
+      <consumer>Contacts</consumer>
+      <groupable v="true" />
+      <linkedContextProcess>%aditoprj%/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>MAILING_SUBJECT</name>
+      <title>Subject</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>RECIPIENT_EMAIL</name>
+      <title>Recipient</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>SENDER_EMAIL</name>
+      <title>Sender</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>MAIL_RUNID</name>
+    </entityField>
+    <entityField>
+      <name>MAIL_LOGID</name>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>BCC_EMAIL</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>PERSON_ID</name>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ID</name>
+    </entityField>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>MailLogs</name>
+      <dependencies>
+        <entityDependency>
+          <name>f089388e-d3b7-49b5-bcb6-69de2229b1d3</name>
+          <entityName>BulkMail_entity</entityName>
+          <fieldName>MailLogs</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityField>
+      <name>DATE_SEND</name>
+      <title>Send Date</title>
+      <contentType>DATE</contentType>
+      <resolution>MINUTE</resolution>
+    </entityField>
+    <entityActionGroup>
+      <name>RecipientActions</name>
+      <children>
+        <entityActionField>
+          <name>DownloadEml</name>
+          <title>Download</title>
+          <onActionProcess>%aditoprj%/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="true" />
+          <isSelectionAction v="true" />
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityConsumer>
+      <name>Contacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>TESTRUN</name>
+      <title>Test Run</title>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityField>
+      <name>DATE_OPENED</name>
+      <title>Opening Date</title>
+      <contentType>DATE</contentType>
+      <resolution>MINUTE</resolution>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <fromClauseProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>MAIL_LOG.CONTACT_ID</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MAILING_SUBJECT.value</name>
+          <recordfield>MAIL_LOG.MAILING_SUBJECT</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>RECIPIENT_EMAIL.value</name>
+          <recordfield>MAIL_LOG.RECIPIENT_EMAIL</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SENDER_EMAIL.value</name>
+          <recordfield>MAIL_LOG.SENDER_EMAIL</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>MAIL_RUN.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>MAIL_RUN.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MAIL_RUNID.value</name>
+          <recordfield>MAIL_RUN.MAIL_RUNID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MAIL_LOGID.value</name>
+          <recordfield>MAIL_LOG.MAIL_LOGID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>MAIL_LOG.STATUS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>BCC_EMAIL.value</name>
+          <recordfield>MAIL_LOG.BCC_EMAIL</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ID.value</name>
+          <recordfield>CONTACT.PERSON_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_ID.value</name>
+          <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_SEND.value</name>
+          <recordfield>MAIL_LOG.DATE_SEND</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TESTRUN.value</name>
+          <recordfield>MAIL_RUN.TESTRUN</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_OPENED.value</name>
+          <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>6b1b4cc2-cdc1-4c15-a1d7-6b1236332884</name>
+          <tableName>MAIL_LOG</tableName>
+          <primaryKey>MAIL_LOGID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>f3319573-943a-40e8-85b7-e01192c55c1d</name>
+          <tableName>MAIL_RUN</tableName>
+          <primaryKey>MAIL_RUNID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>04a01533-28bc-4b89-b3f2-b06b7c12f393</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>ad7f427d-fdd8-426d-b068-ce89e2dbeeda</name>
+          <tableName>WEBLINK_CLICK</tableName>
+          <primaryKey>WEBLINK_CLICKID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js b/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e48676daf3e661032b7d9aaf896c5bfbdd51e2d
--- /dev/null
+++ b/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+result.string(ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID")));
\ No newline at end of file
diff --git a/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js b/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8b4e72e74a0a4696ff39e83135aa6100ef908c0
--- /dev/null
+++ b/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId());
diff --git a/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js b/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec52de0578cce8142d206552c2e34f5a18bca2de
--- /dev/null
+++ b/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.neon");
+import("system.vars");
+import("Bulkmail_lib");
+
+neon.download(BulkMailUtils.getEmlFile(vars.get("$field.OBJECT_ROWID"), vars.get("$field.MAIL_RUNID"), vars.get("$field.MAIL_LOGID")),"test.eml");
diff --git a/entity/MailLog_entity/recordcontainers/db/conditionProcess.js b/entity/MailLog_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3abd921bd5cf8ea0a7ad4d1a8ca63ee6e7222037
--- /dev/null
+++ b/entity/MailLog_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("MAIL_RUN.OBJECT_TYPE", "$param.ObjectType_param")
+        .andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.ObjectRowId_param");
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5403f0c7eeded52578dbbf92b605b1a5fa2c4081
--- /dev/null
+++ b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+result.string("MAIL_LOG join MAIL_RUN on MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID\n\
+ join CONTACT on CONTACT.CONTACTID = MAIL_LOG.CONTACT_ID\n\
+ left join WEBLINK_CLICK on WEBLINK_CLICK.WEBLINK_CLICKID = MAIL_LOG.OPENER_LINK_CLICK_ID");
\ No newline at end of file
diff --git a/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..294f3ffbb2105339dab7ddf91efefc4ccc903f36
--- /dev/null
+++ b/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.db");
+
+result.object({"MAIL_LOG.DATE_SEND": db.DESCENDING});
\ No newline at end of file
diff --git a/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..72d1600cff8a2f7f9cd33dd3551e372cdec7790c
--- /dev/null
+++ b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Contact_lib");
+import("system.result");
+
+result.string(ContactUtils.getResolvingDisplaySubSql("MAIL_LOG.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ea51e488a10108e55122b9f9f0f3b8cdca09e93
--- /dev/null
+++ b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string( KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "MAIL_LOG.STATUS"));
diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod
index 2352659698a9a46d1b461716f2e1ec4289f38284..1db580cf75752e04b8a82ba431f103da3b9ce518 100644
--- a/entity/Member_entity/Member_entity.aod
+++ b/entity/Member_entity/Member_entity.aod
@@ -321,6 +321,12 @@
       <name>ObjectSubType_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>PERSON_ATTR_LOYALTY</name>
+      <title>Loyalty</title>
+      <groupable v="true" />
+      <displayValueProcess>%aditoprj%/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js</displayValueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -420,6 +426,10 @@
           <recordfield>OBJECTMEMBER.ONSITE</recordfield>
           <isFilterable v="true" />
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ATTR_LOYALTY.value</name>
+          <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
@@ -533,6 +543,9 @@
         <jDitoRecordFieldMapping>
           <name>MST_MEMBERROLE.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PERSON_ATTR_LOYALTY.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js b/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8857b8ffd70bbb62ff1dce0e3eff18072071bc1
--- /dev/null
+++ b/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+result.string(translate.text(vars.get("$this.value")));
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..16ce5832a5e2bbd32e7488db9bf20bb5611f8211
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js
@@ -0,0 +1,12 @@
+import("Attribute_lib");
+import("AttributeRegistry_basic");
+import("Sql_lib");
+import("system.result");
+
+var attrSql = newSelect("COMBOVAL.ATTRIBUTE_NAME")
+    .from("AB_ATTRIBUTERELATION")
+    .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
+    .leftJoin("AB_ATTRIBUTE COMBOVAL", AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID")
+    .where("AB_ATTRIBUTERELATION.OBJECT_ROWID = OBJECTMEMBER.CONTACT_ID")
+    .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", $AttributeRegistry.loyalty());
+result.string("(" + attrSql.toString() + ")");
diff --git a/entity/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js
index 6a0466b6f9cb9866935d6039e83c9f64148033ae..707685adc1efda30c4003bf494fe1876533334a4 100644
--- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("AttributeRegistry_basic");
 import("Util_lib");
 import("system.translate");
 import("system.result");
@@ -17,7 +18,7 @@ var memberLoadingConfig = entities.createConfigForLoadingRows()
                                                 "MEMBERROLE", "MEMBERROLE.displayValue", "OBJECT_ROWID", "OBJECT_TYPE",
                                                 "OBJECTMEMBERID", "ORG_ORGID", "ORGANISATION_NAME", "PERSON_FIRSTNAME", "PERSON_FULL_NAME", 
                                                 "PERSON_LASTNAME", "PERSON_PERSID", "PERSON_SALUTATION", "PERSON_TITLE", "POSITION", "TARGETCONTEXT",
-                                                "recordType", "MST_MEMBERROLE"]);
+                                                "recordType", "MST_MEMBERROLE", "PERSON_ATTR_LOYALTY"]);
 
 if (idValues)
 {
@@ -56,7 +57,8 @@ memberRows = memberRows.map(function(row)
         row["POSITION"], 
         row["TARGETCONTEXT"], 
         row["recordType"], 
-        row["MST_MEMBERROLE"]
+        row["MST_MEMBERROLE"],
+        row["PERSON_ATTR_LOYALTY"]
     ];
 });
 
@@ -150,7 +152,11 @@ if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0)
             persRows[counter][7],
             null, 
             "DistrictResponsible",
-            ""
+            "",
+            (new AttributeRelationQuery(
+                row[3],
+                $AttributeRegistry.loyalty()
+            ).includeDisplayValue().getSingleAttribute() || {displayValue: ""}).displayValue
         ]);
     });
 }
diff --git a/entity/Offer_entity/contentDescriptionProcess.js b/entity/Offer_entity/contentDescriptionProcess.js
index f1afab18db7ad38a661329de19f0554dac92285c..57c6fc7fc6df77618a3524295f67a7edef4b7236 100644
--- a/entity/Offer_entity/contentDescriptionProcess.js
+++ b/entity/Offer_entity/contentDescriptionProcess.js
@@ -6,7 +6,7 @@ import("system.vars");
 import("system.result");
 
 var res = [translate.text("Total gross") + ": " + vars.get("$field.TotalGross.displayValue"), 
-           translate.text("Probability") + ": " + vars.get("$field.PROBABILITY.displayValue"),
+           translate.text("Probability") + ": " + vars.get("$field.PROBABILITY") + "%",
            translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy"))];
 
 result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
index 820659874926c9870e401c3898695443e6c2a075..c9be3c889870754bed49436e6818a86aebc8ca22 100644
--- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
@@ -16,7 +16,6 @@ var notificationMsg = translate.text("The status of the offer was changed to \"s
 var contactId = vars.get("$field.CONTACT_ID");
 var arrayReport = OfferUtils.buildOfferReport(vars.get("$field.OFFERID"));
 var emailFilename = translate.text("Offerrequest");
-var offerId = vars.get("$field.OFFERID")
 var additionalPlaceholders = [
     new Placeholder("offerCode", Placeholder.types.FIXEDVALUE, vars.get("$field.FullOfferCode"))
 ];
@@ -29,4 +28,5 @@ offerReport.filename = translate.text("Offer No.") + vars.get("$field.#CONTENTTI
 
 attachmentArray[0] = offerReport;
 
-EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders, updateStatements);
+EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders, updateStatements, 
+                                        $KeywordRegistry.documentTemplateTypeCategory$single());
diff --git a/entity/Offer_entity/entityfields/probability/valueProcess.js b/entity/Offer_entity/entityfields/probability/valueProcess.js
index ad82690b022e8c95df71cc2a924d30b643efcacc..72e0517304f96f7d2aa94f10a9e938d71b4fef50 100644
--- a/entity/Offer_entity/entityfields/probability/valueProcess.js
+++ b/entity/Offer_entity/entityfields/probability/valueProcess.js
@@ -2,7 +2,7 @@ import("system.neon");
 import("system.result");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string("0.00");
 }
\ No newline at end of file
diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js
index 7310f91eb38e14a7e2bf37c40acaec12e1e58116..e78ed8f9e28022f4232709ca1a9c97cbea10b41d 100644
--- a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js
@@ -16,34 +16,25 @@ if(oid != "")
     
     var insertStatements = JSON.parse(vars.get("$field.itemInsertStatements"));//insert statements get set by insertPartsList in the onvalueChanges of product_id and quantity
     var statements = [];
-    if(insertStatements)
-    {
-        statements = statements.concat(insertStatements);
-    }
     
     //update offer price
     var vals = oiUtils.getNetAndVat();
     var discountedVals = OfferItemUtils.getDiscountedNet(null, oid,  discount);
     if(discountedVals)
     {
-    insertStatements.push(
-        newWhere("OFFERITEM.OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"]).buildUpdateStatement({
-                "NET": vals[0],
-                "VAT": vals[1],
-                "DISCOUNTED_NET": discountedVals[0],
-                "DISCOUNTED_VAT": discountedVals[1]
-            })
-        )
+        statements.push(
+            newWhere("OFFER.OFFERID", rowdata["OFFERITEM.OFFER_ID"]).buildUpdateStatement({
+                    "NET": vals[0],
+                    "VAT": vals[1],
+                    "DISCOUNTED_NET": discountedVals[0],
+                    "DISCOUNTED_VAT": discountedVals[1]
+                })
+            )
     }
-    else
+
+    if(insertStatements)
     {
-        insertStatements.push(
-            newWhere("OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"])
-                    .buildUpdateStatement({
-                        "NET": vals[0],
-                        "VAT": vals[1]
-                    })
-            )
+        statements = statements.concat(insertStatements);
     }
 
     db.execute(statements, "Data_alias", 10000000);
diff --git a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
index 53225e7adf9f1876a1494a42cda2bf08e726f5b0..ae3cb6d2522110a36f98cf2dfd10124bd90fe50c 100644
--- a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
+++ b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
@@ -2,6 +2,7 @@ import("system.question");
 import("system.translate");
 import("system.vars");
 import("system.db");
+import("KeywordRegistry_basic");
 import("MimeType_lib");
 import("Email_lib");
 import("Sql_lib");
@@ -13,10 +14,7 @@ var notificationMsg = translate.text("The status of the order was changed to \"s
 var contactId = vars.get("$field.CONTACT_ID");
 var orgContactId = vars.get("$field.CONTACT_ORG_ID");
 var reportData = vars.get("$field.ORDER_REPORT_DATA");
-var emailFilename = vars.get("$field.#CONTENTTITLE");
-var orderNo = emailFilename.substring(emailFilename.indexOf(" ", 0)+1, emailFilename.length);
-emailFilename = emailFilename.substring(0, emailFilename.indexOf(" ", 0));
-emailFilename = emailFilename + " " + orderNo;
+var emailFilename = vars.get("$field.ORDERTYPE.displayValue") + " " + vars.get("$field.SALESORDERCODE");
 
 if (contactId == null || "") 
     contactId = orgContactId;
@@ -27,4 +25,4 @@ orderReport.filename = emailFilename + ".pdf";
 
 attachmentArray[0] = orderReport;
 
-EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", notificationMsg, emailFilename, null, updateStatements);
+EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", notificationMsg, emailFilename, null, updateStatements, $KeywordRegistry.documentTemplateTypeCategory$single());
diff --git a/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js b/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js
index 7538162cacd9d49220e1ded198b3293f6dc46564..17b33080116cffcaee2512c24b460a663eb8e478 100644
--- a/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js
+++ b/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js
@@ -2,6 +2,7 @@ import("system.question");
 import("system.translate");
 import("system.vars");
 import("system.db");
+import("KeywordRegistry_basic");
 import("MimeType_lib");
 import("Email_lib");
 import("Order_lib");
@@ -25,4 +26,5 @@ orderReport.filename = emailFilename + ".pdf";
 
 attachmentArray[0] = orderReport;
 
-EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", null, emailFilename, null, null);
+EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", null, emailFilename, null, null, 
+                                        $KeywordRegistry.documentTemplateTypeCategory$single())
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index be40c333adc19fbc28ccd8715d0596b2f151a47f..e0b542fa6018fa159f9893c39c7452b98f2dd6c9 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -186,6 +186,12 @@
           <fieldName>OrganisationConsumer</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>fa1b6124-1e00-4fa0-8c04-debc19f58d95</name>
+          <entityName>DuplicatePerson_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
         <entityDependency>
           <name>640a8509-1972-4dc5-980e-68832f1c03c5</name>
           <entityName>Planning_entity</entityName>
@@ -226,14 +232,6 @@
           <name>AttributeId_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>MapViewAdditionalFeatures_param</name>
           <expose v="false" />
@@ -460,7 +458,7 @@
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <fieldName>OrderedBySortingFieldKeywords</fieldName>
       </dependency>
       <children>
         <entityParameter>
@@ -468,6 +466,10 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
+        <entityParameter>
+          <name>BlacklistIds_param</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityConsumer>
@@ -699,14 +701,6 @@
           <name>ExcludedContactIds_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>MapViewAdditionalFeatures_param</name>
           <expose v="false" />
@@ -770,14 +764,6 @@
           <name>ExcludedContactIds_param</name>
           <expose v="true" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>MapViewAdditionalFeatures_param</name>
           <expose v="false" />
@@ -955,65 +941,10 @@
       <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess>
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess>
     </entityField>
-    <entityProvider>
-      <name>SelfDuplicates</name>
-      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc</documentation>
-      <titlePlural>Duplicates</titlePlural>
-      <children>
-        <entityParameter>
-          <name>AttributeId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>AttributeKeyId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>FilterPreSet_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OrganisationType_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>WithPrivate_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyOwnSupervised_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludeOrganisationsByPersonId</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewAdditionalFeatures_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewCenterLat_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewCenterLon_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
     <entityParameter>
       <name>OnlyShowContactIds_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityParameter>
-      <name>DuplicateActionsControl_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>DuplicateCurrentContactId_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityField>
       <name>STANDARD_COUNTRY</name>
       <title>Standard Country</title>
@@ -1023,33 +954,6 @@
       <name>OnlyOwnSupervised_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityConsumer>
-      <name>SelfDuplicatesUncached</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>SelfDuplicates</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess>
-          <title></title>
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityConsumer>
       <name>CommRestrictions</name>
       <dependency>
@@ -1153,14 +1057,6 @@
           <name>AttributeKeyId_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
           <expose v="false" />
@@ -1226,10 +1122,6 @@
           <name>OnlyShowContactIds_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>ExcludeOrganisationsByPersonId</name>
           <expose v="false" />
@@ -1282,52 +1174,6 @@
       <name>FilterPreSet_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityProvider>
-      <name>NonselfDuplicates</name>
-      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>2e410b9e-5ebc-48ea-9562-da386202d7e8</name>
-          <entityName>Duplicates_entity</entityName>
-          <fieldName>DuplicateOrganisationsConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-      <children>
-        <entityParameter>
-          <name>AttributeKeyId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedContactIds_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyOwnSupervised_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewAdditionalFeatures_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewCenterLon_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>MapViewCenterLat_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
     <entityConsumer>
       <name>AttributesFilter</name>
       <dependency>
@@ -1526,52 +1372,6 @@
       <iconId>VAADIN:ENVELOPE</iconId>
       <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityActionGroup>
-      <name>DuplicateActions</name>
-      <title>Duplicate actions</title>
-      <state>AUTO</state>
-      <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js</stateProcess>
-      <children>
-        <entityActionField>
-          <name>IntegrateSelectedIntoCurrentAction</name>
-          <title>Integrate selected into current contact</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>NEON:IMPORT</iconId>
-          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IntegrateCurrentIntoSelectedAction</name>
-          <title>Integrate current into selected contact</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>NEON:EXPORT</iconId>
-          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IgnoreDuplicate</name>
-          <title>Ignore Duplicate</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:CLOSE</iconId>
-          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IgnoreWholeCluster</name>
-          <title>Ignore whole Cluster</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <iconId>VAADIN:CLOSE</iconId>
-          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityActionField>
       <name>startWorkflow</name>
       <title>Start workflow</title>
@@ -1629,6 +1429,22 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityConsumer>
+      <name>Duplicates</name>
+      <selectionMode>MULTI</selectionMode>
+      <selectionModeProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js</selectionModeProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DuplicateOrganisation_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Obj_param</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
     <entityConsumer>
       <name>Plannings</name>
       <dependency>
@@ -1787,11 +1603,13 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression>
           <isFilterable v="false" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression>
           <isFilterable v="false" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
@@ -1943,6 +1761,13 @@
           <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/responsibleassignment/filterConditionProcess.js</filterConditionProcess>
           <filtertype>EXTENDED</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>Duplicates_filter</name>
+          <title>Duplicates</title>
+          <contentType>NUMBER</contentType>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
         <filterExtension>
           <name>Communication_Mail_filter</name>
           <title>Communication: Mail</title>
diff --git a/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js b/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
index 04b4079531ba7cc7a965aa5162e950e6213ecfdf..e02b6634f4b41a21ddba3d197f3429978f4fb0c9 100644
--- a/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
@@ -1,7 +1,21 @@
+import("Entity_lib");
 import("system.logging");
 import("system.vars");
 import("system.result");
 
+//references needed for auto refresh:
+"$field.Addresses.insertedRows";
+"$field.Addresses.changedRows";
+"$field.Addresses.deletedRows";
+
 var country = vars.get("$field.STANDARD_COUNTRY");
 if (country)
-    result.string(country);
\ No newline at end of file
+{
+    result.string(country);
+}
+else 
+{
+    var addressRows = EntityConsumerRowsHelper.getCurrentConsumerRows("Addresses", ["COUNTRY"]);
+    if(addressRows.length > 0)
+        result.string(addressRows[0]["COUNTRY"]);
+}
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js
deleted file mode 100644
index c9289cbd0ef896d7dbcf5eae668bac8a87e861da..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("DuplicateScanner_lib");
-
-let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
-let selectedContactId = vars.get("$sys.selection");
-let clusterId = DuplicateScannerUtils.getClusterId(sourceContactId);
-DuplicateScannerUtils.createUnrelatedDuplicateRelation(sourceContactId, selectedContactId, clusterId);
-
-neon.refreshAll();
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js
deleted file mode 100644
index 99d7f55925b3fed54dc2d5e20604793b6e9fd862..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import("system.logging");
-import("system.neon");
-import("system.vars");
-import("DuplicateScanner_lib");
-import("system.notification");
-
-let contactId = vars.get("$field.CONTACTID");
-let clusterId = DuplicateScannerUtils.getClusterId(contactId);
-
-let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId)
-
-if(duplicateContactIdsInClusterRay.length > 1)
-{
-    let referenceDuplicateId = duplicateContactIdsInClusterRay[0];
-    for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) 
-    {
-        DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId);
-    }
-}
-
-
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js
deleted file mode 100644
index fdd913ad06bf2815da3127d405d21b258c4ad795..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "2")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js
deleted file mode 100644
index 5b8b24021ddfcba34a258bf7af7d4ec5ec65852a..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState == null || actionState == "0")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js b/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..39bdfae5361be160d838627fc4e4de2d45eb9b82
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js
@@ -0,0 +1,20 @@
+import("system.vars");
+import("system.result");
+
+result.string(JSON.stringify({
+    CONTACTID: vars.get("$field.CONTACTID"),
+    NAME: vars.get("$field.NAME"),
+    ADDRESS_ID: vars.get("$field.ADDRESS_ID"),
+    CUSTOMERCODE: vars.get("$field.CUSTOMERCODE"),
+    LANGUAGE: vars.get("$field.LANGUAGE"),
+    TYPE: vars.get("$field.TYPE"),
+    STATUS: vars.get("$field.STATUS"),
+    STANDARD_ADDRESS: vars.get("$field.STANDARD_ADDRESS"),
+    STANDARD_CITY: vars.get("$field.STANDARD_CITY"),
+    STANDARD_COUNTRY: vars.get("$field.STANDARD_COUNTRY"),
+    STANDARD_EMAIL_COMMUNICATION: vars.get("$field.STANDARD_EMAIL_COMMUNICATION"),
+    STANDARD_LAT: vars.get("$field.STANDARD_LAT"),
+    STANDARD_LON: vars.get("$field.STANDARD_LON"),
+    STANDARD_PHONE_COMMUNICATION: vars.get("$field.STANDARD_PHONE_COMMUNICATION"),
+    STANDARD_ZIP: vars.get("$field.STANDARD_ZIP")
+}));
diff --git a/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js b/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c92317456ba1a7476401171e875526c8eff6fa76
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(
+    vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW ||
+        vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT ?
+    "NONE" : "MULTI"
+);
diff --git a/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js b/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a52cc0873588ad599c0efe525b8ec15716c7ec07
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.object([$KeywordRegistry.contactStatus$markToDelete()]);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
index a46efc111ddcfd413f0dcfff1c46e9fc6562b64e..ae42fcf1dfba4735bfe64eff2b80bfc9b7fb2686 100644
--- a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
@@ -2,4 +2,5 @@ import("system.vars");
 import("Email_lib");
 import("KeywordRegistry_basic");
 
-EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, $KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
+EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, 
+                                    $KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/newemail/stateProcess.js b/entity/Organisation_entity/entityfields/newemail/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Organisation_entity/entityfields/newemail/stateProcess.js
+++ b/entity/Organisation_entity/entityfields/newemail/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc
deleted file mode 100644
index dc35980c12405163da2417e0472197dd9e3c7285..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-Provides organisation duplicate-records without the `Organisation_entity` scope, for example for the `Duplicates_entity`.
-
-The provider is named `NonselfDuplicates` to differentiate this provider and the `SelfDuplicates`-provider.
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js b/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js
index ca54b8d0ce3503663165304eea9856fae5ff423c..f5b721ea2e143660d01fa2502a898d7154263f09 100644
--- a/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js
@@ -1,8 +1,9 @@
 import("system.logging");
-import("Organisation_lib");
 import("system.translate");
 import("system.vars");
 import("system.db");
+import("KeywordRegistry_basic");
+import("Organisation_lib");
 import("MimeType_lib");
 import("Email_lib");
 import("Order_lib");
@@ -21,4 +22,5 @@ orgReport.filename = emailFilename + ".pdf";
 
 attachmentArray[0] = orgReport;
 
-EmailWritingUtils.sendReportAsMail(orgContactId, attachmentArray, "Organisation", null, emailFilename, null, null);
+EmailWritingUtils.sendReportAsMail(orgContactId, attachmentArray, "Organisation", null, emailFilename, null, null, 
+                                        $KeywordRegistry.documentTemplateTypeCategory$single())
diff --git a/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc
deleted file mode 100644
index 396162acb9e2db72c8c1090f4fdda9eb84a95738..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc
+++ /dev/null
@@ -1 +0,0 @@
-Provides organisation duplicate-records within the `Organisation_entity` scope itself.
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js
deleted file mode 100644
index 81570217c3ecd3cf76deb5e14d7ac0a6121a59bb..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("1");//todo use keyword
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js
deleted file mode 100644
index 849632882bbabd4e65dfb25c7dc984366bde5116..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.result");
-import("DuplicateScanner_lib");
-
-let unrelatedIds = DuplicateScannerUtils.getUnrelatedRelationsForDuplicate(vars.get("$field.CONTACTID"));
-result.string(JSON.stringify(unrelatedIds));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
deleted file mode 100644
index 77f449d52a0995e5bb7e8ba94746a1659bf36001..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import("system.project");
-import("system.indexsearch");
-import("system.vars");
-import("DuplicateScanner_lib");
-import("system.result");
-
-var scannerName = "OrganisationDuplicates";
-var targetEntity = "Organisation_entity";
-var valuesToCheck = {};
-var entityFieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(scannerName, targetEntity);
-
-var idsForEmptyResult = JSON.stringify(["nodata"]);
-
-if (entityFieldsToLoad == null)
-    result.string(idsForEmptyResult);
-else
-{
-    //Read the values of all available entity fields and write the fieldname7value combination
-    //as key/value pairs into an object. This is used to trigger the scan for duplicates
-
-    vars.get("$field.NAME")
-    vars.get("$field.STANDARD_CITY");
-    vars.get("$field.STANDARD_ZIP");
-    vars.get("$field.STANDARD_ADDRESS");
-    
-    var allFieldsToLoad = entityFieldsToLoad.entityFields.concat(entityFieldsToLoad.entityIdField);
-    allFieldsToLoad.forEach(function (field)
-    {
-        var fieldValue = vars.get("$field." + field);
-        if (fieldValue)
-            valuesToCheck[field] = fieldValue;
-    });
-    
-    var scanResults = [];
-    
-    //don't search if only the id field has a value
-    var fieldsToCheck = Object.keys(valuesToCheck);
-    if (!(fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && entityFieldsToLoad.entityIdField in valuesToCheck)))
-        scanResults = DuplicateScannerUtils.scanForDuplicates(scannerName, targetEntity, valuesToCheck, null) || [];
-    
-    var duplicateIds = scanResults.map(function (scanResult)
-    {
-        return scanResult[indexsearch.FIELD_ID];
-    });
-
-    /*
-     * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
-     * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
-     * Because of its invalidity, no records are shown.
-     */
-    if (duplicateIds.length == 0)
-        result.string(idsForEmptyResult);
-    else
-        result.string(JSON.stringify(duplicateIds));
-}
\ No newline at end of file
diff --git a/entity/Organisation_entity/initFilterProcess.js b/entity/Organisation_entity/initFilterProcess.js
index 936a623f599055fc4fb5fa81c850fc7d323bff22..afecc1ede02d6f412681545610696b1efa17dc90 100644
--- a/entity/Organisation_entity/initFilterProcess.js
+++ b/entity/Organisation_entity/initFilterProcess.js
@@ -5,15 +5,10 @@ import("KeywordRegistry_basic");
 import("system.result");
 
 var filter = vars.get("$param.FilterPreSet_param");
-
-var res;
-if (filter)
-    res = filter;
-else if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) 
+if(!filter && vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) 
 {
     var statusInactive = $KeywordRegistry.contactStatus$inactive();
-    
-    filter = {
+    filter = JSON.stringify({
         type: "group",
         operator: "AND",
         childs: [{
@@ -24,9 +19,9 @@ else if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FIL
             key: statusInactive,
             value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
         }]
-    };
-    res = JSON.stringify(filter);
+    });
+}
+if(filter)
+{
+    result.string(filter);
 }
-
-if (res)
-    result.string(res);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..96f185ae76701ab39777fe91db3d18baf328b614
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js
@@ -0,0 +1,16 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+import("DuplicateScanner_lib");
+
+var sqlOperator = SqlUtils.getSqlConditionalOperator(vars.get("$local.operator"));
+
+result.string(newWhere(
+    "CONTACT.CONTACTID",
+    DuplicateScannerUtils.getDuplicateConditionalListSql(
+        ["Organisation_entity"],
+        vars.get("$local.rawvalue"),
+        sqlOperator, true
+    ),
+    SqlBuilder.IN()
+));
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
index 00e50690d485216c4b4956f416b688ab433e68a8..320f4e3329fa4fd7195da03495b3cd7e5812a9d6 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
@@ -7,7 +7,7 @@ import("Attribute_lib");
 
 // TODO: enable when duplicate-module is finalized
 let contactId = vars.get("$field.CONTACTID");
-DuplicateScannerUtils.deleteCachedDuplicate(contactId);
+DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [contactId]);
 
 new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
     .deleteAllAttributes();
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
index 60299cd7d4eda2ceed743571cec9cbda912ad318..c8db8fdecb72ba18f14ae3fd3a5bd05223ac2396 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
@@ -1,5 +1,8 @@
 import("system.vars");
 import("Workflow_lib");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateHasDuplicateEntry("Organisation_entity");
 
 //start the execution in afterOperatingState, because here the dataset is not yet inserted
 vars.set("$context.workflowQueue", {});
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
index 9f0337793c84207f61013809345f829d1f874671..737768cc8678c59374d99e790f4956812e3661db 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
@@ -6,6 +6,9 @@ import("Communication_lib");
 import("Entity_lib");
 import("Workflow_lib");
 import("KeywordRegistry_basic");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateHasDuplicateEntry("Organisation_entity");
 
 // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
 var rowdata =  vars.get("$local.rowdata");
diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..41ef07ff58ec51eda018bed12cb5b0b2b657c348
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Communication_lib");
+
+var res = CommUtil.getStandardSubSqlMail();
+result.string(res);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..320ae40ad1ba794b4e759037fa0f382b9af67696
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Communication_lib");
+
+var res = CommUtil.getStandardSubSqlPhone();
+result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index d318ebbdde32ccfe73c757d1e904246333556526..308a22e1ef75d0cb10729aac9523990c8a024689 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -8,6 +8,7 @@
   <siblings>
     <element>Address_entity</element>
     <element>Contact_entity</element>
+    <element>DSGVODeleteFlag_entity</element>
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Person_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Person_entity/contentTitleProcess.js</contentTitleProcess>
@@ -162,10 +163,6 @@
           <name>OnlyActive_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityProvider>
     <entityField>
@@ -411,14 +408,6 @@
           <name>OnlyActive_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityProvider>
     <entityConsumer>
@@ -636,6 +625,7 @@
       <title>Status</title>
       <consumer>KeywordContactStates</consumer>
       <groupable v="true" />
+      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/status/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Person_entity/entityfields/status/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -644,13 +634,17 @@
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <fieldName>OrderedBySortingFieldKeywords</fieldName>
       </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>BlacklistIds_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityConsumer>
@@ -754,6 +748,12 @@
           <fieldName>Persons</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>fe217f3a-edb1-4972-b8f6-c8b517a34a48</name>
+          <entityName>DSGVOConfiguration_entity</entityName>
+          <fieldName>Persons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
@@ -776,10 +776,6 @@
           <name>OnlyActive_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityProvider>
     <entityConsumer>
@@ -945,46 +941,11 @@
       <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js</displayValueProcess>
       <onValidation>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/onValidation.js</onValidation>
     </entityField>
-    <entityParameter>
-      <name>DuplicateCurrentContactId_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>DuplicateActionsControl_param</name>
-      <expose v="true" />
-      <mandatory v="false" />
-    </entityParameter>
     <entityField>
       <name>STANDARD_COUNTRY</name>
       <title>Country</title>
       <groupable v="true" />
     </entityField>
-    <entityConsumer>
-      <name>SelfDuplicatesUncached</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>SelfDuplicates</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityField>
       <name>LEAD_LEADID</name>
     </entityField>
@@ -1035,47 +996,12 @@
           <name>OnlyActive_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityProvider>
     <entityParameter>
       <name>OnlyShowContactIds_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityProvider>
-      <name>SelfDuplicates</name>
-      <documentation>%aditoprj%/entity/Person_entity/entityfields/selfduplicates/documentation.adoc</documentation>
-      <titlePlural>Duplicates</titlePlural>
-      <children>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyActive_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OrgId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyOwnSupervised_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
     <entityField>
       <name>IndexCommunication</name>
     </entityField>
@@ -1124,10 +1050,6 @@
           <name>ContactId_param</name>
           <expose v="false" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
         <entityParameter>
           <name>OnlyOwnSupervised_param</name>
           <expose v="false" />
@@ -1144,10 +1066,6 @@
           <name>OnlyActive_param</name>
           <expose v="true" />
         </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
       </children>
     </entityProvider>
     <entityField>
@@ -1164,12 +1082,6 @@
       <name>indexP</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/indexp/documentation.adoc</documentation>
       <recordContainer>index</recordContainer>
-      <children>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>PERSON_OBJECTTYPE</name>
@@ -1195,40 +1107,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityProvider>
-      <name>NonselfDuplicates</name>
-      <documentation>%aditoprj%/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>3a4352e2-9686-4c52-9d01-dbfad8c68ea7</name>
-          <entityName>Duplicates_entity</entityName>
-          <fieldName>DuplicatePersonsConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>OrgId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>OnlyOwnSupervised_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
     <entityConsumer>
       <name>DistrictResponsibles</name>
       <state>INVISIBLE</state>
@@ -1395,52 +1273,6 @@
         </entityActionField>
       </children>
     </entityActionGroup>
-    <entityActionGroup>
-      <name>DuplicateActions</name>
-      <title>Duplicate actions</title>
-      <state>AUTO</state>
-      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/stateProcess.js</stateProcess>
-      <children>
-        <entityActionField>
-          <name>IntegrateSelectedIntoCurrentAction</name>
-          <title>Integrate selected into current contact</title>
-          <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>NEON:IMPORT</iconId>
-          <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IntegrateCurrentIntoSelectedAction</name>
-          <title>Integrate current into selected contact</title>
-          <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>NEON:EXPORT</iconId>
-          <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IgnoreDuplicate</name>
-          <title>Ignore Duplicate</title>
-          <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:CLOSE</iconId>
-          <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>IgnoreWholeCluster</name>
-          <title>Ignore whole cluster</title>
-          <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <iconId>VAADIN:CLOSE</iconId>
-          <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityActionField>
       <name>newEmail</name>
       <title>Write email</title>
@@ -1499,6 +1331,78 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityConsumer>
+      <name>DSGVODeleteFlags</name>
+      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DSGVODeleteFlag_entity</entityName>
+        <fieldName>DSGVODeleteFlags</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Campaigns</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Campaign_entity</entityName>
+        <fieldName>Campaigns</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityParameter>
+      <name>FilterPreSet_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Duplicates</name>
+      <selectionMode>MULTI</selectionMode>
+      <selectionModeProcess>%aditoprj%/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js</selectionModeProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DuplicatePerson_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Obj_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContactCommunicationSettings</name>
+      <refreshParent v="true" />
+      <dependency>
+        <name>dependency</name>
+        <entityName>CommunicationSettings_entity</entityName>
+        <fieldName>SettingsForContact</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>InterestLinks</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>InterestLink_entity</entityName>
+        <fieldName>InterestsForContact</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1636,6 +1540,8 @@
         <dbRecordFieldMapping>
           <name>ORGANISATION_NAME.value</name>
           <recordfield>ORGANISATION.NAME</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>USER_NEW.value</name>
@@ -1672,11 +1578,13 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression>
           <isFilterable v="false" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression>
           <isFilterable v="false" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
@@ -1769,6 +1677,36 @@
           <isFilterable v="true" />
           <isLookupFilter v="false" />
         </dbRecordFieldMapping>
+        <consumerMapping>
+          <name>Offers</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Orders</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Campaigns</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Tasks</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Contracts</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
@@ -1826,6 +1764,13 @@
           <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/supervisorassignment/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>Duplicates_filter</name>
+          <title>Duplicates</title>
+          <contentType>NUMBER</contentType>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
         <filterExtension>
           <name>Communication_Mail_filter</name>
           <title>Communication: Mail</title>
@@ -1848,6 +1793,13 @@
           <isLookupFilter v="false" />
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>IsEmployee_filter</name>
+          <title>Is an active Employee</title>
+          <contentType>BOOLEAN</contentType>
+          <filterValuesProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js</filterConditionProcess>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Person_entity/entityfields/addtocampaign/stateProcess.js b/entity/Person_entity/entityfields/addtocampaign/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/addtocampaign/stateProcess.js
+++ b/entity/Person_entity/entityfields/addtocampaign/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js b/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
index 04b4079531ba7cc7a965aa5162e950e6213ecfdf..48e3079503511a492aae0634eeb6853d9f198fe3 100644
--- a/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
+++ b/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js
@@ -1,7 +1,36 @@
+import("Sql_lib");
+import("Entity_lib");
 import("system.logging");
 import("system.vars");
 import("system.result");
 
+//references needed for auto refresh:
+"$field.PersAddresses.insertedRows";
+"$field.PersAddresses.changedRows";
+"$field.PersAddresses.deletedRows";
+
+var res = "";
 var country = vars.get("$field.STANDARD_COUNTRY");
-if (country)
-    result.string(country);
\ No newline at end of file
+var orgAddressId = newSelect("CONTACT.ADDRESS_ID").from("CONTACT")
+                                                    .where("CONTACT.ORGANISATION_ID", vars.get("$field.ORGANISATION_ID"))
+                                                    .and("CONTACT.PERSON_ID is null")
+                                                    .cell();
+                                                                    
+var standardCountryOrg = newSelect("ADDRESS.COUNTRY").from("ADDRESS")
+                                                             .where("ADDRESS.ADDRESSID", orgAddressId).cell();
+
+if(country)
+{
+    res = country;
+}
+else if(standardCountryOrg)
+{
+    res = standardCountryOrg;
+}
+else
+{
+    var addressPersonRows = EntityConsumerRowsHelper.getCurrentConsumerRows("PersAddresses", ["COUNTRY"]);
+    if(addressPersonRows.length > 0)
+        res = addressPersonRows[0]["COUNTRY"];
+}
+result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js
similarity index 98%
rename from entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js
rename to entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js
index 821415ae694dd9c3d98a7703f4c59b81a37f524b..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644
--- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js
+++ b/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js
@@ -1,3 +1,4 @@
 import("system.vars");
 import("system.result");
+
 result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js
index 083e2d8b0d3d0649e0984e06b3947a6ae709fd3e..324c438c9d7953e5177748efa8679fe55ab0e8f6 100644
--- a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js
+++ b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js
@@ -21,7 +21,7 @@ if(contactIds > 1)
     
     entities.deleteRow(config);
     
-    DuplicateScannerUtils.deleteCachedDuplicate(contactId);
+    DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]);
 
     new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
         .deleteAllAttributes();
diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js
similarity index 98%
rename from entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js
rename to entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js
index 821415ae694dd9c3d98a7703f4c59b81a37f524b..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644
--- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js
+++ b/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js
@@ -1,3 +1,4 @@
 import("system.vars");
 import("system.result");
+
 result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js b/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..76191b70ac2e7e57490e9ae2aeaa4b9162d49936
--- /dev/null
+++ b/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("system.project");
+import("system.neon");
+
+var isActive = JSON.parse(project.getPreferenceValue("custom.dsgvo.active", "true"));
+
+if(isActive)
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+    
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js
deleted file mode 100644
index c9289cbd0ef896d7dbcf5eae668bac8a87e861da..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("DuplicateScanner_lib");
-
-let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
-let selectedContactId = vars.get("$sys.selection");
-let clusterId = DuplicateScannerUtils.getClusterId(sourceContactId);
-DuplicateScannerUtils.createUnrelatedDuplicateRelation(sourceContactId, selectedContactId, clusterId);
-
-neon.refreshAll();
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js
deleted file mode 100644
index f74997cb1d72c3baa56b1dd12a42ba77eb782769..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import("system.logging");
-import("system.neon");
-import("system.vars");
-import("DuplicateScanner_lib");
-import("system.notification");
-
-let contactId = vars.get("$field.CONTACTID");
-logging.log("contactId -> " + contactId);
-let clusterId = DuplicateScannerUtils.getClusterId(contactId);
-logging.log("clusterId -> " + clusterId);
-let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId)
-logging.log("duplicateContactIdsInClusterRay -> " + duplicateContactIdsInClusterRay);
-if(duplicateContactIdsInClusterRay.length > 1)
-{
-    let referenceDuplicateId = duplicateContactIdsInClusterRay[0];
-    for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) 
-    {
-        DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId);
-    }
-    neon.refreshAll();
-    
-//    var params = {};
-//    params["TargetEntity"] = "Person_entity";
-//        
-//    neon.openContext("Duplicates", "DuplicatesOverview_view", null, neon.OPERATINGSTATE_VIEW, params);
-}
-
-
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js
deleted file mode 100644
index fdd913ad06bf2815da3127d405d21b258c4ad795..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "2")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js
deleted file mode 100644
index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState != null && actionState != "1")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/stateProcess.js
deleted file mode 100644
index 5b8b24021ddfcba34a258bf7af7d4ec5ec65852a..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/duplicateactions/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-//Actions to show in the duplicates view inside the persons main view
-
-let actionState = vars.get("$param.DuplicateActionsControl_param");
-
-if(actionState == null || actionState == "0")//todo replace with keyword
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js b/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..59dc755e2ab02e6af201c71f835676e5172180bc
--- /dev/null
+++ b/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js
@@ -0,0 +1,23 @@
+import("system.vars");
+import("system.result");
+
+result.string(JSON.stringify({
+    CONTACTID: vars.get("$field.CONTACTID"),
+    FIRSTNAME: vars.get("$field.FIRSTNAME"),
+    MIDDLENAME: vars.get("$field.MIDDLENAME"),
+    LASTNAME: vars.get("$field.LASTNAME"),
+    DATEOFBIRTH: vars.get("$field.DATEOFBIRTH"),
+    GENDER: vars.get("$field.GENDER"),
+    SALUTATION: vars.get("$field.SALUTATION"),
+    TITLE: vars.get("$field.TITLE"),
+    TITLESUFFIX: vars.get("$field.TITLESUFFIX"),
+    POSITION: vars.get("$field.POSITION"),
+    STATUS: vars.get("$field.STATUS"),
+    DEPARTMENT: vars.get("$field.DEPARTMENT"),
+    STANDARD_ADDRESS: vars.get("$field.STANDARD_ADDRESS"),
+    STANDARD_CITY: vars.get("$field.STANDARD_CITY"),
+    STANDARD_COUNTRY: vars.get("$field.STANDARD_COUNTRY"),
+    STANDARD_EMAIL_COMMUNICATION: vars.get("$field.STANDARD_EMAIL_COMMUNICATION"),
+    STANDARD_PHONE_COMMUNICATION: vars.get("$field.STANDARD_PHONE_COMMUNICATION"),
+    STANDARD_ZIP: vars.get("$field.STANDARD_ZIP")
+}));
diff --git a/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js b/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c92317456ba1a7476401171e875526c8eff6fa76
--- /dev/null
+++ b/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(
+    vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW ||
+        vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT ?
+    "NONE" : "MULTI"
+);
diff --git a/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b6137b4d105e9ba592cf8ef6e796fb838a32b09
--- /dev/null
+++ b/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js b/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a52cc0873588ad599c0efe525b8ec15716c7ec07
--- /dev/null
+++ b/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.object([$KeywordRegistry.contactStatus$markToDelete()]);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
index 4941f4e681715d0769512fba14d11801e4fc5d1f..602247f4551a27bb1dec0346a683192917384204 100644
--- a/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
+++ b/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("Context_lib");
 
 var res = [];
-res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]});
+res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION", "DSGVODELETEFLAG", "DSGVO"]});
 res.push({id: vars.get("$field.PERSONID"), tableNames: ["PERSON"]});
 
 res = JSON.stringify(res);//currently only strings  can be passed as param
diff --git a/entity/Person_entity/entityfields/newappointment/stateProcess.js b/entity/Person_entity/entityfields/newappointment/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newappointment/stateProcess.js
+++ b/entity/Person_entity/entityfields/newappointment/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newemail/onActionProcess.js b/entity/Person_entity/entityfields/newemail/onActionProcess.js
index a4b80166ed668dd700c51c1429cae7aa647edff5..c4ff5861b8aa9dc43e67f0d8975c65216188aab6 100644
--- a/entity/Person_entity/entityfields/newemail/onActionProcess.js
+++ b/entity/Person_entity/entityfields/newemail/onActionProcess.js
@@ -3,4 +3,5 @@ import("Email_lib");
 import("KeywordRegistry_basic");
 
 
-EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, $KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
+EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, 
+                                    $KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newemail/stateProcess.js b/entity/Person_entity/entityfields/newemail/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newemail/stateProcess.js
+++ b/entity/Person_entity/entityfields/newemail/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newletter/stateProcess.js b/entity/Person_entity/entityfields/newletter/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newletter/stateProcess.js
+++ b/entity/Person_entity/entityfields/newletter/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newoffer/stateProcess.js b/entity/Person_entity/entityfields/newoffer/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newoffer/stateProcess.js
+++ b/entity/Person_entity/entityfields/newoffer/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js
+++ b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js b/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644
--- a/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js
+++ b/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js
@@ -3,5 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc b/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc
deleted file mode 100644
index d7964dadc0c8a8c7d5ea6856c3b82d07ccbcc361..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-Provides contact duplicate-records without the `Person_entity` scope, for example for the `Duplicates_entity`.
-
-The provider is named `NonselfDuplicates` to differentiate this provider and the `SelfDuplicates`-provider.
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js b/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js
index aefbc6e8f76f99c4281890f3461553c49562d5b9..8ce4375618f2004c11461e3a9f01e183a463e8d1 100644
--- a/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js
+++ b/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js
@@ -3,5 +3,8 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
-    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete())
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
+    
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/selfduplicates/documentation.adoc b/entity/Person_entity/entityfields/selfduplicates/documentation.adoc
deleted file mode 100644
index 4f02d8b1a256bb4d0a791bab46cf0cda23790c84..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/selfduplicates/documentation.adoc
+++ /dev/null
@@ -1 +0,0 @@
-Provides contact duplicate-records within the `Person_entity` scope itself.
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js
deleted file mode 100644
index 81570217c3ecd3cf76deb5e14d7ac0a6121a59bb..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("1");//todo use keyword
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js
deleted file mode 100644
index 849632882bbabd4e65dfb25c7dc984366bde5116..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("system.result");
-import("DuplicateScanner_lib");
-
-let unrelatedIds = DuplicateScannerUtils.getUnrelatedRelationsForDuplicate(vars.get("$field.CONTACTID"));
-result.string(JSON.stringify(unrelatedIds));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
deleted file mode 100644
index 8fa370156eae601ebddb1f7b6f024650a156de52..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import("system.indexsearch");
-import("system.project");
-import("system.logging");
-import("system.vars");
-import("DuplicateScanner_lib");
-import("system.result");
-
-var scannerName = "PersonDuplicates";
-var targetEntity = "Person_entity";
-var valuesToCheck = {};
-var entityFieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(scannerName, targetEntity);
-
-var idsForEmptyResult = JSON.stringify(["nodata"]);
-
-if (entityFieldsToLoad == null)
-    result.string(idsForEmptyResult);
-else
-{
-    //Read the values of all available entity fields and write the fieldname7value combination
-    //as key/value pairs into an object. This is used to trigger the scan for duplicates
-
-    vars.get("$field.STANDARD_CITY");
-    vars.get("$field.STANDARD_ZIP");
-    vars.get("$field.STANDARD_ADDRESS");
-    vars.get("$field.FIRSTNAME");
-    vars.get("$field.LASTNAME");
-    vars.get("$field.PersAddresses.insertedRows")
-    vars.get("$field.PersAddresses.changedRows")
-    vars.get("$field.PersAddresses.deletedRows")
-    
-    var allFieldsToLoad = entityFieldsToLoad.entityFields.concat(entityFieldsToLoad.entityIdField);
-    allFieldsToLoad.forEach(function (field)
-    {
-        var fieldValue = vars.get("$field." + field);
-        if (fieldValue)
-            valuesToCheck[field] = fieldValue;
-    });
-    
-    var scanResults = [];
-    
-    //don't search if only the id field has a value
-    var fieldsToCheck = Object.keys(valuesToCheck);
-    if (!(fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && entityFieldsToLoad.entityIdField in valuesToCheck)))
-        scanResults = DuplicateScannerUtils.scanForDuplicates(scannerName, targetEntity, valuesToCheck, null) || [];
-    
-    var duplicateIds = scanResults.map(function (duplicate)
-    {
-        return duplicate[indexsearch.FIELD_ID];
-    });
-
-    /*
-     * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
-     * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
-     * Because of its invalidity, no records are shown.
-     */
-    if (duplicateIds.length == 0)
-        result.string(idsForEmptyResult);
-    else
-        result.string(JSON.stringify(duplicateIds));
-}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/status/stateProcess.js b/entity/Person_entity/entityfields/status/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0a13ec4459b571c5dda9ee71b3470fc70866531
--- /dev/null
+++ b/entity/Person_entity/entityfields/status/stateProcess.js
@@ -0,0 +1,9 @@
+import("KeywordRegistry_basic");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+if (vars.get("$this.value") == $KeywordRegistry.contactStatus$markToDelete() && vars.get("$sys.recordstate") != "")
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
\ No newline at end of file
diff --git a/entity/Person_entity/initFilterProcess.js b/entity/Person_entity/initFilterProcess.js
index f64ef8977cc3f20a910f104d6196bfe90c43fc34..afecc1ede02d6f412681545610696b1efa17dc90 100644
--- a/entity/Person_entity/initFilterProcess.js
+++ b/entity/Person_entity/initFilterProcess.js
@@ -1,14 +1,14 @@
-import("system.entities");
+import("system.neon");
+import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 import("system.result");
-import("system.vars");
-import("system.neon");
 
-if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) 
+var filter = vars.get("$param.FilterPreSet_param");
+if(!filter && vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) 
 {
     var statusInactive = $KeywordRegistry.contactStatus$inactive();
-    var filter = {
+    filter = JSON.stringify({
         type: "group",
         operator: "AND",
         childs: [{
@@ -19,7 +19,9 @@ if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER)
             key: statusInactive,
             value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
         }]
-    };
-
-    result.string(JSON.stringify(filter));
-}
\ No newline at end of file
+    });
+}
+if(filter)
+{
+    result.string(filter);
+}
diff --git a/entity/Person_entity/recordcontainers/db/conditionProcess.js b/entity/Person_entity/recordcontainers/db/conditionProcess.js
index 338811158360900835c45a56b055904518f65ed6..c24eb7b7e0e4ffb85e6660796fabfe866ec6129d 100644
--- a/entity/Person_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Person_entity/recordcontainers/db/conditionProcess.js
@@ -10,11 +10,15 @@ import("system.result");
 import("Sql_lib");
 
 var cond = newWhereIfSet("CONTACT.ORGANISATION_ID", "$param.OrgId_param")
-                .andIfSet("CONTACT.CONTACTID", "$param.ContactId_param");    
+.andIfSet("CONTACT.CONTACTID", "$param.ContactId_param");    
 
             
 if(vars.getString("$param.OnlyActive_param") == "true")
+{
     cond.and("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL());
+    cond.and("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete(), SqlBuilder.NOT_EQUAL());
+}
+    
 
 if (vars.exists("$param.ExcludedContactIds_param") && vars.get("$param.ExcludedContactIds_param"))
 {
@@ -38,7 +42,7 @@ if (vars.exists("$param.OnlyOwnSupervised_param") && vars.get("$param.OnlyOwnSup
         .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", $AttributeRegistry.responsibleADsupervisor())
         .and("AB_ATTRIBUTERELATION." + AttributeTypes.OBJECTSELECTION.databaseField, EmployeeUtils.sliceUserId(EmployeeUtils.getCurrentUserId())),
         SqlBuilder.EXISTS()
-    );
+        );
 }
 
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a53c389f9916191793616c6e838f781cd140e7c
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js
@@ -0,0 +1,16 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+import("DuplicateScanner_lib");
+
+var sqlOperator = SqlUtils.getSqlConditionalOperator(vars.get("$local.operator"));
+
+result.string(newWhere(
+    "CONTACT.CONTACTID",
+    DuplicateScannerUtils.getDuplicateConditionalListSql(
+        ["Person_entity"],
+        vars.get("$local.rawvalue"),
+        sqlOperator, true
+    ),
+    SqlBuilder.IN()
+));
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ba4942ef35de128bbda600380a3202f62e7d8bb
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js
@@ -0,0 +1,38 @@
+import("Util_lib");
+import("system.tools");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+var operator = vars.get("$local.operator");
+var rawvalue = vars.get("$local.rawvalue");
+var operator2 = null;
+var contactIDs = [];
+
+users = tools.getUsersByAttribute(tools.ISACTIVE, ["true"], tools.PROFILE_DEFAULT);
+
+rawvalue = (Utils.toBoolean(rawvalue));
+
+if(operator == "1" && !rawvalue ||  operator == "2" && rawvalue )
+{
+    operator2 = SqlBuilder.NOT_IN();
+}
+else if(operator == "1" && rawvalue ||  operator == "2" && !rawvalue)
+{
+    operator2 = SqlBuilder.IN();
+}
+else 
+{
+    result.string(newWhere().noResult().toString());
+}
+
+for (let i = 0; i < users.length; i++) 
+{
+    contactIDs.push(users[i].params.contactID);
+}
+
+if (contactIDs.length > 0 && operator2) 
+{
+    result.string(newWhere("CONTACT.CONTACTID", contactIDs, operator2).toString());
+}
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4462144da5638267f7c76cce0c779305ae80c089
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.object([["true", translate.text("Yes")], ["false", translate.text("No")]]);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/onDBDelete.js b/entity/Person_entity/recordcontainers/db/onDBDelete.js
index 56d4461823493222635f99ab42de361ec497f838..26d095805ed1fc2a0f944c3a99c4f7e49475057a 100644
--- a/entity/Person_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Person_entity/recordcontainers/db/onDBDelete.js
@@ -6,7 +6,7 @@ import("system.vars");
 import("DuplicateScanner_lib");
 
 var contactId = vars.get("$field.CONTACTID");
-DuplicateScannerUtils.deleteCachedDuplicate(contactId);
+DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]);
 
 new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
     .deleteAllAttributes();
diff --git a/entity/Person_entity/recordcontainers/db/onDBInsert.js b/entity/Person_entity/recordcontainers/db/onDBInsert.js
index 3385c553d10f5332ad4c946ea239bf7bcdf4b6bc..8d1c5ddea0bed7f36862a8423508f130794a3a07 100644
--- a/entity/Person_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Person_entity/recordcontainers/db/onDBInsert.js
@@ -4,6 +4,9 @@ import("Sql_lib");
 import("system.db");
 import("DataPrivacy_lib");
 import("system.vars");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateHasDuplicateEntry("Person_entity");
 
 //let targetEntity = "Person_entity";
 let contactId = vars.get("$local.uid");
diff --git a/entity/Person_entity/recordcontainers/db/onDBUpdate.js b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
index 0c29899fd4393c2528219ef9dc213eb151d10b18..100f1f714f83179a745ab4c332591ab988c0e60b 100644
--- a/entity/Person_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
@@ -8,6 +8,9 @@ import("Person_lib");
 import("Communication_lib");
 import("Entity_lib");
 import("StandardObject_lib");
+import("DuplicateScanner_lib");
+
+DuplicateScannerUtils.updateHasDuplicateEntry("Person_entity");
 
 var localChanged = vars.get("$local.changed");
 var orgChanged = false;
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7217d840fee842a5ba7e90b24829446b93fcf038
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+
+result.string(newWhere("CONTACT.PERSON_ID",
+    newSelect("SALESORDER.CONTACT_ID")
+    .from("CONTACT")
+    .join("SALESORDER", 
+        newWhere("CONTACT.CONTACTID = SALESORDER.CONTACT_ID"))
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.toString());
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..03e121a6f567a23f1c54c0474cb8ed8a4e414975
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js
@@ -0,0 +1,10 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+
+result.string(newWhere("CONTACT.CONTACT_ID",
+    newSelect("CONTRACT.CONTACT_ID")
+    .from("CONTRACT")
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.toString())
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a977f62ef6ff61d8d3125ca070722ac674897dfd
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js
@@ -0,0 +1,13 @@
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+result.string(newWhere("PERSON.PERSONID",
+    newSelect("CONTACT.PERSON_ID")
+    .from("CONTACT")
+    .join("OFFER", 
+        newWhere("CONTACT.CONTACTID = OFFER.CONTACT_ID"))
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.toString());
+
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..25c57f4cc5af755dee6679691c65a5210892b742
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js
@@ -0,0 +1,17 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+
+result.string(newWhere("CONTACT.CONTACT_ID",
+    newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+    .from("CAMPAIGN")
+    .join("CAMPAIGNPARTICIPANT", 
+        newWhere("CAMPAIGN.CAMPAIGNID = CAMPAIGNPARTICIPANT.CAMPAIGN_ID"))
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.orIfSet("CONTACT.CONTACT_ID",
+    newSelect("CAMPAIGN.EMPLOYEE_CONTACT_ID")
+    .from("CAMPAIGN")
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.toString());
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..41ef07ff58ec51eda018bed12cb5b0b2b657c348
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Communication_lib");
+
+var res = CommUtil.getStandardSubSqlMail();
+result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..320ae40ad1ba794b4e759037fa0f382b9af67696
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Communication_lib");
+
+var res = CommUtil.getStandardSubSqlPhone();
+result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f54fd98dd31046b7693d195bac361769219f0aad
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js
@@ -0,0 +1,16 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+
+
+result.string(newWhere("CONTACT.CONTACT_ID",
+    newSelect("TASK.REQUESTOR_CONTACT_ID")
+    .from("TASK")
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.orIfSet("CONTACT.CONTACT_ID",
+    newSelect("TASK.EDITOR_CONTACT_ID")
+    .from("TASK")
+    .whereIfSet(vars.get("$local.condition")),
+    SqlBuilder.IN())
+.toString());
\ No newline at end of file
diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod
index 9ce66331b3242cbbba9001036cd3e65dc920d156..2c460f59b8748cc6d79d1046db867b5d3614130c 100644
--- a/entity/QuickEntry_entity/QuickEntry_entity.aod
+++ b/entity/QuickEntry_entity/QuickEntry_entity.aod
@@ -237,6 +237,7 @@
         <entityParameter>
           <name>ContactIds_param</name>
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js</valueProcess>
+          <documentation>%aditoprj%/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc</documentation>
         </entityParameter>
         <entityParameter>
           <name>WithPrivatePersons_param</name>
diff --git a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..667cdd59e70d81d319b110ff44e24478616dae1d
--- /dev/null
+++ b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc
@@ -0,0 +1,2 @@
+returns a list of duplicate ids
+the index will be searched via the values entered in the edit frame
\ No newline at end of file
diff --git a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js
index 68ef6879ab48622e909ec092bb0314156746f96e..98b27caa01f480c5b39a7c62f68970a13519812b 100644
--- a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js
+++ b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js
@@ -2,6 +2,7 @@ import("system.indexsearch");
 import("system.vars");
 import("DuplicateScanner_lib");
 import("system.result");
+import("IndexSearch_lib");
 
 //trigger refresh
 vars.get("$field.FIRSTNAME");
@@ -11,11 +12,11 @@ var uid = vars.get("$field.UID");
 var idsForEmptyResult = JSON.stringify(["nodata"]);
 var duplicateScans = [];
 
-duplicateScans.push(["PersonDuplicates", "Person_entity", {"CONTACTID" : uid}]);
+duplicateScans.push(["Person_entity", {"CONTACTID" : uid}]);
 
 vars.get("$field.Contacts.insertedRows").forEach(function (contact)
 {
-    duplicateScans.push(["PersonDuplicates", "Person_entity", contact]);
+    duplicateScans.push(["Person_entity", contact]);
 });
 
 var organisationName = vars.get("$field.ORGANISATION_NAME");
@@ -34,7 +35,7 @@ if (organisationName || firstOrganisationAddress)
         address = firstOrganisationAddress["ADDRESS"];
     }
     
-    duplicateScans.push(["OrganisationDuplicates", "Organisation_entity", {
+    duplicateScans.push(["Organisation_entity", {
         "CONTACTID" : uid,
         "NAME" : organisationName,
         "STANDARD_CITY" : city,
@@ -43,9 +44,9 @@ if (organisationName || firstOrganisationAddress)
     }]);
 }
 
-var duplicates = duplicateScans.reduce(function (duplicateArr, [scannerName, entity, fieldValues])
+var duplicates = duplicateScans.reduce(function (duplicateArr, [entity, fieldValues])
 {
-    return duplicateArr.concat(_getDuplicates(scannerName, entity, fieldValues));
+    return duplicateArr.concat(_getDuplicates(entity, fieldValues));
 }, []);
 
 if (duplicates.length === 0)
@@ -54,34 +55,22 @@ else
     result.string(JSON.stringify(duplicates));
 
 
-function _getDuplicates (pScannerName, pEntity, pEntityFieldValues)
+function _getDuplicates(pEntity, pEntityFieldValues)
 {
-    var fieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(pScannerName, pEntity);
-    if (fieldsToLoad == null)
-        return [];
+    var scanner = DuplicateScannerUtils.getScannerByEntity(pEntity);
+    var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter);
+    var entityFields = indexsearchFilter.getFields();
+    entityFields.add(scanner.idField);
     
     var valuesToCheck = {};
-    
-    var allFieldsToLoad = fieldsToLoad.entityFields.concat(fieldsToLoad.entityIdField);
-    allFieldsToLoad.forEach(function (field)
-    {
+    entityFields.forEach(function(field) {
         var fieldValue = field in pEntityFieldValues
             ? pEntityFieldValues[field]
-            : vars.get("$field." + field);
-        if (fieldValue)
-            valuesToCheck[field] = fieldValue;
-    });
-    
-    //don't search if only the id field has a value
-    var fieldsToCheck = Object.keys(valuesToCheck);
-    if (fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && fieldsToLoad.entityIdField in valuesToCheck))
-        return [];
-    
-    var scanResults = DuplicateScannerUtils.scanForDuplicates(pScannerName, pEntity, valuesToCheck, null) || [];
-    var duplicateIds = scanResults.map(function (duplicate)
-    {
-        return duplicate[indexsearch.FIELD_ID];
+            : vars.exists("$field." + field) ? vars.get("$field." + field) : "";
+        valuesToCheck[field] = fieldValue || "";
     });
 
-    return duplicateIds;
+    var indexPattern = indexsearchFilter.buildQuery(valuesToCheck);
+    var duplicateIds = DuplicateScannerUtils.getDuplicateIds(pEntity, indexPattern, valuesToCheck[scanner.idField]);
+    return DuplicateScannerUtils.filterIgnored(pEntity, valuesToCheck[scanner.idField], duplicateIds);
 }
diff --git a/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js b/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js
index 8867a68b1cb4c9e3d8b2d4fdb5b61936c46cdf5b..0085da92a9397782f1ecdf2395e6cc517e6ed52e 100644
--- a/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js
+++ b/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js
@@ -3,10 +3,16 @@ import("system.tools");
 import("system.vars");
 import("system.result");
 
-var newChildRoles = [];
+var possibleChildRoles = [];
 var alias = SqlUtils.getSystemAlias();
 var parentRole = vars.get("$param.RoleId_param");
-var allCustomAndProjectRoles = tools.getAllRoles(["CUSTOM", "PROJECT"], true);
+var roleType = vars.get("$param.RoleType_param");
+var allPossibleRoles;
+
+if (roleType && roleType == "PROJECT") 
+    allPossibleRoles = tools.getAllRoles(["PROJECT"], true);
+else  
+    allPossibleRoles = tools.getAllRoles(["CUSTOM", "PROJECT"], true);
 
 var childRoles = newSelect("CHILD_ROLE", alias)
 .from("ASYS_ROLES_CHILDREN")
@@ -16,23 +22,15 @@ var childRoles = newSelect("CHILD_ROLE", alias)
 var parentIsAlreadyChildOf = newSelect("PARENT_ROLE", alias)
 .from("ASYS_ROLES_CHILDREN")
 .where("ASYS_ROLES_CHILDREN.CHILD_ROLE", parentRole)
-.table();
+.arrayColumn();
 
-for each (let role in allCustomAndProjectRoles) {
-    // dont show current role as possible child in dropdown
-    if (role[3] != parentRole) {
-        newChildRoles.push([role[3], role[3]]);
+for each (let role in allPossibleRoles) {
+    // dont add current role as possible child in dropdown
+    // check for cycles in hierarchy - dont add role which could create a cycle
+    // e.g. role A can't be child of role B while it is already parent of B
+    if (role[3] != parentRole && parentIsAlreadyChildOf.indexOf(role[3]) == -1) {
+        possibleChildRoles.push([role[3], role[3]]);
     }
 }
 
-// check for cyclces in hierarchy, A can't be child of B while it is already parent of B
-for each (let role in parentIsAlreadyChildOf) {
-    newChildRoles = newChildRoles.filter(function(childRole) {
-        if (role == childRole[0]) {
-            return false;
-        }
-        return true;
-    });
-}
-
-result.object(newChildRoles.sort());
\ No newline at end of file
+result.object(possibleChildRoles.sort());
\ No newline at end of file
diff --git a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js
index c66d85815d3f52def5b26491e9e6ccaff853f137..e957ab3b90b5a27c1b053e01e4eb4c284e1750de 100644
--- a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js
@@ -10,7 +10,7 @@ import("Util_lib");
 var res = [];
 var ids = vars.get("$local.idvalues");
 var disabledPhases = JSON.parse(vars.get("$param.DisabledPhases_param")) || [];
-var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase());
+var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase(), null, true);
 var selected = vars.exists("$param.CurrentPhase_param") && vars.get("$param.CurrentPhase_param");
 
 // filter only for steps reqested by the system
diff --git a/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
index 97523412f94b7d77b72b9a0973be454ca2a0bf04..b8fbd1a1da983471d2a8e72e6d06593e7e77cc4e 100644
--- a/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("Context_lib");
 
 var res = [];
-res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["AB_ATTRIBUTERELATION", "ACTIVITY"]});
+res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["AB_ATTRIBUTERELATION", "ACTIVITY", "FORECAST"]});
 res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["SALESPROJECT"]});
 
 res = JSON.stringify(res);//currently only strings  can be passed as param
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
index acc3d4d6af16f5a623d57e47879a2c4a6a9b679f..5cbdd8c359ad36edb185b4a03986f67b55ffc0e7 100644
--- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -223,12 +223,11 @@
       <children>
         <entityParameter>
           <name>OrgId_param</name>
-          <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js</valueProcess>
-          <expose v="true" />
         </entityParameter>
         <entityParameter>
           <name>OnlyShowContactIds_param</name>
           <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
+          <expose v="true" />
         </entityParameter>
       </children>
     </entityConsumer>
diff --git a/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js
index a11c9601feff0a1405f971aa786c5137ec825881..0dcb7912c8cee051ddf7ffa3e075e89df70c9cbc 100644
--- a/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("KeywordRegistry_basic");
 import("Contact_lib");
 import("system.result");
 import("system.vars");
@@ -8,6 +10,7 @@ var contactIdArray = newSelect("CONTACT.CONTACTID")
                                 .from("CONTACT")
                                 .where("CONTACT.ORGANISATION_ID", ContactUtils.getPersOrgIds(orgContactId)[2], SqlBuilder.EQUAL())
                                 .and("CONTACT.CONTACTID", orgContactId, SqlBuilder.NOT_EQUAL())
+                                .and("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL())
                                 .arrayColumn();
                                 
 result.object(contactIdArray)
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js
deleted file mode 100644
index c6e583e8bd66c32b6b8243af36cc6c2264c8ac18..0000000000000000000000000000000000000000
--- a/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.logging");
-import("Sql_lib");
-import("system.vars");
-import("system.result");
-
-var orgContactId = vars.get("$field.ORGANISATION_CONTACT_ID")
-var orgId = newSelect("CONTACT.ORGANISATION_ID").from("CONTACT").where("CONTACT.CONTACTID", orgContactId).cell();
-
-result.string(orgId);
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/WeblinkClick_entity.aod b/entity/WeblinkClick_entity/WeblinkClick_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..bd2d19c05be327649e1ada1374047855e7f984d3
--- /dev/null
+++ b/entity/WeblinkClick_entity/WeblinkClick_entity.aod
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>WeblinkClick_entity</name>
+  <title>Click</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <grantCreate v="false" />
+  <grantUpdate v="false" />
+  <grantDelete v="false" />
+  <titlePlural>Clicks</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>cd0eb69c-917b-43ba-b02f-2b05bff34cdd</name>
+          <entityName>BulkMail_entity</entityName>
+          <fieldName>Clicks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>cf3f4f2c-43bb-44c3-9099-95966d05623f</name>
+          <entityName>Link_entity</entityName>
+          <fieldName>Clicks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>2a2baa00-d7c3-4e88-a4e1-553a81b4ac77</name>
+          <entityName>Weblink_entity</entityName>
+          <fieldName>Clicks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>BROWSER</name>
+      <title>Browser</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>DATE_OPENED</name>
+      <title>Date Clicked</title>
+      <contentType>DATE</contentType>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>DEVICE_TYPE</name>
+      <title>Device Type</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>IP_ADDRESS</name>
+      <title>IP Address</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>WEBLINK_CLICKID</name>
+    </entityField>
+    <entityField>
+      <name>WEBLINK_ID</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>OPERATING_SYSTEM</name>
+      <title>Operating System</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Contact</title>
+      <consumer>Contacts</consumer>
+      <linkedContextProcess>%aditoprj%/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>INTEREST_ID</name>
+      <title>Interest</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>URL</name>
+      <title>Url</title>
+    </entityField>
+    <entityParameter>
+      <name>WeblinkId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>PERSON_ID</name>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ID</name>
+    </entityField>
+    <entityConsumer>
+      <name>Contacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <fromClauseProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>BROWSER.value</name>
+          <recordfield>WEBLINK_CLICK.BROWSER</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_OPENED.value</name>
+          <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DEVICE_TYPE.value</name>
+          <recordfield>WEBLINK_CLICK.DEVICE_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>IP_ADDRESS.value</name>
+          <recordfield>WEBLINK_CLICK.IP_ADDRESS</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEBLINK_CLICKID.value</name>
+          <recordfield>WEBLINK_CLICK.WEBLINK_CLICKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEBLINK_ID.value</name>
+          <recordfield>WEBLINK_CLICK.WEBLINK_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>MAIL_RUN.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OPERATING_SYSTEM.value</name>
+          <recordfield>WEBLINK_CLICK.OPERATING_SYSTEM</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <recordfield>MAIL_LOG.CONTACT_ID</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>MAIL_RUN.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INTEREST_ID.value</name>
+          <recordfield>MAIL_RUN.INTEREST_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>URL.value</name>
+          <recordfield>WEBLINK.URL</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ID.value</name>
+          <recordfield>CONTACT.PERSON_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_ID.value</name>
+          <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DEVICE_TYPE.displayValue</name>
+          <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>bec597d4-29cb-48b4-9d26-d98b57a2bea2</name>
+          <tableName>WEBLINK_CLICK</tableName>
+          <primaryKey>WEBLINK_CLICKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>fd8737aa-96fa-4831-98eb-6dd9082ff023</name>
+          <tableName>MAIL_LOG</tableName>
+          <primaryKey>MAIL_LOGID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>5d47ca65-a3b5-4cdf-97d7-3336a3601d2a</name>
+          <tableName>MAIL_RUN</tableName>
+          <primaryKey>MAIL_RUNID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>a3b88623-2fe7-4d05-b13b-b3bbaad6a2f3</name>
+          <tableName>WEBLINK</tableName>
+          <primaryKey>WEBLINKID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>5e8806a6-a5b6-4fb8-9672-6db23c9706a5</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js b/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..95bad245448809f807648349f7f23be11a6b3eca
--- /dev/null
+++ b/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+var res = ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID"));
+
+result.string(res||"Person");
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..12cab1c71355e0b5f0f2157e8574dbf2eed39696
--- /dev/null
+++ b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("WEBLINK_CLICK.WEBLINK_ID", "$param.WeblinkId_param")
+            .andIfSet("MAIL_RUN.OBJECT_TYPE", "$param.ObjectType_param")
+            .andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.ObjectRowId_param");
+            
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..44b1758c89376187fd4e3cb3b96a40110dab36c4
--- /dev/null
+++ b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("Sql_lib");
+
+var from = new SqlBuilder()
+    .from("WEBLINK_CLICK")
+    .join("MAIL_LOG","MAIL_LOG.MAIL_LOGID = WEBLINK_CLICK.MAIL_LOG_ID")
+    .join("MAIL_RUN","MAIL_RUN.MAIL_RUNID = MAIL_LOG.MAIL_RUN_ID")
+    .join("CONTACT","MAIL_LOG.CONTACT_ID = CONTACT.CONTACTID")
+    .join("WEBLINK","WEBLINK.WEBLINKID = WEBLINK_CLICK.WEBLINK_ID");
+
+result.string(from.toString());
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..08dda059e99f3d7917d6520e564b730883f79b08
--- /dev/null
+++ b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,6 @@
+import("system.db");
+import("system.result");
+
+result.object({
+    "WEBLINK_CLICK.DATE_OPENED" : db.DESCENDING
+});
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..72d1600cff8a2f7f9cd33dd3551e372cdec7790c
--- /dev/null
+++ b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Contact_lib");
+import("system.result");
+
+result.string(ContactUtils.getResolvingDisplaySubSql("MAIL_LOG.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c4b623c5f30e94b437527cb920a01c0866658423
--- /dev/null
+++ b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.deviceType(), "WEBLINK_CLICK.DEVICE_TYPE");
+result.string(sql);
diff --git a/entity/WeblinkTag_entity/WeblinkTag_entity.aod b/entity/WeblinkTag_entity/WeblinkTag_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..58b737c76c9448f9a9ce7fb40fe7633bdcf4a9d3
--- /dev/null
+++ b/entity/WeblinkTag_entity/WeblinkTag_entity.aod
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>WeblinkTag_entity</name>
+  <title>Tag</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <grantUpdate v="false" />
+  <grantUpdateProcess>%aditoprj%/entity/WeblinkTag_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <onInit>%aditoprj%/entity/WeblinkTag_entity/onInit.js</onInit>
+  <titlePlural>Tags</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>Tags</name>
+      <dependencies>
+        <entityDependency>
+          <name>4677d007-6467-4bc4-80ec-8230ee68d203</name>
+          <entityName>Weblink_entity</entityName>
+          <fieldName>WebtrackingTags</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>WeblinkId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>TAG</name>
+      <title>Tag</title>
+      <consumer>KeywordLinkTags</consumer>
+      <displayValueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>WEBLINKTAGID</name>
+    </entityField>
+    <entityField>
+      <name>WEBLINK_ID</name>
+      <title>Url</title>
+      <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityConsumer>
+      <name>KeywordLinkTags</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <conditionProcess>%aditoprj%/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>TAG.value</name>
+          <recordfield>WEBLINKTAG.TAG</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEBLINK_ID.value</name>
+          <recordfield>WEBLINKTAG.WEBLINK_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>WEBLINKTAG.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>WEBLINKTAG.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>WEBLINKTAG.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>WEBLINKTAG.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEBLINKTAGID.value</name>
+          <recordfield>WEBLINKTAG.WEBLINKTAGID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>2d72b86c-d2f6-46c9-bd82-5781ca93c630</name>
+          <tableName>WEBLINKTAG</tableName>
+          <primaryKey>WEBLINKTAGID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js
similarity index 68%
rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js
rename to entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js
index 5e6ef059738e0c724a468685333a5e257ac228ce..daf59b91c5ec63190a50eded0333513b4bb444a8 100644
--- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js
+++ b/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js
@@ -1,7 +1,7 @@
 import("system.util");
+import("system.vars");
 import("system.result");
 import("system.neon");
-import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
     result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js
similarity index 68%
rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js
rename to entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js
index a72892783bf2bd04fe353c47f1be0cb570bbb323..fe44d4d71b1063092bb6fa4619e86f84f45cbf96 100644
--- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js
+++ b/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js
@@ -1,7 +1,7 @@
 import("system.util");
+import("system.vars");
 import("system.result");
 import("system.neon");
-import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
     result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js b/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..99b326480d0411aa466ca7dc716c1bee110fe1d5
--- /dev/null
+++ b/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.string("LinkTags");
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js b/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..beebea09168f9f4766bae042d7e7f9ce35a70aed
--- /dev/null
+++ b/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("Keyword_lib");
+import("system.result");
+
+result.string(KeywordUtils.getViewValue("LinkTags", vars.get("$field.TAG")));
\ No newline at end of file
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js
similarity index 68%
rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js
rename to entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js
index e518bc75a9494e53a83613dedd943106e74fc00a..3ba15fa737b55fb359b165560ce8ea213df3bd85 100644
--- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js
+++ b/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js
@@ -1,7 +1,7 @@
 import("system.util");
+import("system.vars");
 import("system.result");
 import("system.neon");
-import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
     result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js
similarity index 68%
rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js
rename to entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js
index 6af880ae3e0e2b89b4eee8327ed49f1eefe458af..ee55f943ae28a210c66facb7fc6ec1931c857421 100644
--- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js
+++ b/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js
@@ -1,7 +1,7 @@
 import("system.util");
+import("system.vars");
 import("system.result");
 import("system.neon");
-import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
     result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..927a984275c538117230634c5c748ec9a0082225
--- /dev/null
+++ b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.util");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(vars.get("$param.WeblinkId_param"))
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/grantUpdateProcess.js b/entity/WeblinkTag_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..017ae1610931b3e01dea064cb348e276aa96aca4
--- /dev/null
+++ b/entity/WeblinkTag_entity/grantUpdateProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(true);
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/onInit.js b/entity/WeblinkTag_entity/onInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..e27158065612d9200a8ff432327d14e5aebd7267
--- /dev/null
+++ b/entity/WeblinkTag_entity/onInit.js
@@ -0,0 +1,14 @@
+import("system.vars");
+import("system.neon");
+import("system.logging");
+
+
+var recordState = vars.get("$sys.recordstate");
+if(recordState == neon.OPERATINGSTATE_NEW || recordState == neon.OPERATINGSTATE_EDIT)
+{ 
+    var insertedRow = null
+    if(vars.exists("$field.Tags.insertedRows")) 
+        insertedRow = vars.get("$field.Tags.insertedRows")
+    if(insertedRow.length == 1 && !insertedRow[0]["#"])
+        neon.deleteRecord("Tags", insertedRow[0]["#UID"])
+}
\ No newline at end of file
diff --git a/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c1f407304637771e7d8691cb3a1bf85c5041942
--- /dev/null
+++ b/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+  
+result.string(newWhereIfSet("WEBLINKTAG.WEBLINK_ID", vars.get("$param.WeblinkId_param")).toString())
\ No newline at end of file
diff --git a/entity/Weblink_entity/Weblink_entity.aod b/entity/Weblink_entity/Weblink_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..79e7260f731358ec5e0372fcb8e16d7e19f545b4
--- /dev/null
+++ b/entity/Weblink_entity/Weblink_entity.aod
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+  <name>Weblink_entity</name>
+  <title>Weblink</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <contentTitleProcess>%aditoprj%/entity/Weblink_entity/contentTitleProcess.js</contentTitleProcess>
+  <iconId>NEON:FILTER</iconId>
+  <titlePlural>Weblinks</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>URL</name>
+      <title>Url</title>
+      <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/url/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/Weblink_entity/entityfields/url/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>WEBLINKID</name>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+    </entityField>
+    <entityField>
+      <name>SCORE</name>
+      <title>Punktzahl</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#' Punkte'</outputFormat>
+      <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/score/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>LINKTYPE</name>
+      <title>Link Type</title>
+      <consumer>KeywordLinkType</consumer>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>Tags</name>
+      <title>Tags</title>
+    </entityField>
+    <entityConsumer>
+      <name>WebtrackingTags</name>
+      <selectionMode>MULTI</selectionMode>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WeblinkTag_entity</entityName>
+        <fieldName>Tags</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>WeblinkId_param</name>
+          <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/webtrackingtags/children/linkid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>LINKTYPE_ICON</name>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityConsumer>
+      <name>KeywordLinkType</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>PLACEHOLDER</name>
+      <title>Placeholder</title>
+      <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js</displayValueProcess>
+      <onValidation>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/onValidation.js</onValidation>
+    </entityField>
+    <entityConsumer>
+      <name>Clicks</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WeblinkClick_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>WeblinkId_param</name>
+          <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>WorkflowDefinitions</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowDefinition_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>WORKFLOWPROCESSDEFINITION_KEY</name>
+      <title>Workflow</title>
+      <consumer>WorkflowDefinitions</consumer>
+      <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>ISREDIRECT</name>
+      <title>Redirect</title>
+      <contentType>BOOLEAN</contentType>
+      <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <conditionProcess>%aditoprj%/entity/Weblink_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>WEBLINK.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>WEBLINK.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEBLINKID.value</name>
+          <recordfield>WEBLINK.WEBLINKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SCORE.value</name>
+          <recordfield>WEBLINK.SCORE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>URL.value</name>
+          <recordfield>WEBLINK.URL</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LINKTYPE.value</name>
+          <recordfield>WEBLINK.LINKTYPE</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>WEBLINK.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>WEBLINK.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>Tags.value</name>
+          <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LINKTYPE.displayValue</name>
+          <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PLACEHOLDER.value</name>
+          <recordfield>WEBLINK.PLACEHOLDER</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WORKFLOWPROCESSDEFINITION_KEY.value</name>
+          <recordfield>WEBLINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ISREDIRECT.value</name>
+          <recordfield>WEBLINK.ISREDIRECT</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>d7ef8574-3b73-4435-93f6-74bb60a86c1b</name>
+          <tableName>WEBLINK</tableName>
+          <primaryKey>WEBLINKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js b/entity/Weblink_entity/contentTitleProcess.js
similarity index 56%
rename from entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js
rename to entity/Weblink_entity/contentTitleProcess.js
index ea14ae6b612db05a0e3a34e900ca16547f9ed208..532ae9cda8ed3a4a4678499bcee1c551ebe48021 100644
--- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js
+++ b/entity/Weblink_entity/contentTitleProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string("Organisation_entity");
\ No newline at end of file
+result.string(vars.get("$field.URL"));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js b/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..39f7dede612ab2f9b2256dbde6b40f846fbca0d3
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.WEBLINKID"));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/date_new/valueProcess.js b/entity/Weblink_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..83de1a18d6fcfe9926e5cc8f87cc552b779987f4
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+   result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/isredirect/stateProcess.js b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..31b3cd25a65e38f049ef0a5fdfffcba9bd830d4a
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.neon");
+
+var linktype = vars.get("$field.LINKTYPE");
+
+if (linktype == $KeywordRegistry.weblinkType$EMail())
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/isredirect/valueProcess.js b/entity/Weblink_entity/entityfields/isredirect/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e9b28e10759f126432a2a9d86d3684f4ac33ad2
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/isredirect/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW )
+{
+    result.string("0");
+}
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js b/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..05de1cabb8d01404fedbb9bae7b14749fb75b9a2
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.weblinkType());
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js b/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2378458ad3051dcd29b6a54ea0558156d9747ff5
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+
+var res = ""
+if(vars.get("$field.LINKTYPE") == 1)//leadforensics
+    res = "NEON:IMPORT"
+
+if(vars.get("$field.LINKTYPE")=="EMAIL")
+    res = "VAADIN:MAILBOX"
+    
+result.string(res);
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js b/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f02de4a47ade61409736bc698d4c448149eadc2e
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.vars");
+import("Placeholder_lib");
+
+var placeholder = vars.get("$field.PLACEHOLDER");
+
+if (placeholder)
+{
+    result.string(PlaceholderUtils.formatPlaceholder(placeholder));
+}
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/placeholder/onValidation.js b/entity/Weblink_entity/entityfields/placeholder/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..394f99c96f5cbe9c7a5111383550717079a7352e
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/placeholder/onValidation.js
@@ -0,0 +1,22 @@
+import("system.result");
+import("system.vars");
+import("Placeholder_lib");
+import("Sql_lib");
+
+if (vars.get("$local.value"))
+{
+    var defaultPlaceholders = PlaceholderUtils.getPlaceholders();
+    var linkPlaceholders = newSelect("WEBLINK.PLACEHOLDER")
+        .from("WEBLINK")
+        .where("WEBLINK.WEBLINKID", vars.get("$field.WEBLINKID"), SqlBuilder.NOT_EQUAL())
+        .and("WEBLINK.PLACEHOLDER is not null")
+        .arrayColumn();
+                
+    var defaultPlaceholderNames = defaultPlaceholders.map(function(placeholder){return placeholder.placeholderName});
+    
+    if(defaultPlaceholderNames.includes(vars.get("$local.value")) || linkPlaceholders.includes("$local.value"))
+    {
+        result.string("Placeholders must be unique")
+    }
+
+}
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/placeholder/stateProcess.js b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9be3319eefba688cc1103d3f86a6275d936b0f10
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js
@@ -0,0 +1,13 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.neon");
+
+
+var linktype = vars.get("$field.LINKTYPE")
+var res = neon.COMPONENTSTATE_INVISIBLE
+if (linktype == $KeywordRegistry.weblinkType$EMail())
+{
+    res = neon.COMPONENTSTATE_EDITABLE;
+}
+result.string(res);
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/score/valueProcess.js b/entity/Weblink_entity/entityfields/score/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..73553d1782a7e8f4182dee2a7abf23aeb48da737
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/score/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(0)
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/url/onValidation.js b/entity/Weblink_entity/entityfields/url/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..789eb86303fe57cc5de8c7bc23d243d90c03d6c4
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/url/onValidation.js
@@ -0,0 +1,16 @@
+import("system.translate");
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Sql_lib");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value"))
+{
+    if (newSelect("URL").from("WEBLINK").where("WEBLINK.URL", vars.get("$local.value")).cell())
+        result.string(translate.text("Url must be unique"));
+    
+    if (vars.get("$field.ISREDIRECT") == "1" && !/^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g.test(vars.get("$local.value")))
+    {
+        result.string(translate.text("Redirect needs a full Url with http/https"));
+    }
+}
diff --git a/entity/Weblink_entity/entityfields/url/stateProcess.js b/entity/Weblink_entity/entityfields/url/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf56cc956c9ee7f08f53f30d9f1991838154bffc
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/url/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+    result.string(neon.COMPONENTSTATE_EDITABLE)
+else
+    result.string(neon.COMPONENTSTATE_READONLY)
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/user_new/valueProcess.js b/entity/Weblink_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9c2b5e127b9ecbf3ad03794b46e3dbad137f25b
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+   result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js b/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..647f04b4516a64fb021acb531052094c641dc2ee
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.result");
+result.string(vars.get("$field.WEBLINKID"));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4172453ca7446af20c19646ab6677cb871c5f06b
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.loadContentTitle("WorkflowDefinition_entity", vars.get("$field.WORKFLOWPROCESSDEFINITION_KEY")));
\ No newline at end of file
diff --git a/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..177f86ce6cfe6bc584f4e6f3aba754c15d208220
--- /dev/null
+++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js
@@ -0,0 +1,18 @@
+import("system.result");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.neon");
+
+var linktype = vars.get("$field.LINKTYPE");
+var redirect = vars.get("$field.ISREDIRECT");
+
+if (linktype == $KeywordRegistry.weblinkType$EMail() && redirect == "1")
+{
+
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
+else
+{
+
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
\ No newline at end of file
diff --git a/entity/Weblink_entity/recordcontainers/db/conditionProcess.js b/entity/Weblink_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c1d7a1352f22e5f793e5a600e690357bdaf62fd
--- /dev/null
+++ b/entity/Weblink_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.result");
+import("Sql_lib");
+
+
+var cond = newWhere();
+
+cond.and("url not like '/fileadmin/uploads/Dokumente/%' ");
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..38161951b9087fbc4b8c50bf683c86f7739c834e
--- /dev/null
+++ b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.db");
+result.object({
+    "WEBLINK.URL": db.ASCENDING
+});
\ No newline at end of file
diff --git a/entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js
similarity index 100%
rename from entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js
rename to entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js
diff --git a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc71aa0d01711dcadf67a55903df7ee3499f5e89
--- /dev/null
+++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+result.string("(SELECT GROUP_CONCAT(CONCAT(' ', TITLE)) from ab_keyword_entry join WEBLINKTAG on "
++" KEYID = WEBLINKTAG.TAG join ab_keyword_category on ab_keyword_category_id = ab_keyword_categoryid where WEBLINKTAG.WEBLINK_ID = WEBLINKID and AB_KEYWORD_CATEGORY.NAME = 'WeblinkTags')");
\ No newline at end of file
diff --git a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..92a7316b871e779d6a203b3bcc72352f3f95cc15
--- /dev/null
+++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.weblinkType(), "WEBLINK.LINKTYPE"));
\ No newline at end of file
diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
index 17bfa5940323c1306ad8b4a09841f9e3cc53e973..97fcd7f503d021ab57d135da7912aa04363a6d0a 100644
--- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
+++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
@@ -28,6 +28,12 @@
           <fieldName>WorkflowDefinitions</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>349ab9d2-edbb-4571-be14-3fb749bfff50</name>
+          <entityName>Weblink_entity</entityName>
+          <fieldName>WorkflowDefinitions</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 7a23534af0c82d7804e1c40ff68e48726a0aee77..25609bc12adf79abfdaf5b52b9944a6a0db3423d 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -8076,6 +8076,12 @@
     <entry>
       <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key>
     </entry>
+    <entry>
+      <key>The duplicate row corrosponding to %0 has been rebuild</key>
+    </entry>
+    <entry>
+      <key>Duplicaterow rebuild</key>
+    </entry>
     <entry>
       <key>Edit HTML</key>
     </entry>
@@ -8088,6 +8094,30 @@
     <entry>
       <key>Add to offer</key>
     </entry>
+    <entry>
+      <key>Event Data</key>
+    </entry>
+    <entry>
+      <key>On Site</key>
+    </entry>
+    <entry>
+      <key>Event Type</key>
+    </entry>
+    <entry>
+      <key>Event Begin</key>
+    </entry>
+    <entry>
+      <key>Event</key>
+    </entry>
+    <entry>
+      <key>other</key>
+    </entry>
+    <entry>
+      <key>Event End</key>
+    </entry>
+    <entry>
+      <key>On site</key>
+    </entry>
     <entry>
       <key>Participant is already participating</key>
     </entry>
@@ -8101,46 +8131,115 @@
       <key>Traits have already been defined for this salesproject phase.</key>
     </entry>
     <entry>
-      <key>Event Data</key>
+      <key>New child product</key>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>Communication: Link</key>
     </entry>
     <entry>
-      <key>Event Type</key>
+      <key>Communication: Phone</key>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>Communication: Mail</key>
     </entry>
     <entry>
-      <key>Communication: Link</key>
+      <key>Vacation</key>
     </entry>
     <entry>
-      <key>Event Begin</key>
+      <key>Price could not be determined</key>
     </entry>
     <entry>
-      <key>Communication: Phone</key>
+      <key>Channel type</key>
     </entry>
     <entry>
-      <key>Event</key>
+      <key>Allowed</key>
     </entry>
     <entry>
-      <key>other</key>
+      <key>Rejected</key>
     </entry>
     <entry>
-      <key>Communication: Mail</key>
+      <key>Communication Settings</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>Advertising</key>
     </entry>
     <entry>
-      <key>Event End</key>
+      <key>Test Recipient</key>
     </entry>
     <entry>
-      <key>On site</key>
+      <key>Remove Test Recipient</key>
     </entry>
     <entry>
-      <key>Price could not be determined</key>
+      <key>Set Test Recipient</key>
+    </entry>
+    <entry>
+      <key>Test Run Actions</key>
+    </entry>
+    <entry>
+      <key>Test Recipients</key>
+    </entry>
+    <entry>
+      <key>Object not found</key>
+    </entry>
+    <entry>
+      <key>Use for test run</key>
+    </entry>
+    <entry>
+      <key>Don't use for test run</key>
+    </entry>
+    <entry>
+      <key>Interest</key>
+    </entry>
+    <entry>
+      <key>Subscribed</key>
+    </entry>
+    <entry>
+      <key>Not subscribed</key>
+    </entry>
+    <entry>
+      <key>Test Run</key>
+    </entry>
+    <entry>
+      <key>Placeholder</key>
+    </entry>
+    <entry>
+      <key>Link Type</key>
+    </entry>
+    <entry>
+      <key>Clicks</key>
+    </entry>
+    <entry>
+      <key>Device Type</key>
+    </entry>
+    <entry>
+      <key>Mobile</key>
+    </entry>
+    <entry>
+      <key>Console</key>
+    </entry>
+    <entry>
+      <key>IP Address</key>
+    </entry>
+    <entry>
+      <key>Operating System</key>
+    </entry>
+    <entry>
+      <key>Date Clicked</key>
+    </entry>
+    <entry>
+      <key>Send Date</key>
+    </entry>
+    <entry>
+      <key>Filter can't be empty</key>
+    </entry>
+    <entry>
+      <key>Opening Date</key>
+    </entry>
+    <entry>
+      <key>Recipient filter</key>
+    </entry>
+    <entry>
+      <key>Url must be unique</key>
     </entry>
     <entry>
       <key>Volume(€)</key>
@@ -8151,9 +8250,6 @@
     <entry>
       <key>Invalid value</key>
     </entry>
-    <entry>
-      <key>Object not found</key>
-    </entry>
     <entry>
       <key>Value is too big, the maximum is %0</key>
     </entry>
@@ -8275,151 +8371,167 @@
       <key>Shows the global Covid Cases in a Table</key>
     </entry>
     <entry>
-      <key>Buyer</key>
+      <key>Global Cases Table</key>
     </entry>
     <entry>
-      <key>Internal responsible</key>
+      <key>Global Cases</key>
     </entry>
     <entry>
-      <key>Global Cases Table</key>
+      <key>New Cases</key>
     </entry>
     <entry>
-      <key>Global Cases</key>
+      <key>Shows the new daily Covid Cases</key>
     </entry>
     <entry>
-      <key>Initiator</key>
+      <key>${SALESPROJECT_PROSPECT}</key>
     </entry>
     <entry>
-      <key>New Cases</key>
+      <key>${SALESPROJECT_LEAD}</key>
     </entry>
     <entry>
-      <key>Internal Sales</key>
+      <key>${SALESPROJECT_CONTACT}</key>
     </entry>
     <entry>
-      <key>Influencer</key>
+      <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key>
     </entry>
     <entry>
-      <key>Shows the new daily Covid Cases</key>
+      <key>Title (translated)</key>
     </entry>
     <entry>
-      <key>Shows the global Covid Cases in a Table</key>
+      <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key>
     </entry>
     <entry>
-      <key>Buyer</key>
+      <key>Competitions/Competitor</key>
     </entry>
     <entry>
-      <key>Internal responsible</key>
+      <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key>
     </entry>
     <entry>
-      <key>Global Cases Table</key>
+      <key>Invalid attribute count</key>
     </entry>
     <entry>
-      <key>Global Cases</key>
+      <key>Redirect needs a full Url with http/https</key>
     </entry>
     <entry>
-      <key>Initiator</key>
+      <key>${IGNORE_DUPLICATE}</key>
     </entry>
     <entry>
-      <key>New Cases</key>
+      <key>${UNIGNORE_DUPLICATE}</key>
     </entry>
     <entry>
-      <key>Internal Sales</key>
+      <key>View all duplicates from this scanner</key>
     </entry>
     <entry>
-      <key>Influencer</key>
+      <key>Rebuild all duplicates from the selected scanners</key>
     </entry>
     <entry>
-      <key>Shows the new daily Covid Cases</key>
+      <key>View duplicates</key>
     </entry>
     <entry>
-      <key>Event Data</key>
+      <key>Rebuild selected entries</key>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>Ignored</key>
+      <value>Ignoriert</value>
     </entry>
     <entry>
-      <key>Event Type</key>
+      <key>Not enough room in campaignstep</key>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>Location of the Event</key>
     </entry>
     <entry>
-      <key>Communication: Link</key>
+      <key>Migrate Probabilities</key>
     </entry>
     <entry>
-      <key>Event Begin</key>
+      <key>change DSGVO Relevance</key>
     </entry>
     <entry>
-      <key>Communication: Phone</key>
+      <key>No customer since creation &gt; 3 years</key>
     </entry>
     <entry>
-      <key>Event</key>
+      <key>advanced training</key>
     </entry>
     <entry>
-      <key>other</key>
+      <key>No valid sales contract</key>
     </entry>
     <entry>
-      <key>Communication: Mail</key>
+      <key>Count Usage</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>Marked for deletion</key>
     </entry>
     <entry>
-      <key>Event End</key>
+      <key>Add Manuel Delete Flag</key>
     </entry>
     <entry>
-      <key>On site</key>
+      <key>DSGVO Configuration</key>
     </entry>
     <entry>
-      <key>Event Data</key>
+      <key>Privacy Notice</key>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>Code</key>
     </entry>
     <entry>
-      <key>Event Type</key>
+      <key>Mark to Delete</key>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>Is an active employee</key>
     </entry>
     <entry>
-      <key>Communication: Link</key>
+      <key>Open Contacts</key>
     </entry>
     <entry>
-      <key>Event Begin</key>
+      <key>Integer</key>
     </entry>
     <entry>
-      <key>Buying center and internal project team</key>
+      <key>anonymize Persons</key>
     </entry>
     <entry>
-      <key>Communication: Phone</key>
+      <key>DSGVO</key>
     </entry>
     <entry>
-      <key>Event</key>
+      <key>Event Planer</key>
     </entry>
     <entry>
-      <key>other</key>
+      <key>is DSGVO Relevant</key>
     </entry>
     <entry>
-      <key>Communication: Mail</key>
+      <key>Manuel set</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>consent pending</key>
     </entry>
     <entry>
-      <key>Event End</key>
+      <key>Mark selection to delete</key>
     </entry>
     <entry>
-      <key>On site</key>
+      <key>Mark all to delete</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_PROSPECT}</key>
+      <key>Manually set</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_LEAD}</key>
+      <key>Add Manual Delete Flag</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_CONTACT}</key>
+      <key>Delete Delay in Days</key>
+    </entry>
+    <entry>
+      <key>Do you want to delete the flags of the already maked Persons?</key>
+    </entry>
+    <entry>
+      <key>Do you really want to anonymize all marked persons?</key>
+    </entry>
+    <entry>
+      <key>FILE MISSING</key>
+    </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaign</key>
+    </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaignstep</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index e452e7706338b32c9653d260c13643d774291c76..827c44f0eb0e86f04f369a2f32bef89b79bef0dd 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -10,6 +10,30 @@
       <key>Event End</key>
       <value>Veranstaltungs Ende</value>
     </entry>
+    <entry>
+      <key>Redirect needs a full Url with http/https</key>
+      <value>Für die Weiterleitung wird eine vollständige Url mit http/https benötigt</value>
+    </entry>
+    <entry>
+      <key>Use for test run</key>
+      <value>Bei Testversand verwenden</value>
+    </entry>
+    <entry>
+      <key>Not subscribed</key>
+      <value>Nicht abonniert</value>
+    </entry>
+    <entry>
+      <key>Set Test Recipient</key>
+      <value>Testempfänger setzen</value>
+    </entry>
+    <entry>
+      <key>Url must be unique</key>
+      <value>Die Url muss eindeutig sein!</value>
+    </entry>
+    <entry>
+      <key>Opening Date</key>
+      <value>Öffnungsdatum</value>
+    </entry>
     <entry>
       <key>%0 out of %1 records were changed to \"%2\".\n %3 record/s could not be updated.</key>
       <value>%0 von %1 Datensätze wurden auf \"%2\" geändert.\n%3 Datensätze konnten nicht akutualisiert werden.</value>
@@ -18,6 +42,10 @@
       <key>Value is too big, the maximum is %0</key>
       <value>Wert ist zu groß, das Maximum ist %0</value>
     </entry>
+    <entry>
+      <key>Not enough room in campaignstep</key>
+      <value>In der Kampagnenstufe ist nicht genug Platz vorhanden</value>
+    </entry>
     <entry>
       <key>The max participants count can not be equal or less then 0</key>
       <value>Die maximale Teilnehmerzahl muss größer 0 sein!</value>
@@ -39,10 +67,22 @@
       <key>Already existing</key>
       <value>Bereits existierende</value>
     </entry>
+    <entry>
+      <key>Rejected</key>
+      <value>Abgelehnt</value>
+    </entry>
+    <entry>
+      <key>Channel type</key>
+      <value>Kanalart</value>
+    </entry>
     <entry>
       <key>discounted Vat</key>
       <value>Rbt. Mehrwertssteuer</value>
     </entry>
+    <entry>
+      <key>Filter can't be empty</key>
+      <value>Filter darf nicht leer sein</value>
+    </entry>
     <entry>
       <key>Organisation Country</key>
       <value>Firma Land</value>
@@ -87,6 +127,10 @@
       <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key>
       <value>Das Bearbeiten von EML-Dateien ist hier nicht möglich. Um den Inhalt zu ändern, können Sie die Vorlage herunterladen, bearbeiten und erneut hochladen.</value>
     </entry>
+    <entry>
+      <key>Date Clicked</key>
+      <value>Klickdatum</value>
+    </entry>
     <entry>
       <key>Value must be an integer</key>
       <value>Wert muss eine Ganzzahl sein</value>
@@ -103,6 +147,10 @@
       <key>Checklist entries</key>
       <value>Checklisteneinträge</value>
     </entry>
+    <entry>
+      <key>Operating System</key>
+      <value>Betriebssystem</value>
+    </entry>
     <entry>
       <key>Organisation Region</key>
       <value>Firma Kreis</value>
@@ -119,6 +167,10 @@
       <key>Project team: \"Project manager\"</key>
       <value>Projektteam: \"Projektmanager\"</value>
     </entry>
+    <entry>
+      <key>Send Date</key>
+      <value>Versanddatum</value>
+    </entry>
     <entry>
       <key>Organisation District</key>
       <value>Firma Gebiet</value>
@@ -135,14 +187,26 @@
       <key>descending</key>
       <value>absteigend</value>
     </entry>
+    <entry>
+      <key>Recipient filter</key>
+      <value>Empfänger Filter</value>
+    </entry>
     <entry>
       <key>Salesproject phases</key>
       <value>Vertriebsprojektphasen</value>
     </entry>
+    <entry>
+      <key>Test Recipient</key>
+      <value>Test Empfänger</value>
+    </entry>
     <entry>
       <key>To skip a salesproject phase isn't allowed.</key>
       <value>Das Ãœberspringen einer Vertriebsprojektphase ist nicht erlaubt.</value>
     </entry>
+    <entry>
+      <key>IP Address</key>
+      <value>IP-Adresse</value>
+    </entry>
     <entry>
       <key>Its not allowed to step over some salesproject phases.</key>
       <value>Es ist nicht erlaubt Vertriebsprojektphasen zu überspringen.</value>
@@ -511,6 +575,10 @@
       <key>Object selection</key>
       <value>Objektauswahl</value>
     </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaign</key>
+      <value>Alle ausgewählten Datensätze sind schon in der Kampagne.</value>
+    </entry>
     <entry>
       <key>Send</key>
       <value>Senden</value>
@@ -995,6 +1063,10 @@
       <key>Extend - request count</key>
       <value>Verlängert - Anfrageanzahl</value>
     </entry>
+    <entry>
+      <key>Console</key>
+      <value>Konsole</value>
+    </entry>
     <entry>
       <key>The person is already associated with another employee!</key>
       <value>Die Person ist bereits mit einem anderen Mitarbeiter verknüpft!</value>
@@ -1075,6 +1147,10 @@
       <key>We received data from</key>
       <value>Wir haben Daten erhalten von</value>
     </entry>
+    <entry>
+      <key>Allowed</key>
+      <value>Erlaubt</value>
+    </entry>
     <entry>
       <key>${SALESPROJECT_MEMBER}</key>
       <value>Projektteam</value>
@@ -1095,6 +1171,10 @@
       <key>Steps</key>
       <value>Stufen</value>
     </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaignstep</key>
+      <value>Alle ausgewählten Datensätze sind schon in der Kampagnenstufe.</value>
+    </entry>
     <entry>
       <key>Days inactive</key>
       <value>Tage inaktiv</value>
@@ -1412,6 +1492,10 @@
       <key>ended (done)</key>
       <value>abgeschlossen (erledigt)</value>
     </entry>
+    <entry>
+      <key>Interest</key>
+      <value>Interesse</value>
+    </entry>
     <entry>
       <key>Document Template</key>
       <value>Dokumentvorlage</value>
@@ -2239,6 +2323,10 @@
     <entry>
       <key>#,##0.00</key>
     </entry>
+    <entry>
+      <key>Advertising</key>
+      <value>Werbung</value>
+    </entry>
     <entry>
       <key>Latin Name</key>
       <value>Lateinischer Name</value>
@@ -2443,6 +2531,10 @@
       <key>subject</key>
       <value>Betreff</value>
     </entry>
+    <entry>
+      <key>Mobile</key>
+      <value>Handy</value>
+    </entry>
     <entry>
       <key>Document templates</key>
       <value>Dokumentvorlagen</value>
@@ -2995,6 +3087,10 @@
       <key>Taiwan</key>
       <value>Taiwan</value>
     </entry>
+    <entry>
+      <key>Clicks</key>
+      <value>Klicks</value>
+    </entry>
     <entry>
       <key>Central African Republic</key>
       <value>Zentralafrikanische Republik</value>
@@ -3127,6 +3223,10 @@
       <key>It lists all areas that the user has to take care of.</key>
       <value>Es werden alle Gebiete aufgelistet, die der Benutzer betreuen muss.</value>
     </entry>
+    <entry>
+      <key>Device Type</key>
+      <value>Geräteart</value>
+    </entry>
     <entry>
       <key>Company_size</key>
       <value>Unternehmen_Größe</value>
@@ -3435,6 +3535,10 @@
       <key>Iceland</key>
       <value>Island</value>
     </entry>
+    <entry>
+      <key>Test Run Actions</key>
+      <value>Testversand Aktionen</value>
+    </entry>
     <entry>
       <key>Oman</key>
       <value>Oman</value>
@@ -8022,6 +8126,10 @@
     <entry>
       <key>SqlBuilder: pValue has to be a jdito variable which returns something different than null. (use *IfSet functions if you need optional conditions which are just ignored if value is null or undefined)</key>
     </entry>
+    <entry>
+      <key>Communication Settings</key>
+      <value>Werbeeinstellungen</value>
+    </entry>
     <entry>
       <key>SqlBuilder: invalid value-type for pCondition</key>
     </entry>
@@ -8707,6 +8815,10 @@ Bitte Datumseingabe prüfen</value>
       <key>The status of the order was changed to \"sent\".</key>
       <value>Der Status des Belegs wurde auf \"versendet\" gesetzt.</value>
     </entry>
+    <entry>
+      <key>Placeholder</key>
+      <value>Platzhalter</value>
+    </entry>
     <entry>
       <key>Yearly</key>
       <value>jährlich</value>
@@ -9499,6 +9611,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Create model</key>
       <value>Modell erstellen</value>
     </entry>
+    <entry>
+      <key>Subscribed</key>
+      <value>Abonniert</value>
+    </entry>
     <entry>
       <key>Recipients after adding</key>
       <value>Empfänger nach dem hinzufügen</value>
@@ -9798,14 +9914,26 @@ Bitte Datumseingabe prüfen</value>
       <key>Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!</key>
       <value>Änderungen an dem Wert mit der höchsten Punktzahl beeinflußen die Klassifizierungsbewertungen der Klassifizierung!</value>
     </entry>
+    <entry>
+      <key>Remove Test Recipient</key>
+      <value>Testempfänger entfernen</value>
+    </entry>
     <entry>
       <key>Hint</key>
       <value>Hinweis</value>
     </entry>
+    <entry>
+      <key>Test Recipients</key>
+      <value>Test Empfänger</value>
+    </entry>
     <entry>
       <key>Parent Filter</key>
       <value>Ãœbergeordneter Filter</value>
     </entry>
+    <entry>
+      <key>Link Type</key>
+      <value>Linkart</value>
+    </entry>
     <entry>
       <key>Filter information</key>
       <value>Informationen Filtern</value>
@@ -10275,6 +10403,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Channel</key>
+      <value>Kanal</value>
     </entry>
     <entry>
       <key>Import from Teams</key>
@@ -10414,6 +10543,14 @@ Bitte Datumseingabe prüfen</value>
       <key>Max Points</key>
       <value>Maximale Punktzahl</value>
     </entry>
+    <entry>
+      <key>Don't use for test run</key>
+      <value>Bei Testversand nicht verwenden</value>
+    </entry>
+    <entry>
+      <key>Test Run</key>
+      <value>Testlauf</value>
+    </entry>
     <entry>
       <key>Are you sure you want to reload all classifications using the current classificationgradings?</key>
       <value>Bist du dir sicher, dass du alle Klassifizierungen anhand der konfigurierten Bewertungen neuberechnen willst?</value>
@@ -10847,6 +10984,14 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Calendar week</key>
     </entry>
+    <entry>
+      <key>Duplicaterow rebuild</key>
+      <value>Dubletten neu berechnet</value>
+    </entry>
+    <entry>
+      <key>The duplicate row corrosponding to %0 has been rebuild</key>
+      <value>Die Dupletten des %0 filters wurden neu berechnet</value>
+    </entry>
     <entry>
       <key>HTML Editor</key>
     </entry>
@@ -10854,6 +10999,9 @@ Bitte Datumseingabe prüfen</value>
       <key>Participant is already participating</key>
       <value>Teilnehmer nimmt bereits teil.</value>
     </entry>
+    <entry>
+      <key>On site</key>
+    </entry>
     <entry>
       <key>incl. Dependencies</key>
       <value>incl. Abhänigkeiten</value>
@@ -10864,10 +11012,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Traits have already been defined for this salesproject phase.</key>
-      <value>Für diese Vertriebsprojektphase wurden schon Merkmale festgelegt.</value>
-    </entry>
-    <entry>
-      <key>On site</key>
     </entry>
     <entry>
       <key>Vacation</key>
@@ -10875,11 +11019,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Price could not be determined</key>
-      <value>Preis konnte nicht ermittelt werden</value>
-    </entry>
-    <entry>
-      <key>Buying center and internal project team</key>
-      <value>Buyingcenter und internes Projektteam</value>
     </entry>
     <entry>
       <key>Feasibility</key>
@@ -10905,6 +11044,34 @@ Bitte Datumseingabe prüfen</value>
       <key>Internal responsible</key>
       <value>Intern: Gebietsverantwortlich</value>
     </entry>
+    <entry>
+      <key>${IGNORE_DUPLICATE}</key>
+      <value>Datensatz ist keine Dublette</value>
+    </entry>
+    <entry>
+      <key>${UNIGNORE_DUPLICATE}</key>
+      <value>Datensatz ist eine Dublette</value>
+    </entry>
+    <entry>
+      <key>Rebuild selected entries</key>
+      <value>Ausgewählte Einträge neu aufbauen</value>
+    </entry>
+    <entry>
+      <key>Rebuild all duplicates from the selected scanners</key>
+      <value>Ausgewählte Einträge neu aufbauen</value>
+    </entry>
+    <entry>
+      <key>View duplicates</key>
+      <value>Dubletten anzeigen</value>
+    </entry>
+    <entry>
+      <key>View all duplicates from this scanner</key>
+      <value>Alle Duplikate dieses Scanners anzeigen</value>
+    </entry>
+    <entry>
+      <key>Ignored</key>
+      <value>Ignoriert</value>
+    </entry>
     <entry>
       <key>Invalid attribute count</key>
       <value>Unzulässige Attributanzahl</value>
@@ -10917,6 +11084,97 @@ Bitte Datumseingabe prüfen</value>
       <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key>
       <value>Es gibt bereits einen %0 Preis mit der selben Preisliste, Menge und Einheit im festgeleten Bereich.</value>
     </entry>
+    <entry>
+      <key>change DSGVO Relevance</key>
+      <value>ändere DSGVO-Relevanz</value>
+    </entry>
+    <entry>
+      <key>No customer since creation &gt; 3 years</key>
+      <value>Kein Kundenkontakt seit erzeugung &gt; 3 Jahre</value>
+    </entry>
+    <entry>
+      <key>No valid sales contract</key>
+      <value>Kein Kauvertrag vorhanden</value>
+    </entry>
+    <entry>
+      <key>Count Usage</key>
+      <value>Anzahl der Verwendungen</value>
+    </entry>
+    <entry>
+      <key>Marked for deletion</key>
+      <value>Makiert zum Löschen</value>
+    </entry>
+    <entry>
+      <key>Add Manual Delete Flag</key>
+      <value>Füge mauelles Löschkenzeichen hinzu</value>
+    </entry>
+    <entry>
+      <key>DSGVO Configuration</key>
+      <value>DSGVO Konfiguration</value>
+    </entry>
+    <entry>
+      <key>Privacy Notice</key>
+      <value>Datenschutzerklärung</value>
+    </entry>
+    <entry>
+      <key>Mark to Delete</key>
+      <value>Makieren zum Löschen</value>
+    </entry>
+    <entry>
+      <key>Is an active employee</key>
+      <value>Ist ein aktiver Mitarbeiter</value>
+    </entry>
+    <entry>
+      <key>Open Contacts</key>
+      <value>Öffne Kontakte</value>
+    </entry>
+    <entry>
+      <key>anonymize Persons</key>
+      <value>Anonymisieren der Personen</value>
+    </entry>
+    <entry>
+      <key>DSGVO</key>
+    </entry>
+    <entry>
+      <key>is DSGVO Relevant</key>
+      <value>Ist DSGVO Relevant</value>
+    </entry>
+    <entry>
+      <key>Manuel set</key>
+      <value>Manuel gesetz</value>
+    </entry>
+    <entry>
+      <key>Mark all to delete</key>
+      <value>Makiere alle zum Löschen</value>
+    </entry>
+    <entry>
+      <key>Mark selection to delete</key>
+      <value>Makiere selectierte zum Löschen</value>
+    </entry>
+    <entry>
+      <key>consent pending</key>
+      <value>Zustimmung austehend</value>
+    </entry>
+    <entry>
+      <key>Manually set</key>
+      <value>Manuell gesetzt</value>
+    </entry>
+    <entry>
+      <key>Delete Delay in Days</key>
+      <value>Löschverzögerung in Tagen</value>
+    </entry>
+    <entry>
+      <key>Do you want to delete the flags of the already maked Persons?</key>
+      <value>Möchtest du die bereits gesetzten Makierungen löschen?</value>
+    </entry>
+    <entry>
+      <key>Do you really want to anonymize all marked persons?</key>
+      <value>Möchtest wirklich alle zur Löschung makrierten Personen anonymisieren?</value>
+    </entry>
+    <entry>
+      <key>FILE MISSING</key>
+      <value>DATEI FEHLT</value>
+    </entry>
     <entry>
       <key>${SALESPROJECT_PROSPECT}</key>
       <value>Prospect</value>
@@ -10933,6 +11191,39 @@ Bitte Datumseingabe prüfen</value>
       <key>Competitions/Competitor</key>
       <value>Mitbewerber/Wettbewerber</value>
     </entry>
+    <entry>
+      <key>Turnover, Forecast, Planning</key>
+    </entry>
+    <entry>
+      <key>Buying center and internal project team</key>
+    </entry>
+    <entry>
+      <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key>
+    </entry>
+    <entry>
+      <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key>
+    </entry>
+    <entry>
+      <key>Code</key>
+    </entry>
+    <entry>
+      <key>advanced training</key>
+    </entry>
+    <entry>
+      <key>Migrate Probabilities</key>
+    </entry>
+    <entry>
+      <key>Add Manuel Delete Flag</key>
+    </entry>
+    <entry>
+      <key>Location of the Event</key>
+    </entry>
+    <entry>
+      <key>Event Planer</key>
+    </entry>
+    <entry>
+      <key>Integer</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index bdbd5793b38747eeaea0d20b38e287484ea5c9cd..db9fcca19c623ee0ce0484bc21b17014d8813578 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -8190,6 +8190,9 @@
     <entry>
       <key>Add to offer</key>
     </entry>
+    <entry>
+      <key>On Site</key>
+    </entry>
     <entry>
       <key>Participant is already participating</key>
     </entry>
@@ -8203,38 +8206,125 @@
       <key>Traits have already been defined for this salesproject phase.</key>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>New child product</key>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>Vacation</key>
+    </entry>
+    <entry>
+      <key>Price could not be determined</key>
+    </entry>
+    <entry>
+      <key>Channel type</key>
     </entry>
     <entry>
       <key>Communication: Link</key>
     </entry>
+    <entry>
+      <key>Allowed</key>
+    </entry>
     <entry>
       <key>Communication: Phone</key>
     </entry>
+    <entry>
+      <key>Rejected</key>
+    </entry>
+    <entry>
+      <key>Communication Settings</key>
+    </entry>
+    <entry>
+      <key>Advertising</key>
+    </entry>
     <entry>
       <key>Communication: Mail</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>Test Recipient</key>
     </entry>
     <entry>
-      <key>Price could not be determined</key>
+      <key>Remove Test Recipient</key>
     </entry>
     <entry>
-      <key>Volume(€)</key>
+      <key>Set Test Recipient</key>
     </entry>
     <entry>
-      <key>Value is too small, the minimum is %0</key>
+      <key>Test Run Actions</key>
     </entry>
     <entry>
-      <key>Invalid value</key>
+      <key>Test Recipients</key>
     </entry>
     <entry>
       <key>Object not found</key>
     </entry>
+    <entry>
+      <key>Use for test run</key>
+    </entry>
+    <entry>
+      <key>Don't use for test run</key>
+    </entry>
+    <entry>
+      <key>Interest</key>
+    </entry>
+    <entry>
+      <key>Subscribed</key>
+    </entry>
+    <entry>
+      <key>Not subscribed</key>
+    </entry>
+    <entry>
+      <key>Test Run</key>
+    </entry>
+    <entry>
+      <key>Placeholder</key>
+    </entry>
+    <entry>
+      <key>Link Type</key>
+    </entry>
+    <entry>
+      <key>Clicks</key>
+    </entry>
+    <entry>
+      <key>Device Type</key>
+    </entry>
+    <entry>
+      <key>Mobile</key>
+    </entry>
+    <entry>
+      <key>Console</key>
+    </entry>
+    <entry>
+      <key>IP Address</key>
+    </entry>
+    <entry>
+      <key>Operating System</key>
+    </entry>
+    <entry>
+      <key>Date Clicked</key>
+    </entry>
+    <entry>
+      <key>Send Date</key>
+    </entry>
+    <entry>
+      <key>Filter can't be empty</key>
+    </entry>
+    <entry>
+      <key>Opening Date</key>
+    </entry>
+    <entry>
+      <key>Recipient filter</key>
+    </entry>
+    <entry>
+      <key>Url must be unique</key>
+    </entry>
+    <entry>
+      <key>Volume(€)</key>
+    </entry>
+    <entry>
+      <key>Value is too small, the minimum is %0</key>
+    </entry>
+    <entry>
+      <key>Invalid value</key>
+    </entry>
     <entry>
       <key>Value is too big, the maximum is %0</key>
     </entry>
@@ -8356,82 +8446,177 @@
       <key>Shows the global Covid Cases in a Table</key>
     </entry>
     <entry>
-      <key>Buyer</key>
+      <key>Global Cases Table</key>
     </entry>
     <entry>
-      <key>Internal responsible</key>
+      <key>Global Cases</key>
     </entry>
     <entry>
-      <key>Global Cases Table</key>
+      <key>New Cases</key>
     </entry>
     <entry>
-      <key>Global Cases</key>
+      <key>Shows the new daily Covid Cases</key>
     </entry>
     <entry>
-      <key>Initiator</key>
+      <key>${SALESPROJECT_PROSPECT}</key>
+      <value>Prospect</value>
     </entry>
     <entry>
-      <key>New Cases</key>
+      <key>${SALESPROJECT_LEAD}</key>
+      <value>Lead</value>
     </entry>
     <entry>
-      <key>Internal Sales</key>
+      <key>${SALESPROJECT_CONTACT}</key>
+      <value>Contact</value>
     </entry>
     <entry>
-      <key>Influencer</key>
+      <key>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</key>
     </entry>
     <entry>
-      <key>Shows the new daily Covid Cases</key>
+      <key>Title (translated)</key>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</key>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key>
     </entry>
     <entry>
-      <key>Communication: Link</key>
+      <key>Competitions/Competitor</key>
     </entry>
     <entry>
-      <key>Communication: Phone</key>
+      <key>Invalid attribute count</key>
     </entry>
     <entry>
-      <key>Communication: Mail</key>
+      <key>Redirect needs a full Url with http/https</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>${IGNORE_DUPLICATE}</key>
+      <value>Record is not a duplicate</value>
     </entry>
     <entry>
-      <key>On Site</key>
+      <key>${UNIGNORE_DUPLICATE}</key>
+      <value>Record is a duplicate</value>
     </entry>
     <entry>
-      <key>New child product</key>
+      <key>View all duplicates from this scanner</key>
     </entry>
     <entry>
-      <key>Communication: Link</key>
+      <key>Rebuild all duplicates from the selected scanners</key>
     </entry>
     <entry>
-      <key>Buying center and internal project team</key>
+      <key>View duplicates</key>
     </entry>
     <entry>
-      <key>Communication: Phone</key>
+      <key>Rebuild selected entries</key>
     </entry>
     <entry>
-      <key>Communication: Mail</key>
+      <key>Ignored</key>
     </entry>
     <entry>
-      <key>Vacation</key>
+      <key>Not enough room in campaignstep</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_PROSPECT}</key>
-      <value>Prospect</value>
+      <key>Location of the Event</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_LEAD}</key>
-      <value>Lead</value>
+      <key>Migrate Probabilities</key>
     </entry>
     <entry>
-      <key>${SALESPROJECT_CONTACT}</key>
-      <value>Contact</value>
+      <key>change DSGVO Relevance</key>
+    </entry>
+    <entry>
+      <key>No customer since creation &gt; 3 years</key>
+    </entry>
+    <entry>
+      <key>advanced training</key>
+    </entry>
+    <entry>
+      <key>No valid sales contract</key>
+    </entry>
+    <entry>
+      <key>Count Usage</key>
+    </entry>
+    <entry>
+      <key>Marked for deletion</key>
+    </entry>
+    <entry>
+      <key>Add Manuel Delete Flag</key>
+    </entry>
+    <entry>
+      <key>DSGVO Configuration</key>
+    </entry>
+    <entry>
+      <key>Privacy Notice</key>
+    </entry>
+    <entry>
+      <key>Code</key>
+    </entry>
+    <entry>
+      <key>Mark to Delete</key>
+    </entry>
+    <entry>
+      <key>Is an active employee</key>
+    </entry>
+    <entry>
+      <key>Open Contacts</key>
+    </entry>
+    <entry>
+      <key>Integer</key>
+    </entry>
+    <entry>
+      <key>anonymize Persons</key>
+    </entry>
+    <entry>
+      <key>DSGVO</key>
+    </entry>
+    <entry>
+      <key>Event Planer</key>
+    </entry>
+    <entry>
+      <key>is DSGVO Relevant</key>
+    </entry>
+    <entry>
+      <key>Manuel set</key>
+    </entry>
+    <entry>
+      <key>consent pending</key>
+    </entry>
+    <entry>
+      <key>Mark selection to delete</key>
+    </entry>
+    <entry>
+      <key>Mark all to delete</key>
+    </entry>
+    <entry>
+      <key>Manually set</key>
+    </entry>
+    <entry>
+      <key>Add Manual Delete Flag</key>
+    </entry>
+    <entry>
+      <key>Delete Delay in Days</key>
+    </entry>
+    <entry>
+      <key>Do you want to delete the flags of the already maked Persons?</key>
+    </entry>
+    <entry>
+      <key>Do you really want to anonymize all marked persons?</key>
+    </entry>
+    <entry>
+      <key>FILE MISSING</key>
+    </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaign</key>
+    </entry>
+    <entry>
+      <key>The duplicate row corrosponding to %0 has been rebuild</key>
+    </entry>
+    <entry>
+      <key>All of the chosen records are already in the campaignstep</key>
+    </entry>
+    <entry>
+      <key>Duplicaterow rebuild</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5c35bf72c976ec78c161c38a8574c44c2bb5133a
--- /dev/null
+++ b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>BulkMailTestRecipient</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>BulkMailTestRecipientFilter_view</filterView>
+  <editView>BulkMailTestRecipientEdit_view</editView>
+  <entity>BulkMailTestRecipient_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>c9330ab3-e805-4dbb-8360-4767a966ae3a</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>eb1567ec-e5d3-4442-9fe3-7b456ba13ffe</name>
+      <view>BulkMailTestRecipientFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b089fff4-d9b3-483d-871a-c59fcb1597ae</name>
+      <view>BulkMailTestRecipientEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9e69819413f07b0c7b52eb16983d9409f9226edf
--- /dev/null
+++ b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>CommunicationBlacklist</name>
+  <title>Blacklist</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>CommunicationBlacklistFilter_view</filterView>
+  <editView>CommunicationBlacklistEdit_view</editView>
+  <entity>CommunicationBlacklist_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>664796b3-d90b-439d-b960-a1f09e00c99d</name>
+      <view>CommunicationBlacklistFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c08fe896-0181-4243-8639-cb96e302d3c8</name>
+      <view>CommunicationBlacklistEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/CommunicationChannel/CommunicationChannel.aod b/neonContext/CommunicationChannel/CommunicationChannel.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e99ae10c9b630c39e05497cd0613d5cced5c936e
--- /dev/null
+++ b/neonContext/CommunicationChannel/CommunicationChannel.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>CommunicationChannel</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>CommunicationChannel_entity</entity>
+</neonContext>
diff --git a/neonContext/CommunicationSettings/CommunicationSettings.aod b/neonContext/CommunicationSettings/CommunicationSettings.aod
new file mode 100644
index 0000000000000000000000000000000000000000..99a89c8a6a4179e404a34149b1696e6879188f46
--- /dev/null
+++ b/neonContext/CommunicationSettings/CommunicationSettings.aod
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>CommunicationSettings</name>
+  <title>Communication Settings</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>CommunicationSettingsFilter_view</filterView>
+  <editView>CommunicationSettingsEdit_view</editView>
+  <previewView>CommunicationSettingsPreview_view</previewView>
+  <entity>CommunicationSettings_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>53b6570c-1a3f-4b82-9d00-5eeeb7e69f3e</name>
+      <view>CommunicationSettingsEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>4c8e9037-7f69-4b9e-aa4c-b13d6dfca6a0</name>
+      <view>CommunicationSettingsFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f3831e2a-ab26-4708-88a3-17211f06ca75</name>
+      <view>CommunicationSettingsPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>05b83302-c56b-4c03-a18f-8d78a93a27b1</name>
+      <view>CommunicationSettingsDrawer_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod
index 1a7b678b320f344c420a269147b4cc947cfa577c..a493e487ba2ac91d82948d94c807c811bc717860 100644
--- a/neonContext/DSGVO/DSGVO.aod
+++ b/neonContext/DSGVO/DSGVO.aod
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
   <name>DSGVO</name>
+  <title>Data Privacy</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterView>DSGVOFilter_view</filterView>
   <editView>DSGVOEdit_view</editView>
diff --git a/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod b/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d91e9c10ee71d6e952db08356878cd5dbd1b6a73
--- /dev/null
+++ b/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>DSGVOConfiguration</name>
+  <title>DSGVO Configuration</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>DSGVOConfigurationFilter_view</filterView>
+  <editView>DSGVOConfigurationEdit_view</editView>
+  <previewView>DSGVOConfigurationPreview_view</previewView>
+  <entity>DSGVOConfiguration_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>69adadd7-b1a3-4b25-bc72-807dc9bcdd15</name>
+      <view>DSGVOConfigurationEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>98b0a458-ff6b-472f-a403-c99d6389da0f</name>
+      <view>DSGVOConfigurationFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>824363d9-9924-404d-922f-c6cf447412d7</name>
+      <view>DSGVOConfigurationPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>09c76322-225f-46cd-a3eb-48b56d6c661c</name>
+      <view>DSGVOConfigurationFilterFooter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>ea7e56f5-e6f4-4c7c-872c-3ed6f0e5bf24</name>
+      <view>DSGVOConfigurationFilterHeader_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>ed051f3e-c8b3-4561-940f-cd54eeb91dd3</name>
+      <view>DSGVOConfigurationFilterFooter_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod b/neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod
similarity index 52%
rename from neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod
rename to neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod
index 56bf4fd8574682d13f54fd2c5628fde361465b46..9c6dc17b905012355c5e6d4f3e813980322811c5 100644
--- a/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod
+++ b/neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod
@@ -1,16 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
-  <name>DuplicatesUnrelated</name>
+  <name>DSGVOConfigurationAttribute</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <entity>DuplicatesUnrelated_entity</entity>
+  <filterView>DSGVOConfigurationAttributeFilter_view</filterView>
+  <entity>DSGVOConfigurationAttribute_entity</entity>
   <references>
     <neonViewReference>
-      <name>0b5cbd31-cfa1-4ee8-8bd2-b4772ac95953</name>
-      <view>DuplicatesUnrelatedPersonFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>433a665e-63ac-4281-8f7c-08603362daf7</name>
-      <view>DuplicatesUnrelatedOrganisationFilter_view</view>
+      <name>984a036f-e75e-481e-8393-7c3e737d2d99</name>
+      <view>DSGVOConfigurationAttributeFilter_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod b/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7797e1cfba519a1ea8dd0d860aafee00cf18ce15
--- /dev/null
+++ b/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>DSGVODeleteFlag</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>DSGVODeleteFlagFilter_view</filterView>
+  <editView>DSGVODeleteFlagEdit_view</editView>
+  <previewView>DSGVODeleteFlagPreview_view</previewView>
+  <entity>DSGVODeleteFlag_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>37d7c5ce-aa82-4b72-ad9c-e35ef9d07c24</name>
+      <view>DSGVODeleteFlagEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>835e41b0-4d84-4f7e-a07c-e706d1558449</name>
+      <view>DSGVODeleteFlagFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>60ccc758-e155-433b-abf6-e5e3d144ef7c</name>
+      <view>DSGVODeleteFlagPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod
new file mode 100644
index 0000000000000000000000000000000000000000..180a84c994ec66d9360520047ed577612fce6b84
--- /dev/null
+++ b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>DuplicateOrganisation</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <previewView>DuplicateOrganisationPreview_view</previewView>
+  <entity>DuplicateOrganisation_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>c62620c2-33e3-4b76-bd76-0c1be1d516eb</name>
+      <view>DuplicateOrganisationFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>512ef5c4-dc95-4ef1-81e0-d45479249c2e</name>
+      <view>DuplicateOrganisationEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>07bbb126-8b4b-4f3c-a2c8-30409e0ee826</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>2e59d859-6b5f-4bb5-a47b-1225164140ed</name>
+      <view>DuplicateOrganisationPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/DuplicatePerson/DuplicatePerson.aod b/neonContext/DuplicatePerson/DuplicatePerson.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6d8e12f75aafc815feb17c94b9165e142be633e6
--- /dev/null
+++ b/neonContext/DuplicatePerson/DuplicatePerson.aod
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>DuplicatePerson</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <previewView>DuplicatePersonPreview_view</previewView>
+  <entity>DuplicatePerson_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>930c8a65-e92e-4222-9ca7-cbc663ebf274</name>
+      <view>DuplicatePersonFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f54e544a-2279-41ec-a7b3-44e11989a736</name>
+      <view>DuplicatePersonEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>88155af6-074d-4683-b27e-20a8ef75dd8a</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>fb801ec5-ec73-4d6d-be3e-f2d78a57716f</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>596cd813-22e1-4ba6-96d5-fefefbb800cf</name>
+      <view>DuplicatePersonPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/Duplicates/Duplicates.aod b/neonContext/Duplicates/Duplicates.aod
deleted file mode 100644
index 5de0f3a1913c9bb49aecba2c8ea9998e23ad1faf..0000000000000000000000000000000000000000
--- a/neonContext/Duplicates/Duplicates.aod
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
-  <name>Duplicates</name>
-  <title>Duplicates</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterView>DuplicatesOverview_view</filterView>
-  <entity>Duplicates_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>d8994f4c-3abf-4ff1-8bdb-f12e527df655</name>
-      <view>PersonDuplicatesFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>de287a3b-1d6a-435c-b65e-d833c1751edf</name>
-      <view>DuplicatesOverview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>5bdeb931-4e69-4520-bbc9-94fb17679331</name>
-      <view>PersonDublicatesTab_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>70cb2e96-5bc1-46cb-982f-b27db5d143d2</name>
-      <view>PersonClusterMain_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>7cdb6ca7-e99d-4eb6-897a-0953157bf62f</name>
-      <view>DuplicatesUnrelatedCluster_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>4b9a1a26-e14f-4246-b474-8bfb3e3a95b0</name>
-      <view>OrganisationDuplicatesTab_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>f9b46eab-7417-4f61-b7cd-dc772c04ddc0</name>
-      <view>OrganisationDuplicatesFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>d68a425a-037a-4725-8dc1-b0afac277bdd</name>
-      <view>OrganisationUnrelatedDuplicates_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>4c1fc406-1c83-4fb6-9059-e45ff5c80756</name>
-      <view>OrganisationClusterMain_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>2400acfd-50e4-472d-b69c-368b9d25b6c6</name>
-      <view>PersonClusterPreview_view</view>
-    </neonViewReference>
-  </references>
-</neonContext>
diff --git a/neonContext/Interest/Interest.aod b/neonContext/Interest/Interest.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c78d21f7bfe50ee99dd70d41e648e30ca88bcac8
--- /dev/null
+++ b/neonContext/Interest/Interest.aod
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>Interest</name>
+  <title>Interest</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>InterestFilter_view</filterView>
+  <editView>InterestEdit_view</editView>
+  <lookupView>InterestLookup_view</lookupView>
+  <entity>Interest_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>835eeffb-73df-41fa-b1c3-9c659c9eeda6</name>
+      <view>InterestFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c00312db-318a-45c6-a523-b668ef75a5f9</name>
+      <view>InterestEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f394f1c7-99d2-4bd9-8daa-502f444c7dff</name>
+      <view>InterestLookup_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/InterestLink/InterestLink.aod b/neonContext/InterestLink/InterestLink.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c89728b86c92c119d00905163c5c583d320abfbe
--- /dev/null
+++ b/neonContext/InterestLink/InterestLink.aod
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>InterestLink</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>InterestLinkFilter_view</filterView>
+  <editView>InterestLinkEdit_view</editView>
+  <entity>InterestLink_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>2a433681-9aec-403e-8bb7-29462265a4a9</name>
+      <view>InterestLinkEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>fb9f1140-7b69-4c45-94e0-c76fbb0d0318</name>
+      <view>InterestLinkFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>efdc5b84-9554-4760-a944-fad63f714ce1</name>
+      <view>InterestLinkDrawer_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod b/neonContext/MailLog/MailLog.aod
similarity index 63%
rename from neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod
rename to neonContext/MailLog/MailLog.aod
index 79d97363fbb75d25de88168f1dbd76713df82073..64c6bca732e03ed2731704a43d2238e5421301b3 100644
--- a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod
+++ b/neonContext/MailLog/MailLog.aod
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
-  <name>DuplicateScannerResultFieldConfig</name>
+  <name>MailLog</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <entity>DuplicateScannerResultFieldConfig_entity</entity>
+  <filterView>MailLogFilter_view</filterView>
+  <entity>MailLog_entity</entity>
   <references>
     <neonViewReference>
-      <name>4bab12e9-c4c3-450f-bfcf-8ecbec1f994c</name>
-      <view>DuplicateScannerResultFieldConfigEdit_view</view>
+      <name>01787395-2369-42d2-ac0d-0062071df25e</name>
+      <view>MailLogFilter_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod
index 5a9b1ecbe90107c4e484b01a2a7755d85faa8284..987e28778162fd6550e11343ec919e3c59b21f5a 100644
--- a/neonContext/Person/Person.aod
+++ b/neonContext/Person/Person.aod
@@ -61,7 +61,18 @@
     </neonViewReference>
     <neonViewReference>
       <name>2a6c44be-53e2-469e-84b3-615841bd4430</name>
-      <view>PersonDuplicateEditview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name>
+      <view>PersonMarketing_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>be0bb97f-88e6-4a54-820c-7aee284a917a</name>
+      <view>PersonDSGVO_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>dc6b609b-7e28-4f76-b7f3-6fd8696b9b7d</name>
+      <view>PersonFilterOverlay_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Weblink/Weblink.aod b/neonContext/Weblink/Weblink.aod
new file mode 100644
index 0000000000000000000000000000000000000000..375a57a0ff63f17d071da1cf91e73a09bcc5fc4b
--- /dev/null
+++ b/neonContext/Weblink/Weblink.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>Weblink</name>
+  <title>Linkmanagement</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>NEON:FILTER</icon>
+  <mainView>WeblinkMain_view</mainView>
+  <filterView>WeblinkFilter_view</filterView>
+  <editView>WeblinkEdit_view</editView>
+  <previewView>WeblinkPreview_view</previewView>
+  <entity>Weblink_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>1214292b-2504-4f83-97ba-507074a92342</name>
+      <view>WeblinkFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>26c15847-68bf-4ae1-80c6-bf4aebe02d3c</name>
+      <view>WeblinkEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f5fd5e04-74a1-4c25-8237-9d6dcdc801f5</name>
+      <view>WeblinkMain_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>466496bf-b703-4e94-be8c-33100a5516c6</name>
+      <view>WeblinkPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>e1de7061-bc31-4dfb-bc5e-2e75db1c52ea</name>
+      <view>WeblinkDrawer_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/WeblinkClick/WeblinkClick.aod b/neonContext/WeblinkClick/WeblinkClick.aod
new file mode 100644
index 0000000000000000000000000000000000000000..06f55183587ce936ca90e2d452ecaf69070be639
--- /dev/null
+++ b/neonContext/WeblinkClick/WeblinkClick.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>WeblinkClick</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>WeblinkClickFilter_view</filterView>
+  <entity>WeblinkClick_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>27fd3309-5cb7-4e27-85e3-68ce4ad2e60e</name>
+      <view>WeblinkClickFilter_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/WeblinkTag/WeblinkTag.aod b/neonContext/WeblinkTag/WeblinkTag.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e34c5dcd3b26f1b05ad2d77d1c1fa4ec2ed41986
--- /dev/null
+++ b/neonContext/WeblinkTag/WeblinkTag.aod
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>WeblinkTag</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>WeblinkTagFilter_view</filterView>
+  <editView>WeblinkTagEdit_view</editView>
+  <entity>WeblinkTag_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>c4a7ba88-dd7e-4471-ae17-450602216475</name>
+      <view>WeblinkTagFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>51e9185c-cd69-483e-b618-fbb27cf8912b</name>
+      <view>WeblinkTagEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>77247264-cea7-4fb3-8f94-d172213faac8</name>
+      <view>WeblinkTagMultiEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
index 2dbb4bea8358d3d2e1ea6f9ba29c0cc39c26e39d..6e234a5ab8e2adc42e80d17e1d25983814896cb0 100644
--- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
+++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
@@ -76,6 +76,10 @@
           <name>06f08869-5a81-41cb-8c7e-51be6a7041a7</name>
           <entityField>DESCRIPTION</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>1891cd3a-34a5-4c7d-9e35-635640476c63</name>
+          <entityField>INTEREST_ID</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod
index 5b05276c93901121cfd9cd663f1961454d76b4c2..82edef3461108d64ecf2d010d1fc81e8b11ed35f 100644
--- a/neonView/BulkMailMain_view/BulkMailMain_view.aod
+++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod
@@ -24,6 +24,21 @@
       <entityField>Activities</entityField>
       <view>ActivityFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>cd8c44c9-209b-464c-a2e0-ce15720ab22e</name>
+      <entityField>MailLogs</entityField>
+      <view>MailLogFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>f78d044a-6246-49c0-a72c-03f54fc90fd2</name>
+      <entityField>BulkMailTestRecipients</entityField>
+      <view>BulkMailTestRecipientFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>bd3876a9-492e-4e2e-bcca-e86455475dca</name>
+      <entityField>Clicks</entityField>
+      <view>WeblinkClickFilter_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name>
       <entityField>LogHistories</entityField>
diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
index 48b1894a84256da8c10d96df4dbb7aea0e9957ab..3cd10ec5dd64fc83bc30ae6601b7e51d83acdab2 100644
--- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
+++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
@@ -35,6 +35,10 @@
           <name>28c1e091-0fea-4324-8fb8-1893388354b7</name>
           <entityField>STATUS</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>d588824d-1c21-483f-98eb-900f3e9722bd</name>
+          <entityField>DATE_TO_SEND</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>edbeea4d-019f-4661-b0d7-c07468e747cc</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
@@ -51,21 +55,9 @@
           <name>65546b24-3f6d-4639-b144-491ff5c478c1</name>
           <entityField>USE_TEMPLATE_ATTACHMENTS</entityField>
         </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericViewTemplate>
-      <name>Testing</name>
-      <showDrawer v="true" />
-      <drawerCaption>Testing</drawerCaption>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>ea406803-6189-4de0-aa41-f09f7e1b2336</name>
-          <entityField>TESTING_CONTACT_ID</entityField>
-        </entityFieldLink>
         <entityFieldLink>
-          <name>f8963199-c89b-48e5-a92c-8f655c05acab</name>
-          <entityField>TESTING_EMAIL_ADDRESS</entityField>
+          <name>9f3df668-6741-4faf-9afc-a0d761db990a</name>
+          <entityField>INTEREST_ID</entityField>
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
diff --git a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
index 9727da8fb78f8ff1ba6abd6414ffe00bbf0a4ffd..1638eaab615e83de9669b74a03027120d36a763a 100644
--- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
+++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
@@ -15,6 +15,7 @@
       <autoNewRow v="true" />
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1>recipientActions</favoriteActionGroup1>
+      <favoriteActionGroup2>testRunActions</favoriteActionGroup2>
       <columns>
         <neonTableColumn>
           <name>eadd8b00-f4a8-4634-bcc7-9bd5c6dbc876</name>
@@ -28,6 +29,10 @@
           <name>953dbc49-ae13-4328-b0f1-6ed3b5f6fb7b</name>
           <entityField>EMAIL_ADDRESS</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>f7a64961-afcb-45ab-bb8d-6b3097363463</name>
+          <entityField>IS_TEST_RECIPIENT</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>f311e8da-4139-48bd-a792-6df572dce7ad</name>
           <entityField>STATUS</entityField>
@@ -55,6 +60,10 @@
           <name>8b75c1fc-71ce-4b38-aa51-81ee8a42564b</name>
           <entityField>EMAIL_ADDRESS</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>2364fe2e-8056-4531-b999-407ca57157fe</name>
+          <entityField>IS_TEST_RECIPIENT</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>c904c6c0-b2e8-4192-a952-d4f1f6612dee</name>
           <entityField>STATUS</entityField>
diff --git a/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod b/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f028be39b7b53ccd1acc65ad427b0322eeb80065
--- /dev/null
+++ b/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>BulkMailTestRecipientEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>16077d02-29d9-4acb-9728-7799011d1955</name>
+          <entityField>CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>23bf7ac8-dd52-4964-bf20-6d9955dc8908</name>
+          <entityField>EMAIL_ADDRESS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod b/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2ba06b22052fac7cda118e4c798f78ae1ae69c1a
--- /dev/null
+++ b/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>BulkMailTestRecipientFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <columns>
+        <neonTableColumn>
+          <name>d085feb9-5bbb-444a-84f4-a03746e6b015</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1e307d8a-3f70-4f34-8e84-27f0e8ec89f4</name>
+          <entityField>EMAIL_ADDRESS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod b/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7ca289f4bd074cc4bb8c460be628c7e0492d683b
--- /dev/null
+++ b/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationBlacklistEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>5bf6cb8b-20da-4e64-ab86-e654e1f9f6a5</name>
+          <entityField>BLACKLIST_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>bad5d056-972e-4d10-b3c7-a25bf6233cb5</name>
+          <entityField>BLACKLIST_FILTER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f74c2a6a-1b70-4914-8059-8866a0e5db77</name>
+          <entityField>START_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>2b2bb0e7-7cdf-42ca-8c0b-89d1d869fa44</name>
+          <entityField>END_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>947da750-50bd-47bb-af2d-7446b3756482</name>
+          <entityField>REASON</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod b/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..232b308af1e76c7e8cfb74d7ba3b0c25fa595806
--- /dev/null
+++ b/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationBlacklistFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <columns>
+        <neonTableColumn>
+          <name>86497fa4-acda-4041-8cbc-8d11838b4876</name>
+          <entityField>BLACKLIST_TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>304b2589-aabf-42f6-916f-a69cff5a1b00</name>
+          <entityField>START_DATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>fd5077c1-942b-42f0-8f44-80e9c568db44</name>
+          <entityField>END_DATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>d7050f91-da78-4ffc-a31c-30985d808473</name>
+          <entityField>REASON</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod b/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e3d426b3f4f88373e8cf99ea5016a6dad171d37c
--- /dev/null
+++ b/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationSettingsDrawer_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Communication Settings</layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>c39e99e6-589c-4991-8c24-c55210744a87</name>
+      <entityField>#ENTITY</entityField>
+      <view>CommunicationSettingsFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e617c0d1ac520aa028fd4fd381e784548e7e1e4a
--- /dev/null
+++ b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationSettingsEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>CommunicationData</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>1d8b8e9b-2efc-4892-9d9a-ecc78874fd67</name>
+          <entityField>CHANNEL_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>41399ea7-2607-492d-898e-85a74bcad694</name>
+          <entityField>MEDIUM</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d9e0801b-824c-4576-b998-73d9a05ab73e</name>
+          <entityField>CHANNEL_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>160baaf0-8e0f-472c-8127-8309f69399ff</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6d34768e-ea37-426b-b1e0-242b0a245c1c</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..969334026b5760bd6ccbec315ed7a2033b94f752
--- /dev/null
+++ b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationSettingsFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <columns>
+        <neonTreeTableColumn>
+          <name>1e698c64-ce5c-46d1-8c90-290d5ea187c7</name>
+          <entityField>ICON</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>5738f47a-57cd-4e6a-a017-1a5ab80581ac</name>
+          <entityField>CHANNEL_TYPE</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>a0eb5938-dad6-4d5c-b6f3-47cac8c720f8</name>
+          <entityField>CHANNEL_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>70b811c4-c78a-43c1-91d3-f0d168a6d81e</name>
+          <entityField>MEDIUM</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>85b13242-8fb1-4528-8ea9-9ed2fe02fc77</name>
+          <entityField>STATUS</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>14c8c930-01ad-4142-bad9-456666317435</name>
+          <entityField>INFO</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8551f448c5fb966fd25c9bfb2ac700f35d584eac
--- /dev/null
+++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>CommunicationSettingsPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Card</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <iconField>ICON</iconField>
+      <titleField>#CONTENTTITLE</titleField>
+      <subtitleField>STATUS</subtitleField>
+      <isEditable v="false" />
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Infos</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
+      <fields>
+        <entityFieldLink>
+          <name>82483a97-4ffb-4e48-8791-477e193aa648</name>
+          <entityField>CHANNEL_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f2be357b-a772-4d10-bdff-7e6c94dc9d33</name>
+          <entityField>MEDIUM</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>1bc8d44c-a8a3-4858-a1e7-c49b49fec9a4</name>
+          <entityField>CHANNEL_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>04a5a72f-864c-420a-8e77-274083bcfe47</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8a96457a-c8bd-4a06-ace2-e8b7163f3983</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>b077ec37-4e6a-417d-945f-b1b870dd72bb</name>
+          <entityField>DATE_NEW</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8d38a5ea-3905-44ba-8d12-8095e840e830</name>
+          <entityField>DATE_EDIT</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod b/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6c6822333640d901714a27697603c97235558ea0
--- /dev/null
+++ b/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVOConfigurationAttributeFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="false" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <parentField>ATTRIBUTE_PARENT_ID</parentField>
+      <showChildrenCount v="false" />
+      <expandRootItems v="false" />
+      <favoriteActionGroup1>FilterActions</favoriteActionGroup1>
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <columns>
+        <neonTreeTableColumn>
+          <name>7ffa35a6-5264-4354-9ee4-ad20ffc81a53</name>
+          <entityField>ATTRIBUTE_NAME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>9d92f64a-45e6-402b-99c6-f113147271f9</name>
+          <entityField>isDSGVORelevant</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod b/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e72917c6ffeb57b73799f1af990f36de8d50af1c
--- /dev/null
+++ b/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVOConfigurationEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>ed3081a0-0b3b-4541-bb83-b721d9f61fb8</name>
+          <entityField>REASON</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>e2df9d14-8d26-4d5e-84d8-b8ba216a6a61</name>
+          <entityField>FILTER</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>OpenContacts</element>
+      </actions>
+    </actionsViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod b/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a9b323bda1837edb023e33d5587aa4593f4d70e6
--- /dev/null
+++ b/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVOConfigurationFilterFooter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <direction>HORIZONTAL</direction>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <favoriteActionGroup1>FilterConfigActions</favoriteActionGroup1>
+      <columns>
+        <neonTableColumn>
+          <name>d3efb473-4159-4652-b88b-b15142a3be9c</name>
+          <entityField>REASON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>d772b779-faef-44c5-93b6-f092298759c3</name>
+          <entityField>COUNT_USAGE</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+    <neonViewReference>
+      <name>f77ed99c-f893-4cd6-8879-545ff353b77f</name>
+      <entityField>DSGVOConfigurationAttributes</entityField>
+      <view>DSGVOConfigurationAttributeFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod b/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9d164a33b5a40ab5b727d28b4294463364ad0d34
--- /dev/null
+++ b/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVOConfigurationFilterHeader_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <isEditable v="false" />
+      <fields>
+        <entityFieldLink>
+          <name>1eb5807a-f82a-419b-bd7b-a020b7a6e778</name>
+          <entityField>alreadyMarked</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod b/neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod
similarity index 53%
rename from neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod
rename to neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod
index ed86c8059d4920b5576f13406c5d4d4f86597b71..fbc0eaaec35ceee30f300fa6b1a91334ab514cff 100644
--- a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod
+++ b/neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>OrganisationDuplicatesTab_view</name>
-  <title>Organisation duplicates</title>
+  <name>DSGVOConfigurationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
   <layout>
-    <boxLayout>
+    <headerFooterLayout>
       <name>layout</name>
-      <direction>HORIZONTAL</direction>
-    </boxLayout>
+      <header>2706fe93-0710-4d75-8cbb-c128676e66c5</header>
+    </headerFooterLayout>
   </layout>
   <children>
     <neonViewReference>
-      <name>8b4ab951-afb3-4fac-915b-89226ab2f849</name>
-      <entityField>SelfOrganisationDuplicatesConsumer</entityField>
-      <view>OrganisationDuplicatesFilter_view</view>
+      <name>2706fe93-0710-4d75-8cbb-c128676e66c5</name>
+      <entityField>#ENTITY</entityField>
+      <view>DSGVOConfigurationFilterHeader_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>d1e2ba4a-a5d6-4bba-a646-5918490e43a4</name>
+      <name>1fff34b8-e5d3-4829-be06-dd87f1177408</name>
       <entityField>#ENTITY</entityField>
-      <view>OrganisationUnrelatedDuplicates_view</view>
+      <view>DSGVOConfigurationFilterFooter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod b/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3752f87ff7336894643e83734358cfc4b8b7a5b8
--- /dev/null
+++ b/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVOConfigurationPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Card</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <titleField>REASON</titleField>
+      <subtitleField>FILTER</subtitleField>
+      <isEditable v="false" />
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <fields>
+        <entityFieldLink>
+          <name>290fa7cf-773e-4c06-9aaf-769946caa491</name>
+          <entityField>COUNT_USAGE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>OpenContacts</element>
+      </actions>
+    </actionsViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod b/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8961be2d4881343e15b4a3c5dd4366fc0541067d
--- /dev/null
+++ b/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVODeleteFlagEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>27a65e8e-9812-43aa-b261-6dfc0e9344a1</name>
+          <entityField>REASON</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod
similarity index 56%
rename from neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod
rename to neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod
index 173666ab5f8a8ffb5ded2760fd5da08851e2e209..a15dc8d1a8cdc87c016dc495c92cc38c0f74b3ce 100644
--- a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod
+++ b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod
@@ -1,28 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>DuplicatesUnrelatedPersonFilter_view</name>
+  <name>DSGVODeleteFlagFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
   <layout>
-    <boxLayout>
+    <groupLayout>
       <name>layout</name>
-    </boxLayout>
+    </groupLayout>
   </layout>
   <children>
     <tableViewTemplate>
-      <name>UnrelatedPersons</name>
-      <hideContentSearch v="true" />
-      <entityField>#ENTITY</entityField>
+      <name>DSGVODeleteFlagFilterTable</name>
+      <favoriteActionGroup1>FilterActions</favoriteActionGroup1>
       <isCreatable v="false" />
       <isEditable v="false" />
-      <title>Unrelated person duplicates</title>
       <columns>
         <neonTableColumn>
-          <name>734re984-6a0b-4126-ab49-452e2b54f76d</name>
-          <entityField>SourceDuplicateDescription</entityField>
+          <name>786d40dd-9d7c-47b6-ad82-0130f8c5b5c0</name>
+          <entityField>REASON</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>8615259b-de5b-378u-945d-2ff934ae1b8c</name>
-          <entityField>UnrelatedDuplicateDescription</entityField>
+          <name>68b05f9f-d50f-4fe8-89ec-fe1347008417</name>
+          <entityField>DATE_NEW</entityField>
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
diff --git a/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod b/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..74eb6ae512ad38543b7900323c429ac09dfbe64d
--- /dev/null
+++ b/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DSGVODeleteFlagPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <footer>DSGVODeleteFlagPreviewScoreCard</footer>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>DSGVODeleteFlagPreviewGeneric</name>
+      <fields>
+        <entityFieldLink>
+          <name>5c923ee0-ad34-494a-9f12-b5c1ca431088</name>
+          <entityField>REASON</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <scoreCardViewTemplate>
+      <name>DSGVODeleteFlagPreviewScoreCard</name>
+      <fields>
+        <entityFieldLink>
+          <name>9ff8e5f5-1244-4349-aadf-8cbd3d37cc97</name>
+          <entityField>USER_NEW</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>3ea79def-4411-41a5-a04d-dcbbcba459ca</name>
+          <entityField>DATE_NEW</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
index 7b92fa16742092c9b43a0776dcd615180e220712..16f0ff1823b2f599005139241c3443663e5f6a0c 100644
--- a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
+++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
@@ -35,6 +35,10 @@
           <name>605ab093-46de-4da2-a155-c86b02206553</name>
           <entityField>APPLY_CHANGE_FOR_ALL_CONTROL</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>8a0c0387-8340-4710-8082-e66ebc47b626</name>
+          <entityField>bindata</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
index ff1974aa153cc55a605adae8c55d1bb06c99425d..36360ea06ba72c05f495eacfce5771d2ff6a82d9 100644
--- a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
+++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
@@ -38,6 +38,10 @@
           <name>6cd8795a-9779-4a7d-9aaf-7da580424742</name>
           <entityField>APPLY_CHANGE_FOR_ALL_CONTROL</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>12b07679-f932-44cc-baaf-5d595b7a4b6a</name>
+          <entityField>bindata</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
diff --git a/neonView/DocumentPreview_view/DocumentPreview_view.aod b/neonView/DocumentPreview_view/DocumentPreview_view.aod
index 6b6f308e9ebaae2973e710b1ddc7d4cb4e09dca3..76321f01204e4a8dd2466979e1f2e61475d917aa 100644
--- a/neonView/DocumentPreview_view/DocumentPreview_view.aod
+++ b/neonView/DocumentPreview_view/DocumentPreview_view.aod
@@ -15,6 +15,7 @@
       <subtitleField>TYPE</subtitleField>
       <descriptionField>SIZE</descriptionField>
       <favoriteAction1>downloadSingleFileAction</favoriteAction1>
+      <favoriteAction2>openSingleFileAction</favoriteAction2>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod b/neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod
similarity index 55%
rename from neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod
rename to neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod
index b331c5900d3b446f8632159bd837bb4968b85ef4..a2d93541e4f43880901a1cf4e3caad407d2b8ea1 100644
--- a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod
+++ b/neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>PersonDuplicateEditview_view</name>
+  <name>DuplicateOrganisationEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <noneLayout>
@@ -9,38 +9,38 @@
   </layout>
   <children>
     <tableViewTemplate>
-      <name>PersonDuplicateEditview_Table</name>
+      <name>table</name>
       <hideActions v="true" />
-      <hideContentSearch v="true" />
-      <iconField></iconField>
-      <entityField>#ENTITY</entityField>
-      <linkedColumns />
-      <fixedFilterFields />
-      <hideHeader v="true" />
-      <title>Duplicates</title>
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
       <columns>
         <neonTableColumn>
-          <name>7e5410c5-ee05-4a5a-b168-8015d2d05834</name>
-          <entityField>#IMAGE</entityField>
+          <name>7cb9aa93-5aa1-4f52-a2a0-32723919af08</name>
+          <entityField>ORGNAME</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>ef22c1b8-1025-41b6-bb0b-99fe053e9ef9</name>
-          <entityField>FIRSTNAME</entityField>
+          <name>683fa228-8853-4def-b904-c10222136aec</name>
+          <entityField>STATUS</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>abfe3ce4-4fcc-4d61-93ec-156bd97ace3b</name>
-          <entityField>LASTNAME</entityField>
+          <name>bb6ddf6b-aa09-4b5b-814a-ae5ebf08a48a</name>
+          <entityField>CUSTOMERCODE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>17d892a8-69fb-4bca-9629-d92ae80c72f8</name>
-          <entityField>STANDARD_PHONE_COMMUNICATION</entityField>
+          <name>a1630a4a-9989-4e9b-bb39-03a8432aef3f</name>
+          <entityField>TYPE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>12006c11-e833-4ce1-9645-fdec0a8b6088</name>
+          <name>6295ed5c-35a8-4238-921e-65e29141883f</name>
           <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>0231907e-8ae0-4f99-af1c-1bcb2f57bdb8</name>
+          <name>d6716d9e-19b7-4d2f-b7a9-61d0e3ef3ac5</name>
+          <entityField>STANDARD_PHONE_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>334a97a3-cad3-4ac5-b670-de7d587e2781</name>
           <entityField>STANDARD_ADDRESS</entityField>
         </neonTableColumn>
       </columns>
diff --git a/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod b/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2e4b88985d02932f1eb78ced263ceb82b88c2adf
--- /dev/null
+++ b/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DuplicateOrganisationFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <favoriteActionGroup1>filterActions</favoriteActionGroup1>
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <columns>
+        <neonTableColumn>
+          <name>04253f56-c764-46a9-8795-6b7c58d9352b</name>
+          <entityField>PICTURE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>fc700556-7829-42be-b824-83d29e7dddf3</name>
+          <entityField>DUPLICATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6e753d4c-4f6a-4fbf-8af0-b76aa4ff8e76</name>
+          <entityField>ORGNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1368091a-0a65-4df6-b0fc-34031925e2bf</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>d407d879-3f44-4656-a4bc-0149adcfec5e</name>
+          <entityField>CUSTOMERCODE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>166bdb5d-a822-4915-99aa-2ff1adca1bc9</name>
+          <entityField>TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>4edfc696-78b0-4abd-8d03-39c02d0116da</name>
+          <entityField>STANDARD_PHONE_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>e7fb62b8-4d76-46cc-bf84-00230d2e6e56</name>
+          <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>93bc9275-aea3-436d-ab86-fd400a790538</name>
+          <entityField>STANDARD_ADDRESS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..29f3a38fc42c1f47d2d21233941b8677b77ddfe7
--- /dev/null
+++ b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DuplicateOrganisationPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+</neonView>
diff --git a/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod b/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..99e36d549f4ddd5e255077197ed28f53825b0c57
--- /dev/null
+++ b/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DuplicatePersonEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <hideActions v="true" />
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <columns>
+        <neonTableColumn>
+          <name>fe9c534a-ba99-4805-996f-e76a6e77396e</name>
+          <entityField>LETTERSALUTATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f8235c5b-6d13-4fd4-8522-96e38abaad1e</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7b89e8a4-e9da-4d89-86cf-d35db86cf53c</name>
+          <entityField>FIRSTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2b255370-1cd5-472f-8417-bde8c9f5743a</name>
+          <entityField>MIDDLENAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>a5188dac-9c63-44de-bb36-cb40689376c2</name>
+          <entityField>LASTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7f0abf2a-5411-425e-8be8-16c57d19ba12</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>55cdd3d2-548a-4a7f-9590-14413d0a6f34</name>
+          <entityField>ORGANISATION_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>305716b3-d99b-4fea-8f8a-a71b9dbeeacd</name>
+          <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>446a5dea-a93f-4b1e-9b51-b8a00990972d</name>
+          <entityField>STANDARD_PHONE_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1fedd9be-6492-4e89-ae8e-03bc212078e1</name>
+          <entityField>STANDARD_ADDRESS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod b/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c1f6405a3cc09e5a8eda9af6abb92dcce3fa1f06
--- /dev/null
+++ b/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DuplicatePersonFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <favoriteActionGroup1>filterActions</favoriteActionGroup1>
+      <isCreatable v="false" />
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <columns>
+        <neonTableColumn>
+          <name>c89d9927-c3f1-4e0c-b7fa-20d5e031f8b7</name>
+          <entityField>PICTURE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>c68a371e-0baa-4e6c-baee-424ca4f1d258</name>
+          <entityField>DUPLICATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>42fb67ab-6bc9-4a02-9dad-10f54d9fe242</name>
+          <entityField>LETTERSALUTATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>59aa16e6-f599-4aff-8314-6b1a2c8cfd67</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>3fdd6165-1a1b-4521-a23f-631e5f88beb1</name>
+          <entityField>FIRSTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>a76bc050-eccd-4d2a-9190-2d994fcea7e3</name>
+          <entityField>MIDDLENAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>381ba7a3-1591-40a2-8837-0516db984bb7</name>
+          <entityField>LASTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6b828d7c-7b3c-490f-98a1-41520dec0773</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>47c28842-59ab-4f9c-9239-3fda9c6171e0</name>
+          <entityField>ORGANISATION_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>68b9211a-b4e7-4b7b-b110-9d76d7e14bb2</name>
+          <entityField>STANDARD_PHONE_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7a3fd399-0e19-4399-8df1-4f8d521b6729</name>
+          <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f54a6069-994c-4c77-b462-dc449e42ef49</name>
+          <entityField>STANDARD_ADDRESS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..bd812680650a1960d3848cc068685b565b20f281
--- /dev/null
+++ b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DuplicatePersonPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+</neonView>
diff --git a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
index 5a99ae0226ac05f614f190c54732bedc624b4a5c..0a9b1256cbdc2176dacc927a459bcf2e66d599fb 100644
--- a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
+++ b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
@@ -11,6 +11,7 @@
     <tableViewTemplate>
       <name>Filters</name>
       <entityField>#ENTITY</entityField>
+      <favoriteActionGroup1>FilterActions</favoriteActionGroup1>
       <isCreatable v="false" />
       <isDeletable v="false" />
       <isEditable v="true" />
@@ -23,11 +24,16 @@
           <name>8615259b-de5b-493a-9c9d-2ff934ae1b8c</name>
           <entityField>ENTITY_TO_SCAN_NAME</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>5ae7793f-353c-45ed-995e-5153216a3661</name>
+          <entityField>DUPLICATECOUNT</entityField>
+        </neonTableColumn>
       </columns>
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>Treetable</name>
       <entityField>#ENTITY</entityField>
+      <favoriteActionGroup1>FilterActions</favoriteActionGroup1>
       <isCreatable v="false" />
       <isDeletable v="false" />
       <columns>
@@ -39,6 +45,10 @@
           <name>6730d89f-4190-4767-b3a0-a63231477ed4</name>
           <entityField>ENTITY_TO_SCAN_NAME</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>8cd35bc9-2954-4dca-b67b-083d3a27c45c</name>
+          <entityField>DUPLICATECOUNT</entityField>
+        </neonTreeTableColumn>
       </columns>
     </treeTableViewTemplate>
   </children>
diff --git a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
index 75c33f74429cbf649d0353217f044074c7a56a4a..bbb07db7e29b4b566072c7ca947047641f527f92 100644
--- a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
+++ b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
@@ -22,10 +22,6 @@
           <name>b3ce81d4-bbf5-49ec-8a7a-38119ef6973f</name>
           <entityField>ENTITY_TO_SCAN_NAME</entityField>
         </entityFieldLink>
-        <entityFieldLink>
-          <name>ba6cde5d-7661-4662-9e92-dca40b597015</name>
-          <entityField>EXTERNAL_SERVICE_USAGE_ALLOWED</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>51bf489d-7536-4fc5-a187-8f2610b35b3d</name>
           <entityField>ID_FIELD_NAME</entityField>
diff --git a/neonView/InterestEdit_view/InterestEdit_view.aod b/neonView/InterestEdit_view/InterestEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5906d838178ac3079e96c62304368fb513ebcc93
--- /dev/null
+++ b/neonView/InterestEdit_view/InterestEdit_view.aod
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>InterestEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>64509785-fd15-4d04-8c58-346011ae894b</name>
+          <entityField>TITLE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>bb5c4849-ce7c-4a71-ab43-03c7c5a6481b</name>
+          <entityField>DESCRIPTION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>896cab23-b7e0-477f-83d9-0c470a5c01e5</name>
+          <entityField>IS_DEFAULT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>00313338-1e50-406e-aa1b-ff52372dee50</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/InterestFilter_view/InterestFilter_view.aod b/neonView/InterestFilter_view/InterestFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..93622b68cd8b1ea51eb20e82170d1c8d6de3f856
--- /dev/null
+++ b/neonView/InterestFilter_view/InterestFilter_view.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>InterestFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <columns>
+        <neonTableColumn>
+          <name>9300597d-e775-4f6e-908c-cdf5bcfa98e8</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>c8451bde-7bff-481d-979a-608685f4ab6d</name>
+          <entityField>DESCRIPTION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2b7f4c6d-cc9b-4dbe-b7ce-d475145d96da</name>
+          <entityField>IS_DEFAULT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6a3fac1b-d701-41eb-acda-6c4a89ddf78f</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod b/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2226453c25dc93f383de2e67774fbcbaa467df98
--- /dev/null
+++ b/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>InterestLinkDrawer_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Interests</layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>2f09a6f1-40bd-459e-bde1-c3b89999c65d</name>
+      <entityField>#ENTITY</entityField>
+      <view>InterestLinkFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod b/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2e46bceb989a709ac0942ba03c5ecef484dcbe86
--- /dev/null
+++ b/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>InterestLinkEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>a9156ed7-cb2e-4b0d-874d-c41fdae16388</name>
+          <entityField>INTEREST_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>24378d86-4805-49d6-bc9d-464bf7af0c70</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod b/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..162387862cf00ad881b94050fbe3b34dd41e313d
--- /dev/null
+++ b/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>InterestLinkFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <columns>
+        <neonTableColumn>
+          <name>261f0387-dd00-486d-add4-56d0c64be583</name>
+          <entityField>INTEREST_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>b464ab35-1749-46c6-ac30-bb65040fe4a7</name>
+          <entityField>DESCRIPTION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>ef3ef573-0e98-441c-8232-63e7df3b5b9c</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod b/neonView/InterestLookup_view/InterestLookup_view.aod
similarity index 52%
rename from neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod
rename to neonView/InterestLookup_view/InterestLookup_view.aod
index 03a42bc169f8edf17595f673f799194149d4eb81..cdca5093c70d98789700d3af0008cf2623640e76 100644
--- a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod
+++ b/neonView/InterestLookup_view/InterestLookup_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>DuplicatesUnrelatedOrganisationFilter_view</name>
+  <name>InterestLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
@@ -9,20 +9,15 @@
   </layout>
   <children>
     <tableViewTemplate>
-      <name>UnrelatedOrganisations</name>
-      <hideContentSearch v="true" />
-      <entityField>#ENTITY</entityField>
-      <isCreatable v="false" />
-      <isEditable v="false" />
-      <title>Unrelated organisation duplicates</title>
+      <name>Table</name>
       <columns>
         <neonTableColumn>
-          <name>04681f8d-b941-4a66-be50-6ac08d6f52a4</name>
-          <entityField>SourceDuplicateDescription</entityField>
+          <name>1849514e-f5fe-4a4e-bf65-21d6db40676f</name>
+          <entityField>TITLE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>b293ed18-ebf5-474e-8ec2-851a3562b4d5</name>
-          <entityField>UnrelatedDuplicateDescription</entityField>
+          <name>785af202-f94d-48e9-b75f-cae6d128dcae</name>
+          <entityField>DESCRIPTION</entityField>
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
diff --git a/neonView/LinktMain_view/WeblinkMain_view.aod b/neonView/LinktMain_view/WeblinkMain_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b98b9afa1ebb1078885de5ed53d03889b85032d2
--- /dev/null
+++ b/neonView/LinktMain_view/WeblinkMain_view.aod
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkMain_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <masterSlaveLayout>
+      <name>layout</name>
+      <master>a9bd300d-4c93-4d04-b6bc-ca007a834a51</master>
+    </masterSlaveLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>a9bd300d-4c93-4d04-b6bc-ca007a834a51</name>
+      <entityField>#ENTITY</entityField>
+      <view>WeblinkPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>4318f521-5462-4767-bd9b-6966cf2e4734</name>
+      <entityField>#ENTITY</entityField>
+      <view>WeblinkDrawer_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>303de4e6-03de-419d-9875-42e10b912a1f</name>
+      <entityField>Clicks</entityField>
+      <view>WeblinkClickFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/MailLogFilter_view/MailLogFilter_view.aod b/neonView/MailLogFilter_view/MailLogFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..1bf071b561b14d3ee3d61aae946a6e414152ce0b
--- /dev/null
+++ b/neonView/MailLogFilter_view/MailLogFilter_view.aod
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>MailLogFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <favoriteActionGroup1>RecipientActions</favoriteActionGroup1>
+      <columns>
+        <neonTableColumn>
+          <name>5459efc9-2de2-4e33-b1bf-3418830b8014</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>315e09a6-dcd3-4fbc-b254-131a3df10c91</name>
+          <entityField>MAILING_SUBJECT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>b6fec338-e4c6-42cb-871c-2a30fb16cbbf</name>
+          <entityField>SENDER_EMAIL</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>e0501a66-e6c5-4d7d-b0d5-bd246d110e0a</name>
+          <entityField>RECIPIENT_EMAIL</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>34f08aa2-082f-481e-9f19-ffb47413cf6e</name>
+          <entityField>TESTRUN</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>489298fa-f805-437d-9a7f-e8acfb645e91</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2f5bd92d-61a1-4c45-99bf-ef6230541768</name>
+          <entityField>DATE_SEND</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>83d29954-ca19-4df1-8022-59e785f24eb5</name>
+          <entityField>DATE_OPENED</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+    <treeTableViewTemplate>
+      <name>treetable</name>
+      <favoriteActionGroup1>RecipientActions</favoriteActionGroup1>
+      <columns>
+        <neonTreeTableColumn>
+          <name>58aebe6f-fe09-4136-acb5-0cc485914787</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>2fadf61d-456e-421e-8111-fafde3e5564b</name>
+          <entityField>MAILING_SUBJECT</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>7f13e3db-2dae-4dd4-9c80-9707a0224a35</name>
+          <entityField>SENDER_EMAIL</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>eee473cf-add3-4880-bc7b-87c605a35977</name>
+          <entityField>RECIPIENT_EMAIL</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>81fdca37-2cc6-4a2e-81c3-760d6197ac87</name>
+          <entityField>TESTRUN</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>82cef432-64fc-4cc5-90a0-e449f2e1a19f</name>
+          <entityField>STATUS</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>50f91fec-b9ac-44cf-885a-c2f59fe028b7</name>
+          <entityField>DATE_SEND</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MemberFilter_view/MemberFilter_view.aod b/neonView/MemberFilter_view/MemberFilter_view.aod
index 87b04dc9cc12b236f1e3d574fddec941125e0d63..52aed59f96eaef6f02026543abece55c8d686cf1 100644
--- a/neonView/MemberFilter_view/MemberFilter_view.aod
+++ b/neonView/MemberFilter_view/MemberFilter_view.aod
@@ -45,6 +45,10 @@
           <name>c23f4e8b-87a1-4535-b2d1-f6c97d6bfe0b</name>
           <entityField>POSITION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>fe949666-5fe7-42ef-acf1-748ed336682d</name>
+          <entityField>PERSON_ATTR_LOYALTY</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>bea82980-0639-405a-ab3f-92e45f97090e</name>
           <entityField>MEMBERROLE</entityField>
@@ -87,6 +91,10 @@
           <name>87770e60-967b-4411-9eb3-0397fda4663e</name>
           <entityField>POSITION</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>6ff9f7d4-e619-4d3b-afa2-279dc0817bfc</name>
+          <entityField>PERSON_ATTR_LOYALTY</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>2dc17972-2e5a-424a-b069-2b8f04b35f6c</name>
           <entityField>MEMBERROLE</entityField>
diff --git a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod b/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod
deleted file mode 100644
index c950c689201ccb9ecaf23a58f879058711e6c866..0000000000000000000000000000000000000000
--- a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>OrganisationDuplicatesFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>OrganisationDuplicatesTable</name>
-      <hideContentSearch v="true" />
-      <entityField>#ENTITY</entityField>
-      <favoriteActionGroup1>OrganisationOpenClusterDetailActionGroup</favoriteActionGroup1>
-      <favoriteActionGroup2>DuplicateClusterActionGroup</favoriteActionGroup2>
-      <isCreatable v="false" />
-      <isDeletable v="false" />
-      <isEditable v="false" />
-      <columns>
-        <neonTableColumn>
-          <name>ebe8d904-449c-49bd-915c-5b4fee894bc2</name>
-          <entityField>CLUSTER_DESCRIPTION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>48db4335-6bdb-4a6a-809e-f9c371733f85</name>
-          <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
index cf3a70c9a59119e3e829b6fe0acdc0b53b1a0d10..0e6500095ffe50942035ec4db7acb782dde76106 100644
--- a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
+++ b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
@@ -12,9 +12,9 @@
   </layout>
   <children>
     <neonViewReference>
-      <name>f2fa0351-15af-4d1c-b7dd-0e42d9c7889f</name>
-      <entityField>SelfDuplicatesUncached</entityField>
-      <view>OrganisationNoNoiseTable_view</view>
+      <name>933cd72c-fd3a-4b91-aad6-8e129d6233e5</name>
+      <entityField>Duplicates</entityField>
+      <view>DuplicateOrganisationEdit_view</view>
     </neonViewReference>
     <genericViewTemplate>
       <name>Edit</name>
diff --git a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
index d0a3e39a2851e9ba458d22537779ff15dd1e7454..75d8254a1e1995cd430b2e0a4f8b50a1120a49b0 100644
--- a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
+++ b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
@@ -53,7 +53,6 @@
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1>
       <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2>
-      <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3>
       <linkedColumns>
         <element>NAME</element>
       </linkedColumns>
@@ -102,7 +101,6 @@
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1>
       <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2>
-      <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3>
       <linkedColumns>
         <element>NAME</element>
       </linkedColumns>
diff --git a/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod
index 67ceac6a5cdafeb611c83c06583b634263c4b921..9457155195dafc5a55d96976ca5adb0ac88110a1 100644
--- a/neonView/OrganisationMain_view/OrganisationMain_view.aod
+++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod
@@ -76,9 +76,9 @@
       <view>LogHistoryFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>cbac7602-9eba-4e5d-8617-3d0b33e55ca1</name>
-      <entityField>SelfDuplicatesUncached</entityField>
-      <view>OrganisationFilter_view</view>
+      <name>a5ab96e5-927c-4db3-b7ed-f0c0aadcb89b</name>
+      <entityField>Duplicates</entityField>
+      <view>DuplicateOrganisationFilter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod b/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod
deleted file mode 100644
index 69ab192629f5b172f18bc89eaccf2b384fdfb3bb..0000000000000000000000000000000000000000
--- a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>PersonClusterPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>156ebee5-6b13-462f-b956-0470f27a174b</name>
-      <entityField>DuplicatePersonsConsumer</entityField>
-      <view>PersonLookup_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>d8afce27-436c-42f0-a326-98bf6539b7bd</name>
-      <entityField>DuplicatesUnrelatedPersonConsumer</entityField>
-      <view>DuplicatesUnrelatedPersonFilter_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod b/neonView/PersonDSGVO_view/PersonDSGVO_view.aod
similarity index 55%
rename from neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod
rename to neonView/PersonDSGVO_view/PersonDSGVO_view.aod
index 72d99cac595e86b488e878b16d1a700b90746e48..f6032747a6b2fd054d15c3eec3567dd90377566e 100644
--- a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod
+++ b/neonView/PersonDSGVO_view/PersonDSGVO_view.aod
@@ -1,23 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>OrganisationClusterMain_view</name>
+  <name>PersonDSGVO_view</name>
+  <title>Data Privacy</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="false" />
   <layout>
     <boxLayout>
       <name>layout</name>
-      <direction>HORIZONTAL</direction>
+      <direction>VERTICAL</direction>
     </boxLayout>
   </layout>
   <children>
     <neonViewReference>
-      <name>b25f94bf-9316-4438-be78-b8cf596440b3</name>
-      <entityField>DuplicateOrganisationsConsumer</entityField>
-      <view>OrganisationFilter_view</view>
+      <name>54d1f4d3-52f9-4820-a8b8-41a609f3b613</name>
+      <entityField>DSGVOEntries</entityField>
+      <view>DSGVOFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>5589bb81-171d-417b-a1b2-975144109d55</name>
-      <entityField>#ENTITY</entityField>
-      <view>DuplicatesUnrelatedCluster_view</view>
+      <name>73496b8c-9361-4839-9ed7-f18e98993369</name>
+      <entityField>DSGVODeleteFlags</entityField>
+      <view>DSGVODeleteFlagFilter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod b/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod
deleted file mode 100644
index c11bc1396a663aa39b2f17a1b691d239ddbd79c6..0000000000000000000000000000000000000000
--- a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>PersonDublicatesTab_view</name>
-  <title>Person duplicates</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-      <direction>HORIZONTAL</direction>
-    </boxLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>c82a1ae2-9f8f-4149-8bac-5621136d779b</name>
-      <entityField>SelfPersonDuplicatesConsumer</entityField>
-      <view>PersonDuplicatesFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>2aee29fb-9844-4e3a-a284-a04dadf9eadc</name>
-      <entityField>DuplicatesUnrelatedPersonConsumer</entityField>
-      <view>DuplicatesUnrelatedPersonFilter_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod b/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod
deleted file mode 100644
index 0e95f05f72286d568edddded65e4cd0d21031823..0000000000000000000000000000000000000000
--- a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>PersonDuplicatesFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <groupLayout>
-      <name>layout</name>
-    </groupLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>PersonDuplicatesTable</name>
-      <hideContentSearch v="true" />
-      <entityField>#ENTITY</entityField>
-      <favoriteActionGroup1>PersonOpenClusterDetailActionGroup</favoriteActionGroup1>
-      <isCreatable v="false" />
-      <isDeletable v="false" />
-      <isEditable v="false" />
-      <isSaveable v="false" />
-      <linkedFrame></linkedFrame>
-      <columns>
-        <neonTableColumn>
-          <name>7508e984-6a0b-4126-ab49-452e2b54f76d</name>
-          <entityField>CLUSTER_DESCRIPTION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>8615259b-de5b-493a-945d-2ff934ae1b8c</name>
-          <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-    <treeTableViewTemplate>
-      <name>Treetable</name>
-      <entityField>#ENTITY</entityField>
-      <favoriteActionGroup1>PersonOpenClusterDetailActionGroup</favoriteActionGroup1>
-      <columns>
-        <neonTreeTableColumn>
-          <name>060c69aa-242a-4141-acd1-b82a76d99521</name>
-          <entityField>CLUSTER_DESCRIPTION</entityField>
-        </neonTreeTableColumn>
-        <neonTreeTableColumn>
-          <name>67458881-0d45-406e-a362-852711b09bd1</name>
-          <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField>
-        </neonTreeTableColumn>
-      </columns>
-    </treeTableViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/PersonEdit_view/PersonEdit_view.aod b/neonView/PersonEdit_view/PersonEdit_view.aod
index 1cc1577de9b2c4f38ee39b97d8e14d70a9d74921..27586ee38b4febc4820c68577184586052e44464 100644
--- a/neonView/PersonEdit_view/PersonEdit_view.aod
+++ b/neonView/PersonEdit_view/PersonEdit_view.aod
@@ -12,9 +12,9 @@
   </layout>
   <children>
     <neonViewReference>
-      <name>589e5a82-e923-4b70-a983-5e104d2beb2b</name>
-      <entityField>SelfDuplicatesUncached</entityField>
-      <view>PersonDuplicateEditview_view</view>
+      <name>a6b55bfc-7b0c-4020-a78d-18ee9a1d2b26</name>
+      <entityField>Duplicates</entityField>
+      <view>DuplicatePersonEdit_view</view>
     </neonViewReference>
     <genericViewTemplate>
       <name>Edit</name>
diff --git a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod b/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod
similarity index 61%
rename from neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod
rename to neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod
index 0b23c809aafd9bedf13995b9049e1be41c8a6ea2..d9c42e27f8752d4180930f5d194eb04da08a0c30 100644
--- a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod
+++ b/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod
@@ -1,17 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>OrganisationUnrelatedDuplicates_view</name>
+  <name>PersonFilterOverlay_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="false" />
+  <isOverlay v="true" />
   <layout>
-    <boxLayout>
+    <noneLayout>
       <name>layout</name>
-    </boxLayout>
+    </noneLayout>
   </layout>
   <children>
     <neonViewReference>
-      <name>edc0822d-4388-4e3d-93d7-2e46e32f5742</name>
-      <entityField>DuplicatesUnrelatedOrganisationConsumer</entityField>
-      <view>DuplicatesUnrelatedOrganisationFilter_view</view>
+      <name>e4a045d7-32ca-495e-9e8e-c3ac71d7c100</name>
+      <entityField>#ENTITY</entityField>
+      <view>PersonFilter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/PersonFilter_view/PersonFilter_view.aod b/neonView/PersonFilter_view/PersonFilter_view.aod
index c892033123ccd327c4dc49c13432e724b95843bf..2471b831c6a88a31be023611935956b63665d5e6 100644
--- a/neonView/PersonFilter_view/PersonFilter_view.aod
+++ b/neonView/PersonFilter_view/PersonFilter_view.aod
@@ -57,7 +57,6 @@
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1>
       <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2>
-      <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3>
       <linkedColumns>
         <element>FIRSTNAME</element>
         <element>LASTNAME</element>
@@ -107,7 +106,6 @@
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1>
       <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2>
-      <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3>
       <linkedColumns>
         <element>FIRSTNAME</element>
         <element>LASTNAME</element>
diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod
index 5f2dc5ffa83f910d3b29a2c446453b47ac6d361e..d6983b3781d67841a8fa65e4ec8c11ff621d4290 100644
--- a/neonView/PersonMain_view/PersonMain_view.aod
+++ b/neonView/PersonMain_view/PersonMain_view.aod
@@ -60,14 +60,24 @@
       <view>LogHistoryFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>fb1dd01e-a3ad-4708-b6a0-d273cbb0b50f</name>
-      <entityField>DSGVOEntries</entityField>
-      <view>DSGVOFilter_view</view>
+      <name>f0895c2a-5517-4c7b-80ed-147e4078603d</name>
+      <entityField>#ENTITY</entityField>
+      <view>PersonDSGVO_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>82f19c55-fa96-43de-9f26-46069b28db31</name>
+      <entityField>#ENTITY</entityField>
+      <view>PersonMarketing_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>24ea8bc9-7ed0-4bed-a984-b1a9f3815c7c</name>
+      <entityField>Duplicates</entityField>
+      <view>DuplicatePersonFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>d128a678-b1c0-49d0-a74c-7860d3a85247</name>
-      <entityField>SelfDuplicatesUncached</entityField>
-      <view>PersonFilter_view</view>
+      <name>78a658a3-680b-4420-85a2-6e99ccff9f94</name>
+      <entityField>DSGVOEntries</entityField>
+      <view>DSGVOFilter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod b/neonView/PersonMarketing_view/PersonMarketing_view.aod
similarity index 57%
rename from neonView/PersonClusterMain_view/PersonClusterMain_view.aod
rename to neonView/PersonMarketing_view/PersonMarketing_view.aod
index dcbd9badb6fe40452c89f4d4f54cef06fb5a0938..da7de6d071af1cc10158498f3b23a1aa3740507c 100644
--- a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod
+++ b/neonView/PersonMarketing_view/PersonMarketing_view.aod
@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>PersonClusterMain_view</name>
+  <name>PersonMarketing_view</name>
+  <title>Advertising</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
       <name>layout</name>
-      <direction>HORIZONTAL</direction>
     </boxLayout>
   </layout>
   <children>
     <neonViewReference>
-      <name>ff307d1c-9de7-4842-a697-05e783eca14b</name>
-      <entityField>DuplicatePersonsConsumer</entityField>
-      <view>PersonFilter_view</view>
+      <name>dfdbd5b2-eb37-436f-8256-e7ba55eba1dc</name>
+      <entityField>ContactCommunicationSettings</entityField>
+      <view>CommunicationSettingsDrawer_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>0df195b2-9074-4734-b6df-be3bbf47050a</name>
-      <entityField>#ENTITY</entityField>
-      <view>DuplicatesUnrelatedCluster_view</view>
+      <name>d3ca9779-515c-4361-b8d6-4b13d6a1155d</name>
+      <entityField>InterestLinks</entityField>
+      <view>InterestLinkDrawer_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
index 8c93d1744c178359d45cef74f341f0c98eca70c8..7df0d8ad40546a5a1f45f10b4ae096553100605a 100644
--- a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
+++ b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
@@ -97,6 +97,13 @@
           <entityField>currentSalesPrice</entityField>
         </neonTableColumn>
       </columns>
+      <editRendererMapping>
+        <rendererMappingEntry>
+          <name>84b72e32-9a2a-4bf3-a87c-44f47f6c10d2</name>
+          <fieldName>QUANTITY</fieldName>
+          <renderer>numberInput</renderer>
+        </rendererMappingEntry>
+      </editRendererMapping>
     </multiEditTableViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7874f86a6efcc25a59becd71d6b9f6daf8db1598
--- /dev/null
+++ b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkClickFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <columns>
+        <neonTableColumn>
+          <name>49a61a9f-2f93-4f97-8829-1297327be796</name>
+          <entityField>URL</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7651e2ad-a70b-43aa-892d-20bae6d745ff</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>b0052499-74c5-4ed8-aa99-7905b1686b1c</name>
+          <entityField>DATE_OPENED</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>8a018eda-e3c4-4284-aa61-92df079869cf</name>
+          <entityField>DEVICE_TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>d484312d-23e9-4b72-83f8-c449fc546117</name>
+          <entityField>BROWSER</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>5dbbd7c3-dffe-4a98-9efa-de9b88ed5da2</name>
+          <entityField>OPERATING_SYSTEM</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>65a6fa62-e067-46a1-8996-7f8706f1c8f2</name>
+          <entityField>IP_ADDRESS</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod
similarity index 67%
rename from neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod
rename to neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod
index 670b2c939dc7b4c793999bf90f30c9503d4c0052..4eb8096b64e4a5a70ed2b466095324fdddf50531 100644
--- a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod
+++ b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>DuplicatesUnrelatedCluster_view</name>
+  <name>WeblinkDrawer_view</name>
+  <title>Weitere Informationen</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
@@ -9,9 +10,9 @@
   </layout>
   <children>
     <neonViewReference>
-      <name>484990d0-890b-48b8-8618-6f0fab367138</name>
-      <entityField>DuplicatesUnrelatedPersonConsumer</entityField>
-      <view>DuplicatesUnrelatedPersonFilter_view</view>
+      <name>92f84737-e546-4f97-842b-38f3a210e294</name>
+      <entityField>WebtrackingTags</entityField>
+      <view>WeblinkTagFilter_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/WeblinkEdit_view/WeblinkEdit_view.aod b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8a245fb3766020659cbcb7a1632f972442312024
--- /dev/null
+++ b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>NORMAL</size>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>generic</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>0c59b8f2-6f20-4842-a209-ab14e258093a</name>
+          <entityField>URL</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>70c52c3f-7e0b-4069-b56f-e0769f911efa</name>
+          <entityField>LINKTYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>836aafd9-a8c3-4a7c-9b2c-260ec8bbee45</name>
+          <entityField>SCORE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>4313c2fb-3551-4c66-81c9-ad950c44a105</name>
+          <entityField>PLACEHOLDER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>2b22fb4a-5e7e-48ee-b6d1-3ee4381fb419</name>
+          <entityField>ISREDIRECT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>90ab2682-bc2d-4989-ab7b-b47045a3cbf3</name>
+          <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>0f6d1fc5-fbd9-443e-84a3-ffba18c3443a</name>
+      <entityField>WebtrackingTags</entityField>
+      <view>WeblinkTagMultiEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/WeblinkFilter_view/WeblinkFilter_view.aod b/neonView/WeblinkFilter_view/WeblinkFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..193c98458b43c941831350eb9a879ce306574caa
--- /dev/null
+++ b/neonView/WeblinkFilter_view/WeblinkFilter_view.aod
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <hideContentSearch v="false" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>ece26f14-59f5-44ac-8d2c-2d032fa4a668</name>
+          <entityField>URL</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>fae5a83e-e00f-436f-a908-66c41e5f720d</name>
+          <entityField>LINKTYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>d87cdb53-bbc2-499f-8b2d-9c464162a969</name>
+          <entityField>SCORE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2307e8e1-233f-44b7-94a4-dd0f6ae9257e</name>
+          <entityField>Tags</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/WeblinkPreview_view/WeblinkPreview_view.aod b/neonView/WeblinkPreview_view/WeblinkPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3feb2f988f85f1ebd50a9621e7d02e05393d0275
--- /dev/null
+++ b/neonView/WeblinkPreview_view/WeblinkPreview_view.aod
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>card</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>card</name>
+      <iconField>LINKTYPE_ICON</iconField>
+      <titleField>URL</titleField>
+      <subtitleField>LINKTYPE</subtitleField>
+      <descriptionField>SCORE</descriptionField>
+      <entityField>#ENTITY</entityField>
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>generic</name>
+      <fields>
+        <entityFieldLink>
+          <name>611eb710-9f52-4826-a40c-282b6ac6daab</name>
+          <entityField>Tags</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>92bb0227-5418-4a61-a7cd-eccc8def83f9</name>
+          <entityField>PLACEHOLDER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>840b0f8d-763f-402d-b318-6317402a7c6c</name>
+          <entityField>ISREDIRECT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>a807f6b9-252c-4545-a2c9-266c64012097</name>
+          <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3e2e9c2e96657b325c47036ddbd380ab470307ed
--- /dev/null
+++ b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkTagEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>4b955db8-013d-47b6-878e-8b1b6fbeb1a7</name>
+          <entityField>TAG</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ab82dd3c04f352a34fed3414ec0b4a9c792cd944
--- /dev/null
+++ b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>WeblinkTagFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>f9081075-839a-49d4-b9af-b0fce6ae5a3e</name>
+          <entityField>TAG</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod b/neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod
similarity index 65%
rename from neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod
rename to neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod
index 9798328f4161f04c56cd02f48166a9dce167306c..e70d8e9017c181cd25580eff0f0624bb765d78f2 100644
--- a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod
+++ b/neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
-  <name>DuplicateScannerResultFieldConfigEdit_view</name>
+  <name>WeblinkTagMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
@@ -9,14 +9,12 @@
   </layout>
   <children>
     <genericMultipleViewTemplate>
-      <name>ResultFieldsConfig</name>
-      <autoNewRow v="true" />
-      <entityField>#ENTITY</entityField>
-      <title>Result fields</title>
+      <name>genericMultiple</name>
       <columns>
         <neonGenericMultipleTableColumn>
-          <name>e330572c-aa47-4c52-a760-3e8765ce3dd0</name>
-          <entityField>ENTITY_FIELD_NAME</entityField>
+          <name>6053ac7f-0c00-415b-9c40-32fd6b783792</name>
+          <entityField>TAG</entityField>
+          <fullWidth v="true" />
         </neonGenericMultipleTableColumn>
       </columns>
     </genericMultipleViewTemplate>
diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
index 0325b162d02a5c5d22160558bbd184f4a8c34b51..357db8c7f374d4c0265becca52817d845a71cc7b 100644
--- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
+++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
@@ -90,6 +90,11 @@
       <name>geo.maptiler.apikey</name>
       <description>An API Key for using Maptiler functions. For example for the MapViewTemplate.</description>
     </customStringProperty>
+    <customIntegerProperty>
+      <name>bulkmail.dateToSendPassedAfter</name>
+      <description>Number of hours after which a planned Bulkmail no longer gets send</description>
+      <property v="24" />
+    </customIntegerProperty>
   </customConfigProperties>
   <customProperties>
     <customBooleanProperty>
@@ -101,14 +106,6 @@
       <name>dsgvo.active</name>
       <property v="true" />
     </customBooleanProperty>
-    <customDurationProperty>
-      <name>dsgvo.deletionTimeDays</name>
-      <description>Time elapses after delete flag is set until the db entry is automatically deleted</description>
-    </customDurationProperty>
-    <customDurationProperty>
-      <name>dsgvo.deletionTimeMonths</name>
-      <description>When no history entry exists within that duration to today a delete flag is set</description>
-    </customDurationProperty>
     <customBooleanProperty>
       <name>nominatim.enable</name>
       <property v="true" />
@@ -197,5 +194,10 @@
       <description>Default VAT in percent</description>
       <property>19</property>
     </customStringProperty>
+    <customStringProperty>
+      <name>bulkmail.fileStorage</name>
+      <description>Save Location for send Mails. Path is relative to Serverpath</description>
+      <property>/bulkMailFiles/</property>
+    </customStringProperty>
   </customProperties>
 </preferences>
diff --git a/process/AttributeRegistry_basic/process.js b/process/AttributeRegistry_basic/process.js
index 0d5b68b1c70a1889289312420d1b8902818b0866..4def7134d09a4043376a7d4f4d704d6c946953cd 100644
--- a/process/AttributeRegistry_basic/process.js
+++ b/process/AttributeRegistry_basic/process.js
@@ -19,6 +19,7 @@ $AttributeRegistry.departments = function(){return "87d4ff5b-0ab6-4534-be26-76c6
 $AttributeRegistry.salesprojectType = function(){return "fd3963bc-8e60-411a-9911-b97eb73e5cf7";};
 $AttributeRegistry.responsibleADsupervisor = function(){return "c0b26482-c0aa-413d-a9c3-f44c56bd04a9";};
 $AttributeRegistry.industry = function(){return "7e9927a4-41e4-426f-bddd-c3e9ee3b093e";};
+$AttributeRegistry.loyalty = function(){return "e73ed929-8631-46de-b28f-eb1423abb808";};
 
 $AttributeRegistry.visitPlanFrequency = function(){return "547b8b9d-88ba-4590-9e01-34d2a58116cc";};
 $AttributeRegistry.visitPlanFrequency$monthly = function(){return "8c100817-1d2b-4fc7-8fdd-fd0370e19385";};
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 98ff92d9eb3f27b726c777f1ed7aa3dc026bdfb8..965a947abf7ef27ac5867379970efcdb7eb8e93e 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -43,7 +43,8 @@ AttributeUtil.getPossibleUsageContexts = function()
         "DocumentTemplate",
         "SupportTicket",
         "Leadimport",
-        "ImportField"
+        "ImportField",
+        "DSGVO"
     ];
 }
 
diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js
index 92940b61ef2b4badfb3a3188dd049ed3415ef80e..6261b7d59664073cc80b657c534ff99346673c4f 100644
--- a/process/Bulkmail_lib/process.js
+++ b/process/Bulkmail_lib/process.js
@@ -1,3 +1,8 @@
+import("system.logging");
+import("system.entities");
+import("MarketingCondition_lib");
+import("system.fileIO");
+import("system.project");
 import("Util_lib");
 import("system.translate");
 import("ActivityTask_lib");
@@ -16,6 +21,9 @@ import("Email_lib");
 import("system.process");
 import("system.notification");
 import("Document_lib");
+import("system.db");
+import("system.workflow");
+import("system.logging");
 
 /**
  * Functions for bulk mails.
@@ -27,14 +35,14 @@ function BulkMailUtils () {}
  * 
  * @param {String} pBulkMailId                      <p>
  *                                                  Id of the bulk mail.<br>
- * @param {Array} pTestRecipients (optional)        <p>
- *                                                  Overwrite the recipients (e.g. for testing).<br>
+ * @param {Bool} pTestRun (optional)                <p>
+ *                                                  True indicates a Testrun<br>
  * @param {String} pUser=currentUser (optional)     <p>
  *                                                  User that will get the notification, <br>
  *                                                  if null (not undefined!), no notification<br>
  *                                                  will be created.<br>
  */
-BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUser)
+BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRun, pUser)
 {
     if (pUser === undefined)
         pUser = EmployeeUtils.getCurrentUserId();
@@ -43,10 +51,10 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs
         .setName("sendBulkMail_serverProcess")
         .setLocalVariables({
             bulkMailId : pBulkMailId,
-            testRecipients : JSON.stringify(pTestRecipients),
+            testRun : pTestRun,
             user : pUser || ""
         })
-        .setUser(pUser)
+        .setUser(pUser||"mailbridge")
     process.startAsync(processConfig);
 }
 
@@ -56,42 +64,61 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs
  * 
  * @param {String} pBulkMailId                  <p>
  *                                              Id of the bulk mail.<br>
- * @param {Array} pTestRecipients (optional)    <p>
- *                                              Overwrite the recipients (e.g. for testing)<br>
+ * @param {Bool} pIsTestRun (optional)            <p>
+ *                                              True indicates a Testrun<br>
  * @return {Object}                             <p>
  *                                              Count of sucessful and failed mails.<br>
  */
-BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients)
+BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun)
 {
+    if (pIsTestRun == undefined)
+    {
+        pIsTestRun = false;
+    }
+    
     var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = 
-                newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS")
+                newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS")
                     .from("BULKMAIL")
                     .where("BULKMAIL.BULKMAILID", pBulkMailId)
                     .arrayRow();
 
-    useTemplateAttachments = useTemplateAttachments == "1";
+    useTemplateAttachments = Utils.toBoolean(useTemplateAttachments);
         
     var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments);
-
     var recipientData;
-    if (pTestRecipients)
-    {
-        recipientData = pTestRecipients.map(function (row)
-        {
-            return ["", row[0], row[1], "", ""];
-        });
-    }
-    else
+    var testRecipientData;
+    
+    var recipientLoadConfig = entities.createConfigForLoadingRows()
+        .fields(["BULKMAILRECIPIENTID", "CONTACT_ID", "EMAIL_ADDRESS", "PERSON_ID", "ORGANISATION_ID"])
+        .entity("BulkmailRecipient_entity")
+        .provider("RecipientsToBeMailed")
+        .addParameter("BulkMailId_param", pBulkMailId)
+        .addParameter("IsTestMail_param", pIsTestRun);
+    
+    recipientData = entities.getRows(recipientLoadConfig);
+    
+    if (pIsTestRun)
     {
-        recipientData = newSelect("BULKMAILRECIPIENTID, BULKMAILRECIPIENT.CONTACT_ID, BULKMAILRECIPIENT.EMAIL_ADDRESS, PERSON_ID, ORGANISATION_ID")
-            .from("CONTACT")
-            .join("BULKMAILRECIPIENT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")
-            .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId)
-            .and("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent(), SqlBuilder.NOT_EQUAL())
-            .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true))
+        testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS")
+            .from("BULKMAILTESTRECIPIENT")
+            .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID", pBulkMailId)
             .table();
     }
-    var contactIds = recipientData.map(function (e) {return e[1];});
+    var mailrunId = util.getNewUUID();
+    
+    new SqlBuilder()
+        .tableName("MAIL_RUN")
+        .insertFields({
+            "MAIL_RUNID": mailrunId,
+            "OBJECT_ROWID": pBulkMailId,
+            "OBJECT_TYPE": "Bulkmail",
+            "DATE_RUN_START": vars.get("$sys.date"),
+            "STATUS": $KeywordRegistry.bulkMailStatus$beingSent(),
+            "TESTRUN": pIsTestRun ? 1 : 0
+        });
+    
+    
+    var contactIds = recipientData.map(function (recipient) {return recipient["CONTACT_ID"];});
     var successIds = [];
     var failedIds = [];
     var sentDate = vars.get("$sys.date");
@@ -102,23 +129,44 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients)
     
     var bulkMailLink = [["BulkMail", pBulkMailId]];
     var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]);
-    
-    for (let i = 0, l = recipientData.length; i < l; i++)
+    if (!pIsTestRun)
     {
-        let isSuccess = false;
-        let contactId = recipientData[i][1];
-        let email = mails[contactId];
-        if (email !== undefined && recipientData[i][2])
+        recipientData.forEach(function (recipient)
         {
-            email.toRecipients = [recipientData[i][2]];
-            email.sender = emailSender;
-            email.subject = subjects[contactId];
+            let isSuccess = false;
+            let recipientId = recipient["BULKMAILRECIPIENTID"];
+            let contactId = recipient["CONTACT_ID"];
+            let emailAddress = recipient["EMAIL_ADDRESS"];
+            let personId = recipient["PERSON_ID"];
+            let organisationId = recipient["ORGANISATION_ID"];
+            let email = mails[contactId];
+            let mailLogId = util.getNewUUID();
+            if (email !== undefined && emailAddress)
+            {
+                email.toRecipients = [emailAddress];
+                email.sender = emailSender;
+                email.subject = subjects[contactId];
 
-            isSuccess = email.send();
-        }
-        if (recipientData[i][0])    //set the recipient status to 'sent' or 'failed'
-        {
-            Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]);
+                BulkMailUtils.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML());
+                isSuccess = email.send();
+            }
+
+            //set the recipient status to 'sent' or 'failed'
+            new SqlBuilder()
+                .tableName("MAIL_LOG")
+                .insertFields({
+                    "MAIL_LOGID": mailLogId,
+                    "MAIL_RUN_ID": mailrunId,
+                    "CONTACT_ID": contactId,
+                    "STATUS": isSuccess ? $KeywordRegistry.bulkMailRecipientStatus$sent() : $KeywordRegistry.bulkMailRecipientStatus$failed(),
+                    "SENDER_EMAIL": emailSender,
+                    "RECIPIENT_EMAIL": emailAddress,
+                    "MAILING_SUBJECT": subjects[contactId],
+                    "DATE_SEND": vars.get("$sys.date")
+                });
+                
+            //TODO: Klären was von alter Logik noch bleiben soll. Status macht nur Sinn wenn jede Bulkmail nur einmal gesendet wird. Bleiben Activitys?
+            Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientId);
             if (isSuccess && createActivity == "1")
             {
                 let activityData = {
@@ -127,23 +175,69 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients)
                     subject : activitySubject,
                     content : email.body
                 };
-                let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]];
+                let contactLink = [[ContactUtils.getContextByPersOrg(personId, organisationid), contactId]];
                 ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink));
             }
-        }
+        });
+
+        newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN())
+            .updateFields({
+                "STATUS": $KeywordRegistry.bulkMailRecipientStatus$sent(),
+                "SENTDATE": sentDate
+            });
+
+        newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds, SqlBuilder.IN())
+            .updateFields({
+                "STATUS": $KeywordRegistry.bulkMailRecipientStatus$failed(),
+                "SENTDATE": sentDate
+            });
+
+        newWhere("MAIL_RUN.MAIL_RUNID", mailrunId)
+            .updateFields({
+                "STATUS": $KeywordRegistry.bulkMailStatus$sent(),
+                "DATE_RUN_FINISHED": vars.get("$sys.date")
+            });
+
+        newWhere("BULKMAIL.BULKMAILID", pBulkMailId)
+            .updateFields({
+                "STATUS": $KeywordRegistry.bulkMailStatus$sent()
+            });
     }
-    
-    newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN())
-        .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate]);
-    
-    
-    newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds, SqlBuilder.IN())
-        .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$failed(), sentDate]);
-    
-    if (!pTestRecipients) //if its just a test run, don't set the status to sent
+    else
     {
-        newWhere("BULKMAIL.BULKMAILID", pBulkMailId)
-            .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]);
+        for (let i = 0, l = recipientData.length; i < l; i++)
+        {
+            
+            let isSuccess = false;
+            let contactId = recipientData[i][1];
+            let email = mails[contactId];
+
+            if (email !== undefined)
+            {
+                email.sender = emailSender;
+                email.subject = "Test: "+subjects[contactId];
+                for (let j =0; j<testRecipientData.length;j++)
+                {
+                    if(testRecipientData[j][1]){
+                        email.toRecipients = [testRecipientData[j][1]];
+                        isSuccess = email.send();
+
+                        Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]);
+
+                        if (testRecipientData[j][0])
+                        {
+                            let mailLogId = util.getNewUUID();
+                            db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]);
+                            this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML());
+                        }
+                    }
+            }
+
+            }
+        }
+        newWhere("MAIL_RUN.MAIL_RUNID",mailrunId)
+            .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]);
+
     }
         
     return {
@@ -399,6 +493,135 @@ BulkMailUtils.copy = function(pBulkMailId)
     };
     neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params);
 }
+/*
+ *Stores the Eml file for a bulkmailrecipient in the Filesystem
+ *
+ * @param {String} pBulkMailId          <p>
+ *                                      The id of the bulk mail.<br>
+ * @param {String} pMailRunId          <p>
+ *                                      The id of the bulk mail run.<br>
+ * @param {String} pMailLogId          <p>
+ *                                      The id of the corresponding mail log entry.<br>                                                                           
+ **/
+BulkMailUtils.storeEmlFile = function(pBulkMailId,pMailRunId, pMailLogId,pFile)
+{
+    var locationoption = project.getPreferenceValue("bulkmail.fileStorage","/bulkMailFiles/");
+    var path = vars.get("$sys.serverdata")+locationoption +pBulkMailId+"/"+pMailRunId+"/";
+    var filename = pMailLogId+".eml"
+    var fullPath = path + filename;
+    fileIO.storeData(fullPath, pFile, util.DATA_BINARY, false);
+}
+
+/*
+ *Loads the Eml file for a bulkmailrecipient from the Filesystem
+ *
+ * @param {String} pBulkMailId          <p>
+ *                                      The id of the bulk mail.<br>
+ * @param {String} pMailRunId          <p>
+ *                                      The id of the bulk mail run.<br>
+ * @param {String} pMailLogId          <p>
+ *                                      The id of the corresponding mail log entry.<br>   
+ * @return {String}                     <p>
+ *                                      The file as base64 String<br>                                                                                                              
+ **/
+BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId)
+{
+    var locationoption = project.getPreferenceValue("bulkmail.fileStorage","/bulkMailFiles/");
+    var path = vars.get("$sys.serverdata")+locationoption +pBulkMailId+"/"+pMailRunId+"/";
+    var filename = pMailLogId+".eml"
+    var fullPath = path + filename;
+    return (fileIO.getData(fullPath,util.DATA_BINARY));
+}
+
+/*
+ *Gets the redirecturl for a link in a bulkmail
+ *
+ * @param {String} pLinkId          <p>
+ *                                      The id of the link.<br>
+ *                                      
+ * @return {String}                 <p>
+ *                                      The url<br>                                          
+ **/
+BulkMailUtils.getRedirectLink = function(pLinkId)
+{
+    if (pLinkId)
+    {
+        return newSelect("WEBLINK.URL").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell();
+    }
+    return null;
+}
+/*
+ *Inserts the Redirect into the link_click table.
+ *
+ *If its the first Click the Id gets put as opener in mail_log
+ *
+ * @param {String} pMailLogId (required)<p>
+ *                                      The id of the mail log.<br>
+ * @param {String} pIpAddress           <p>
+ *                                      the ip address of the client.<br>                                     
+ * @param {String} pLinkId              <p>
+ *                                      The id of link.<br>             
+ * @param {String} pBrowsername         <p>
+ *                                      The browser that was used to open the link.<br>
+ * @param {String} pOperatingSystemName <p>
+ *                                      The Operating System that was used to open the link.<br>
+ * @param {String} pDeviceType          <p>
+ *                                      The device type that was used to open the link.<br>                                                 
+ **/
+
+BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType)
+{
+    if (!pMailLogId || !pLinkId) 
+    {
+        return;
+    }
+    
+    var linkClickId = util.getNewUUID();
+    new SqlBuilder()
+        .tableName("WEBLINK_CLICK")
+        .insertFields({
+            "WEBLINK_CLICKID": linkClickId,
+            "WEBLINK_ID": pLinkId,
+            "DEVICE_TYPE": pDeviceType || "desktop",
+            "OPERATING_SYSTEM": pOperatingSystemName,
+            "BROWSER": pBrowsername,
+            "IP_ADDRESS": pIpAddress,
+            "MAIL_LOG_ID": pMailLogId,
+            "DATE_OPENED": vars.get("$sys.date")
+        });
+    
+    newWhere("MAIL_LOG.MAIL_LOGID", pMailLogId)
+        .and("MAIL_LOG.OPENER_LINK_CLICK_ID is null")
+        .updateFields({"OPENER_LINK_CLICK_ID": linkClickId});
+}
+
+/*@TODO: Abändern nachdem geklärt ist wie wir IP-Adresse erhalten. Momentan bekommen wir nur Loadbalancer Ip.
+ *
+ **/
+
+BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader)
+{
+    return pHttpHeader["X-forwarded-for"].split(",")[0];
+}
+
+BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId)
+{
+    if (!pMailLogId || !pLinkId) 
+    {
+        return
+    }
+    var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell();
+    if (workFlowKey)
+    {
+        var variables = {
+            "MAILLOGID": pMailLogId
+        };
+        workflow.startProcessByKey(workFlowKey, variables);
+    }
+    
+}
+
+
 
 function SerialLetterUtils () {}
 
diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js
index de9bc373d0fee6098f61111dfa3ae96f8c5ab735..a88ae599dfcf16609bdf974c3854f2c3cf6f276e 100644
--- a/process/Calendar_lib/process.js
+++ b/process/Calendar_lib/process.js
@@ -1,658 +1,658 @@
-import("system.translate");
-import("system.datetime");
-import("system.neon");
-import("system.calendars");
-import("system.vars");
-import("system.db");
-import("system.swing");
-import("system.eMath");
-import("system.logging");
-import("system.tools");
-import("system.text");
-import("system.question");
-import("system.SQLTYPES");
-import("system.result");
-import("system.util");
-import("system.entities");
-import("Util_lib");
-import("Sql_lib");
-
-
-/**
- * Functions for the calendar.
- * <p>
- * <b><u>Do not create an instance of this!</u></b>
- * @class
- */
-function CalendarUtil(){}
-
-
-/*
- * Creates and opens an new task object (with link).
- *
- * @param {String} pSummary (optional)              <p>
- *                                                  The summary.<br>
- * @param {String} pDescription (optional)          <p>
- *                                                  The description.<br>
- * @param {Boolean} pWithLink (optional)            Case if its true, then an a shortcut to $image.frametable will created.<br>
- * @param {String[][]} pWithLink (optional)         <p>
- *                                                  The required informations:<br>
- *                                                  <ul>
- *                                                  <li>pWithLink[0]: Name of the frame.</li>
- *                                                  <li>pWithLink[1]: Id of the shown record.</li>
- *                                                  <li>pWithLink[2]: Linking title.</li>
- * @param {String} pUser (optional)                 <p>
- *                                                  The user (login).<br>
- * @param {[]} pAffectedUsers (optional)            <p>
- *                                                  The affected users. (login)<br>
- * @param {date} pStart (optional)                  <p>
- *                                                  Start of the task.<br>
- * @param {date} pDuration (optional)               <p>
- *                                                  Duration of the task.<br>
- * @param {integer} pCategory (optional)            <p>
- *                                                  calendars.CATEGORIES , encoded(String) (e.g.: text.encodeMS(["Service"]))
- * @param {String} pStatus (optional)               <p>
- *                                                  Status of the appointment. (calendars.STATUS_TENTATIVE, <br>
- *                                                  calendars.STATUS_CONFIRMED, calendars.STATUS_CANCELLED)<br>
- * @param {Array{[]} pComps4Refresh (optional)      <p>
- *                                                  The component which will be updated.<br>
- *
- * @return {void}
- */
-CalendarUtil.newTodo = function(pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh)
-{
-    var todo = CalendarUtil.createEntry( calendars.VTODO, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus );
-    var prompts = [];
-    prompts["comp4refresh"] = [];
-
-    if (pComps4Refresh == undefined)
-        pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Aufgabe"];
-
-    for (var i = 0; i < pComps4Refresh.length; i++)
-    {
-        if ( vars.exists(pComps4Refresh[i]))    prompts["comp4refresh"].push(pComps4Refresh[i]);
-    }
-    if(vars.getString("$sys.scope") == "vaadin")
-        neon.openCalendarEntry([todo], null, neon.OPERATINGSTATE_NEW, null)
-    else
-    {
-        if (vars.exists("$sys.currentwindow"))
-            prompts["window"] = vars.getString("$sys.currentwindow");
-        if (vars.exists("$sys.currentimage"))
-            prompts["image"] = vars.getString("$sys.currentimage");
-
-        swing.openCalendarEntry([todo], null, false, prompts);
-    }
-}
-
-
-/**
- * Finds the effective calendarId of an user in the same <br>
- * attribute order like the ADITO core, which is:<br>
- * <p>
- * exchangeEmail -> calendarID -> email<br>
- * <p>
- * <b><u>DO NOT CHANGE THIS ORDER!</u></b>
- *
- * @param {String} pUser            <p>
- *                                  To check.
- * @return                          <p>
- *                                  Effective calendar id.<br>
- */
-CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser)
-{
-    var userParams = pUser["params"];
-    
-    var resolvedCurrentUser;
-    var exchangeEmail = userParams["exchangeEMail"];
-    var calendarId = userParams["calendarID"];
-    var email = userParams["email"];
-    
-    if(exchangeEmail)
-        return exchangeEmail;
-    else if(calendarId)
-        return calendarId;
-    else if(email)
-        return email;
-    else
-        return "";
-}
-
-
-/*
- * Creates and opens an new appointment object (with link).
- *
- * @param {String} pSummary (optional)          <p>
- *                                              The summary.<br>
- * @param {String} pDescription (optional)      <p>
- *                                              The description.<br>
- * @param {Boolean} pWithLink (optional)        <p>
- *                                              True sets an link to $image.frametable<br>
- * @param {String[][]} pWithLink (optional)     Description:<br>
- *                                              <ul>
- *                                              <li>pWithLink[0]: Name of the frame</li>
- *                                              <li>pWithLink[1]: Id of the shown record</li>
- *                                              <li>pWithLink[2]: linking title</li>
- *                                              </ul>
- * @param {String} pUser (optional)             <p>
- *                                              The user (login).
- * @param {[]} pAffectedUsers (optional)        <p>
- *                                              The affected users (login).
- * @param {Date} pStart (optional)              <p>
- *                                              Begin of the task.<br>
- * @param {Date} pDuration (optional)           <p>
- *                                              Duration.<br>
- * @param {Number} pCategory (optional)         <p>
- *                                              calendars.CATEGORIES , encoded(String) (z.B.: text.encodeMS(["Service"])).<br>
- * @param {String} pStatus (optional)           <p>
- *                                              Status of the appointment:<br>
- *                                              <ul>
- *                                              <li>calendars.STATUS_TENTATIVE</li>
- *                                              <li>calendars.STATUS_CONFIRMED</li>
- *                                              <li>calendars.STATUS_CANCELLED</li>
- *                                              </ul>
- * @param {Array{[]} pComps4Refresh (optional)  <p>
- *                                              The component which will be updated.<br>
- * @param {Array{[]} pWorklistId (optional)     <p>
- *                                              The worklist id.<br>
- * 
- * @return {void}
- */
-CalendarUtil.newEvent = function( pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh, pWorklistId)
-{
-    var event = CalendarUtil.createEntry( calendars.VEVENT, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus );
-
-    var prompts = [];
-    prompts["comp4refresh"] = [];
-    if (pComps4Refresh == undefined)
-        pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Termine"];
-    for (let i = 0; i < pComps4Refresh.length; i++)
-    {
-        if ( vars.exists(pComps4Refresh[i]))    prompts["comp4refresh"].push(pComps4Refresh[i]);
-    }
-
-    if(vars.getString("$sys.scope") == "vaadin")
-        neon.openCalendarEntry([event],"", neon.OPERATINGSTATE_NEW, null)
-    else
-    {
-        prompts["window"] = vars.getString("$sys.currentwindow");
-        prompts["image"] = vars.getString("$sys.currentimage");
-        if (pWorklistId != undefined)
-            prompts["worklistId"]   = pWorklistId;
-        swing.openCalendarEntry([event], null, false, prompts);
-    }
-}
-
-
-/*
- * Creates an new appointment entry.
- *
- * @param {String} pSummary (optional)              <p>
- *                                                  The summary/title of the appointment.
- * @param {String} pDescription (optional)          <p>
- *                                                  The appointment description.
- * @param {String} pLinks (optional)                <p>
- *                                                  The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array.
- * @param {String} pOwner (optional)                <p>
- *                                                  The calendar-user (username) which will be specified as entry-owner.
- * @param {String[]} pAffectedUsers (optional)      <p>
- *                                                  The affected users (username).
- * @param {Date} pStart (optional)                  <p>
- *                                                  The start of the appointment.
- * @param {Date} pEnd (optional)                    <p>
- *                                                  The end of the appointment.
- * @param {String[]} pCategories (optional)         <p>
- *                                                  The categories of the appointment, the default ones are:<br>
- *                                                  <ul>
- *                                                  <li>Meeting</li>
- *                                                  <li>Organisation</li>
- *                                                  <li>OutOfOffice</li>
- *                                                  <li>Vacation</li>
- *                                                  </ul>
- * @param {String} pStatus (optional)               <p>
- *                                                  Status of the appointment:<br>
- *                                                  <ul>
- *                                                  <li>calendars.STATUS_TENTATIVE</li>
- *                                                  <li>calendars.STATUS_CONFIRMED</li>
- *                                                  <li>calendars.STATUS_CANCELLED</li>
- *                                                  </ul>
- * @param {Date} pReminder (optional)               <p>
- *                                                  Date of the reminder for the appointment.
- * @param {String[]} pExternalAttendees (optional)  <p>
- *                                                  External attendees.
- * @param {String} pLocation (optional)             <p>
- *                                                  The location of the appointment.
- * @param {Boolean} pIsAllDay (optional)            <p>
- *                                                  Whether if it is an all-day appointment or not.
- * @param {String} pClassification (optional)       <p>
- *                                                  The classification of the appointment:<br>
- *                                                  <ul>
- *                                                  <li>calendars.CLASSIFICATION_PUBLIC</li>
- *                                                  <li>calendars.CLASSIFICATION_PRIVATE</li>
- *                                                  </ul>
- * @return {void}
- */
-CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, 
-                                            pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification)
-{   
-    var event = CalendarUtil.createEntry(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, pReminder, 
-                                                pExternalAttendees, pLocation, pIsAllDay, pClassification);
-    
-    var ids = calendars.insert([event], calendars.GROUP_SINGLE);
-    
-    if(pLinks)
-    {
-        var conf;
-        
-        pLinks.forEach(function(pLink){
-            conf = entities.createConfigForAddingRows().entity("AppointmentLink_entity").fieldValues({
-                "APPOINTMENT_ID" : ids[0],
-                "OBJECTID" : pLink["OBJECT_ID"],
-                "OBJECTTYPE" : pLink["OBJECT_TYPE"]
-            });
-            
-            entities.createRow(conf);
-        });
-    }
-}
-
-/*
- * Creates an new appointment object, which is responsible for holding the data<br>
- * till it's used to insert with: calendars.insert (e.g.: in Appointment_entity). 
- *
- * @param {String} pSummary (optional)              <p>
- *                                                  The summary/title of the appointment.
- * @param {String} pDescription (optional)          <p>
- *                                                  The description of the appointment.
- * @param {Object[]} pLinks (optional)              <p>
- *                                                  The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array.
- * @param {String} pOwner (optional)                <p>
- *                                                  The calendar-user (username) which will be specified as entry-owner.
- * @param {String[]} pAffectedUsers (optional)      <p>
- *                                                  The affected users (usernames), which will be added to the appointment.
- * @param {Date} pStart (optional)                  <p>
- *                                                  Start of the appointment.
- * @param {Date} pEnd (optional)                    <p>
- *                                                  Duration of the appointment.
- * @param {String[]} pCategories (optional)         <p>
- *                                                  The categories of the appointment, the default ones are:<br>
- *                                                  <ul>
- *                                                  <li>Meeting</li>
- *                                                  <li>Organisation</li>
- *                                                  <li>OutOfOffice</li>
- *                                                  <li>Vacation</li>
- *                                                  </ul>
- * @param {String} pStatus (optional)               Status of the appointment:<br>
- *                                                  <ul>
- *                                                  <li>calendars.STATUS_TENTATIVE</li>
- *                                                  <li>calendars.STATUS_CONFIRMED</li>
- *                                                  <li>calendars.STATUS_CANCELLED</li>
- *                                                  </ul>
- * @param {Date} pReminder (optional)               <p>
- *                                                  Date of reminder.
- * @param {String[]} pExternalAttendees (optional)  <p>
- *                                                  External attendes (e-mail addresses).
- * @param {String} pLocation (optional)             <p>
- *                                                  The locations of the appointment.
- * @param {Boolean} pIsAllDay (optional)            <p>
- *                                                  Whether if it is an all-day appointment or not.
- * @param {String} pClassification (optional)       <p>
- *                                                  The classification of the appointment:
- *                                                  <ul>
- *                                                  <li>calendars.CLASSIFICATION_PUBLIC</li>
- *                                                  <li>calendars.CLASSIFICATION_PRIVATE</li>
- *                                                  </ul>
- * @return {Object}                                 
- */
-CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, 
-                                        pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification)
-{
-    var entry = {};
-    
-    entry[calendars.TYPE] = calendars.VEVENT; // hardcoded, cause only other option would be calendars.VTODO for an task
-                                              // since tasks are handled via. Task_entity there is no need for the calendars.VTODO option.
-    
-    if (!pDescription)
-    {
-        if(vars.getString("$sys.scope") == "vaadin")
-        {
-            pDescription = neon.getImageContent(vars.getString("$sys.currententityname"));
-        }
-        else
-        {
-            pDescription = swing.getImageContent(); //todo: check whether it's necessary or not. #1047482
-        }
-    }
-    
-    if (!pOwner)
-    {
-        pOwner = vars.getString("$sys.user");
-    }
-    
-    if (!pStart) 
-    {
-        entry[calendars.DTSTART] = Date.now();
-    }
-    else
-    {
-        entry[calendars.DTSTART] = pStart.getTime();
-    }
-    
-    if (!pEnd) 
-    {
-        let tempStartdate = entry[calendars.DTSTART];
-        entry[calendars.DTEND] = tempStartdate + datetime.ONE_HOUR;
-    }
-    else
-    {
-        entry[calendars.DTEND] = pEnd.getTime().toString();
-    }
-    
-    if (!pCategories || pCategories == []) 
-    {
-        pCategories = "";
-    }
-    else 
-    {
-        for (i = 0; i < pCategories.length; i++)
-        {
-            pCategories[i] = translate.text(pCategories[i]);
-        }
-        
-        pCategories = text.encodeMS(pCategories);
-    }
-
-    if ((pAffectedUsers == null || pAffectedUsers == undefined) && (pExternalAttendees == null || pExternalAttendees == undefined))
-    {
-        entry[calendars.AFFECTEDUSERS] = "";
-    }
-    else
-    {
-        var affectedUsers = [];
-        affectedUsers.push(calendars.getCalendarUser(vars.get("$sys.user")));
-        
-        if(pAffectedUsers && pAffectedUsers != [])
-        {
-            affectedUsers = calendars.getCalendarUsers(pAffectedUsers);
-        }
-        
-        if(pExternalAttendees && pExternalAttendees != [])
-        {
-            for(let i = 0; i < pExternalAttendees.length; i++)
-            {
-                affectedUsers.push("; mailto:" + pExternalAttendees[i] + "; CN:" +  pExternalAttendees[i] + "; ")
-            }
-        }    
-        
-        entry[calendars.AFFECTEDUSERS] = text.encodeMS(affectedUsers);
-    }
-    
-    if (!pStatus)
-    {
-        pStatus = calendars.STATUS_CONFIRMED;
-    }
-    
-    if(pReminder)
-    {
-        entry[calendars.HASREMINDER] = "true";
-        entry[calendars.REMINDER_DURATION] = pReminder.getTime().toString();
-    }
-    else
-    {
-        entry[calendars.HASREMINDER] = "false";
-    }
-    
-    if(pLinks) 
-    {
-        entry["LINKS"] = pLinks;
-    }
-    
-    entry[calendars.USER] = calendars.getCalendarUser(pOwner);
-    entry[calendars.DESCRIPTION] = pDescription;
-    entry[calendars.SUMMARY] = pSummary || "";
-    entry[calendars.STATUS] = CalendarUtil.mapCalendarStatus(pStatus, calendars.getBackendType());
-    entry[calendars.CLASSIFICATION] = pClassification || calendars.CLASSIFICATION_PUBLIC;
-    entry[calendars.CATEGORIES] = pCategories;
-    entry[calendars.TRANSPARENCY] =  "OPAQUE";
-    entry[calendars.LOCATION] = pLocation || "";
-    entry["X-ADITO-ISALLDAYEVENT"] = pIsAllDay ? "TRUE" : "FALSE";
-    entry[calendars.DTSTART] = entry[calendars.DTSTART].toString();
-
-    return entry;
-}
-
-/*
- * Add an condition.<br>
- *
- * @param {[]} pConditions              <p>
- *                                      The condition.<br>
- * @param {Integer} pIndex              <p>
- *                                      Index of the condition.<br>
- * @param {Object} pValues              <p>
- *                                      The values.<br>
- * @return {void}
- */
-CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues)
-{
-    var params = ["TYPE", "START", "END", "USER", "STATUS", "UID"];
-
-    for (var i = 0; i < params.length; i++)
-        if (pValues[params[i]] != undefined)    pConditions[params[i] + "_" + pIndex] = pValues[params[i]];
-} 
-
-/*
- * Returns the date without the time.<br>
- *
- * @param {String} datetimeIn           <p>
- *                                      Datetime.<br>
- * @return {Date}                       <p>
- *                                      The desired date.<br>
- */
-CalendarUtil.getDate = function(datetimeIn)
-{
-    if ( datetimeIn != "")
-        return datetime.clearTime(datetimeIn);
-    else return "";
-}
-
-/*
- * Resets the event filter.<br>
- *
- * @return {Object}
- */
-CalendarUtil.reset_filterEvent = function()
-{
-    var today = CalendarUtil.getDate(vars.getString("$sys.date"));
-
-    return pFilter =  {
-        user: vars.getString("$sys.user"),
-        datefrom: String(today), //nur die Termine ab heute anzeigen,
-        //die von vor einer Woche sind uninteressant
-        dateto: String(eMath.addInt(eMath.addInt(today, datetime.ONE_WEEK)
-            ,datetime.ONE_DAY - datetime.ONE_MINUTE)),
-        category: "",
-        tentative: "true",
-        confirmed: "true",
-        cancelled: "",
-        free: "true"
-    };
-}
-
-/*
- * Gibt den richtigen Status zum Prüfen je nach Backend zurück
- * Returns the matching status, to the corresponding backend.
- *
- *
- * @param {String} pStatus req die konstante für den zu prüfenden status,
- *                             z.B. calendars.STATUS_INPROCESS
- *
- * @param {String} pCalendarType req die konstante für den typen des Termin- oder Aufgabenbackends,
- *                             z.B. calendars.BACKEND_DB
- *
- * @return {String} Konstanten für den Kalender (Backend-Typen), gibt es den status im backend nicht
- *                  wird null geliefert
- */
-CalendarUtil.mapCalendarStatus = function(pStatus, pCalendarType)
-{
-    switch (pCalendarType)
-    {
-        //case calendars.BACKEND_EXCHANGE:
-        case calendars.BACKEND_EXCHANGEWS:
-            if (pStatus == calendars.STATUS_CONFIRMED)
-                return calendars.STATUS_BUSY;
-            else
-                return pStatus;
-        default:
-            if (pStatus == calendars.STATUS_OOF)//nur bei exchange
-                return null;
-            else
-                return pStatus;
-    }
-}
-
-/**
- * Returns the "real" calendar system/backend type<br>
- * (e.g.: BackendType & SyncBackendType)
- *
- * @param {Number} pScope               <p>
- *                                      The needed scope:<br>
- *                                      <ul>
- *                                      <li>calendars.VEVENT</li>
- *                                      <li>calendars.VTODO</li>
- *                                      </ul>
- * @return {Number}                     <p>
- *                                      The backend type (e.g.: calendars.BACKEND_*).<br>
- */
-CalendarUtil.getCalendarSystemType = function(pScope)
-{
-    // Check sync backend type
-    if (calendars.getSyncBackendType() != calendars.BACKEND_NONE && calendars.getSyncBackendType() != 3)
-    {
-        var scope = calendars.getSyncBackendTypeScope();
-        if (scope.length == 1 && scope[0] == pScope) // Scope.length = 1 -> VEVENT *OR* VTODO
-            return calendars.getSyncBackendType();
-        else if (scope.length == 2) // Scope.length = 2 -> Both
-            return calendars.getSyncBackendType();
-       // Scope.length = 0 -> Nothing selected -> Skip this block
-    }
-
-    // Fallback to backend type (event)
-    if (calendars.getBackendType() != calendars.BACKEND_NONE && pScope === calendars.VEVENT)
-        return calendars.getBackendType();
-
-    // Second fallback to backend type (todo)
-    if (calendars.getBackendTypeTasks() != calendars.BACKEND_NONE && pScope === calendars.VTODO)
-        return calendars.getBackendTypeTasks();
-
-    // Everything is none
-    return calendars.BACKEND_NONE;
-}
-
-CalendarUtil.buildEntriesFromUids = function(appointmentUids) 
-{
-    var entryArray = new Array(appointmentUids.length);
-    
-    for(var i = 0; i < appointmentUids.length; i++)
-    {
-        var hasPermission = true;
-        
-        if(vars.get("$param.ErrorOnPermissionDenied") == "false" || vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
-            hasPermission = hasUserPermissionForReadingEntry(getEntryOwnerCn(appointmentUids[i]));
-       
-        if(hasPermission)
-            entryArray[i] = CalendarUtil.buildEntry(calendars.getEntry(appointmentUids[i], null, null), null);
-    }
-    
-    //filter out all null
-    var filteredEntryArray = entryArray.filter(function (el) {
-        return el != null;
-    });
-    
-    return filteredEntryArray;
-}
-
-
-CalendarUtil.countEntriesFromUids = function(appointmentUids) 
-{
-    return CalendarUtil.buildEntriesFromUids(appointmentUids).length;
-}
-
-CalendarUtil.buildEntry = function (pEntry, pMasterentry)
-{
-    var uid = pEntry[calendars.ID];    
-    var summary = pEntry[calendars.SUMMARY];
-    var attendees = pEntry[calendars.AFFECTEDUSERS];
-    var startdate = pEntry[calendars.DTSTART];
-    var enddate = pEntry[calendars.DTEND];
-    var links = pEntry[calendars.LINKS];
-    var description = pEntry[calendars.DESCRIPTION];
-    if(pEntry[calendars.ORGANIZER2] != undefined)
-        var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"];
-    if(pEntry[calendars.USER2] != undefined)
-        var owner = JSON.stringify(pEntry[calendars.USER2]);
-    var status = pEntry[calendars.STATUS];
-    var location = pEntry[calendars.LOCATION];
-    var reminder = pEntry[calendars.REMINDER_DURATION];
-    var remindercheck = pEntry[calendars.HASREMINDER]
-    var classification = pEntry[calendars.CLASSIFICATION];
-    var transparency = pEntry[calendars.TRANSPARENCY];
-    var categories = pEntry[calendars.CATEGORIES];
-    var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE";
-    
-    var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null
-    var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null
-    
-    // Recurrence
-    var recurrenceID = pEntry[calendars.RECURRENCEID];
-    var rrule = null;
-    if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master
-        rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null;
-    } else {
-        rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null;
-    }
-    
-    return [
-            uid, 
-            attendees.length, 
-            startdate, 
-            enddate, 
-            summary, 
-            organizer,
-            owner,
-            attendees, 
-            status,  
-            description, 
-            location, 
-            '', 
-            isAllDay,
-            classification,
-            transparency, 
-            categories, 
-            reminder, 
-            remindercheck, 
-            rrule, 
-            recurrenceID, 
-            null, 
-            masterBegin, 
-            masterEnd,
-            null
-        ];
-}
-
-
-function hasUserPermissionForReadingEntry(calUserCn)
-{
-    return calendars.hasPermission(calUserCn, calendars.VEVENT, "READ");
-}
-
-function getEntryOwnerCn(appointmentUid)
-{
-    
-    var owner = newSelect("ASYS_CALENDARBACKEND.OWNER", "_____SYSTEMALIAS")
-        .from("ASYS_CALENDARBACKEND")
-        .whereIfSet("ASYS_CALENDARBACKEND.ELEMENTUID", appointmentUid)
-        .cell(true);
-        
-    var ownerArr = text.decodeMS(owner);
-    return ownerArr[1].split(":")[1];
+import("system.translate");
+import("system.datetime");
+import("system.neon");
+import("system.calendars");
+import("system.vars");
+import("system.db");
+import("system.swing");
+import("system.eMath");
+import("system.logging");
+import("system.tools");
+import("system.text");
+import("system.question");
+import("system.SQLTYPES");
+import("system.result");
+import("system.util");
+import("system.entities");
+import("Util_lib");
+import("Sql_lib");
+
+
+/**
+ * Functions for the calendar.
+ * <p>
+ * <b><u>Do not create an instance of this!</u></b>
+ * @class
+ */
+function CalendarUtil(){}
+
+
+/*
+ * Creates and opens an new task object (with link).
+ *
+ * @param {String} pSummary (optional)              <p>
+ *                                                  The summary.<br>
+ * @param {String} pDescription (optional)          <p>
+ *                                                  The description.<br>
+ * @param {Boolean} pWithLink (optional)            Case if its true, then an a shortcut to $image.frametable will created.<br>
+ * @param {String[][]} pWithLink (optional)         <p>
+ *                                                  The required informations:<br>
+ *                                                  <ul>
+ *                                                  <li>pWithLink[0]: Name of the frame.</li>
+ *                                                  <li>pWithLink[1]: Id of the shown record.</li>
+ *                                                  <li>pWithLink[2]: Linking title.</li>
+ * @param {String} pUser (optional)                 <p>
+ *                                                  The user (login).<br>
+ * @param {[]} pAffectedUsers (optional)            <p>
+ *                                                  The affected users. (login)<br>
+ * @param {date} pStart (optional)                  <p>
+ *                                                  Start of the task.<br>
+ * @param {date} pDuration (optional)               <p>
+ *                                                  Duration of the task.<br>
+ * @param {integer} pCategory (optional)            <p>
+ *                                                  calendars.CATEGORIES , encoded(String) (e.g.: text.encodeMS(["Service"]))
+ * @param {String} pStatus (optional)               <p>
+ *                                                  Status of the appointment. (calendars.STATUS_TENTATIVE, <br>
+ *                                                  calendars.STATUS_CONFIRMED, calendars.STATUS_CANCELLED)<br>
+ * @param {Array{[]} pComps4Refresh (optional)      <p>
+ *                                                  The component which will be updated.<br>
+ *
+ * @return {void}
+ */
+CalendarUtil.newTodo = function(pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh)
+{
+    var todo = CalendarUtil.createEntry( calendars.VTODO, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus );
+    var prompts = [];
+    prompts["comp4refresh"] = [];
+
+    if (pComps4Refresh == undefined)
+        pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Aufgabe"];
+
+    for (var i = 0; i < pComps4Refresh.length; i++)
+    {
+        if ( vars.exists(pComps4Refresh[i]))    prompts["comp4refresh"].push(pComps4Refresh[i]);
+    }
+    if(vars.getString("$sys.scope") == "vaadin")
+        neon.openCalendarEntry([todo], null, neon.OPERATINGSTATE_NEW, null)
+    else
+    {
+        if (vars.exists("$sys.currentwindow"))
+            prompts["window"] = vars.getString("$sys.currentwindow");
+        if (vars.exists("$sys.currentimage"))
+            prompts["image"] = vars.getString("$sys.currentimage");
+
+        swing.openCalendarEntry([todo], null, false, prompts);
+    }
+}
+
+
+/**
+ * Finds the effective calendarId of an user in the same <br>
+ * attribute order like the ADITO core, which is:<br>
+ * <p>
+ * exchangeEmail -> calendarID -> email<br>
+ * <p>
+ * <b><u>DO NOT CHANGE THIS ORDER!</u></b>
+ *
+ * @param {String} pUser            <p>
+ *                                  To check.
+ * @return                          <p>
+ *                                  Effective calendar id.<br>
+ */
+CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser)
+{
+    var userParams = pUser["params"];
+    
+    var resolvedCurrentUser;
+    var exchangeEmail = userParams["exchangeEMail"];
+    var calendarId = userParams["calendarID"];
+    var email = userParams["email"];
+    
+    if(exchangeEmail)
+        return exchangeEmail;
+    else if(calendarId)
+        return calendarId;
+    else if(email)
+        return email;
+    else
+        return "";
+}
+
+
+/*
+ * Creates and opens an new appointment object (with link).
+ *
+ * @param {String} pSummary (optional)          <p>
+ *                                              The summary.<br>
+ * @param {String} pDescription (optional)      <p>
+ *                                              The description.<br>
+ * @param {Boolean} pWithLink (optional)        <p>
+ *                                              True sets an link to $image.frametable<br>
+ * @param {String[][]} pWithLink (optional)     Description:<br>
+ *                                              <ul>
+ *                                              <li>pWithLink[0]: Name of the frame</li>
+ *                                              <li>pWithLink[1]: Id of the shown record</li>
+ *                                              <li>pWithLink[2]: linking title</li>
+ *                                              </ul>
+ * @param {String} pUser (optional)             <p>
+ *                                              The user (login).
+ * @param {[]} pAffectedUsers (optional)        <p>
+ *                                              The affected users (login).
+ * @param {Date} pStart (optional)              <p>
+ *                                              Begin of the task.<br>
+ * @param {Date} pDuration (optional)           <p>
+ *                                              Duration.<br>
+ * @param {Number} pCategory (optional)         <p>
+ *                                              calendars.CATEGORIES , encoded(String) (z.B.: text.encodeMS(["Service"])).<br>
+ * @param {String} pStatus (optional)           <p>
+ *                                              Status of the appointment:<br>
+ *                                              <ul>
+ *                                              <li>calendars.STATUS_TENTATIVE</li>
+ *                                              <li>calendars.STATUS_CONFIRMED</li>
+ *                                              <li>calendars.STATUS_CANCELLED</li>
+ *                                              </ul>
+ * @param {Array{[]} pComps4Refresh (optional)  <p>
+ *                                              The component which will be updated.<br>
+ * @param {Array{[]} pWorklistId (optional)     <p>
+ *                                              The worklist id.<br>
+ * 
+ * @return {void}
+ */
+CalendarUtil.newEvent = function( pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh, pWorklistId)
+{
+    var event = CalendarUtil.createEntry( calendars.VEVENT, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus );
+
+    var prompts = [];
+    prompts["comp4refresh"] = [];
+    if (pComps4Refresh == undefined)
+        pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Termine"];
+    for (let i = 0; i < pComps4Refresh.length; i++)
+    {
+        if ( vars.exists(pComps4Refresh[i]))    prompts["comp4refresh"].push(pComps4Refresh[i]);
+    }
+
+    if(vars.getString("$sys.scope") == "vaadin")
+        neon.openCalendarEntry([event],"", neon.OPERATINGSTATE_NEW, null)
+    else
+    {
+        prompts["window"] = vars.getString("$sys.currentwindow");
+        prompts["image"] = vars.getString("$sys.currentimage");
+        if (pWorklistId != undefined)
+            prompts["worklistId"]   = pWorklistId;
+        swing.openCalendarEntry([event], null, false, prompts);
+    }
+}
+
+
+/*
+ * Creates an new appointment entry.
+ *
+ * @param {String} pSummary (optional)              <p>
+ *                                                  The summary/title of the appointment.
+ * @param {String} pDescription (optional)          <p>
+ *                                                  The appointment description.
+ * @param {String} pLinks (optional)                <p>
+ *                                                  The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array.
+ * @param {String} pOwner (optional)                <p>
+ *                                                  The calendar-user (username) which will be specified as entry-owner.
+ * @param {String[]} pAffectedUsers (optional)      <p>
+ *                                                  The affected users (username).
+ * @param {Date} pStart (optional)                  <p>
+ *                                                  The start of the appointment.
+ * @param {Date} pEnd (optional)                    <p>
+ *                                                  The end of the appointment.
+ * @param {String[]} pCategories (optional)         <p>
+ *                                                  The categories of the appointment, the default ones are:<br>
+ *                                                  <ul>
+ *                                                  <li>Meeting</li>
+ *                                                  <li>Organisation</li>
+ *                                                  <li>OutOfOffice</li>
+ *                                                  <li>Vacation</li>
+ *                                                  </ul>
+ * @param {String} pStatus (optional)               <p>
+ *                                                  Status of the appointment:<br>
+ *                                                  <ul>
+ *                                                  <li>calendars.STATUS_TENTATIVE</li>
+ *                                                  <li>calendars.STATUS_CONFIRMED</li>
+ *                                                  <li>calendars.STATUS_CANCELLED</li>
+ *                                                  </ul>
+ * @param {Date} pReminder (optional)               <p>
+ *                                                  Date of the reminder for the appointment.
+ * @param {String[]} pExternalAttendees (optional)  <p>
+ *                                                  External attendees.
+ * @param {String} pLocation (optional)             <p>
+ *                                                  The location of the appointment.
+ * @param {Boolean} pIsAllDay (optional)            <p>
+ *                                                  Whether if it is an all-day appointment or not.
+ * @param {String} pClassification (optional)       <p>
+ *                                                  The classification of the appointment:<br>
+ *                                                  <ul>
+ *                                                  <li>calendars.CLASSIFICATION_PUBLIC</li>
+ *                                                  <li>calendars.CLASSIFICATION_PRIVATE</li>
+ *                                                  </ul>
+ * @return {void}
+ */
+CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, 
+                                            pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification)
+{   
+    var event = CalendarUtil.createEntry(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, pReminder, 
+                                                pExternalAttendees, pLocation, pIsAllDay, pClassification);
+    
+    var ids = calendars.insert([event], calendars.GROUP_SINGLE);
+    
+    if(pLinks)
+    {
+        var conf;
+        
+        pLinks.forEach(function(pLink){
+            conf = entities.createConfigForAddingRows().entity("AppointmentLink_entity").fieldValues({
+                "APPOINTMENT_ID" : ids[0],
+                "OBJECTID" : pLink["OBJECT_ID"],
+                "OBJECTTYPE" : pLink["OBJECT_TYPE"]
+            });
+            
+            entities.createRow(conf);
+        });
+    }
+}
+
+/*
+ * Creates an new appointment object, which is responsible for holding the data<br>
+ * till it's used to insert with: calendars.insert (e.g.: in Appointment_entity). 
+ *
+ * @param {String} pSummary (optional)              <p>
+ *                                                  The summary/title of the appointment.
+ * @param {String} pDescription (optional)          <p>
+ *                                                  The description of the appointment.
+ * @param {Object[]} pLinks (optional)              <p>
+ *                                                  The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array.
+ * @param {String} pOwner (optional)                <p>
+ *                                                  The calendar-user (username) which will be specified as entry-owner.
+ * @param {String[]} pAffectedUsers (optional)      <p>
+ *                                                  The affected users (usernames), which will be added to the appointment.
+ * @param {Date} pStart (optional)                  <p>
+ *                                                  Start of the appointment.
+ * @param {Date} pEnd (optional)                    <p>
+ *                                                  Duration of the appointment.
+ * @param {String[]} pCategories (optional)         <p>
+ *                                                  The categories of the appointment, the default ones are:<br>
+ *                                                  <ul>
+ *                                                  <li>Meeting</li>
+ *                                                  <li>Organisation</li>
+ *                                                  <li>OutOfOffice</li>
+ *                                                  <li>Vacation</li>
+ *                                                  </ul>
+ * @param {String} pStatus (optional)               Status of the appointment:<br>
+ *                                                  <ul>
+ *                                                  <li>calendars.STATUS_TENTATIVE</li>
+ *                                                  <li>calendars.STATUS_CONFIRMED</li>
+ *                                                  <li>calendars.STATUS_CANCELLED</li>
+ *                                                  </ul>
+ * @param {Date} pReminder (optional)               <p>
+ *                                                  Date of reminder.
+ * @param {String[]} pExternalAttendees (optional)  <p>
+ *                                                  External attendes (e-mail addresses).
+ * @param {String} pLocation (optional)             <p>
+ *                                                  The locations of the appointment.
+ * @param {Boolean} pIsAllDay (optional)            <p>
+ *                                                  Whether if it is an all-day appointment or not.
+ * @param {String} pClassification (optional)       <p>
+ *                                                  The classification of the appointment:
+ *                                                  <ul>
+ *                                                  <li>calendars.CLASSIFICATION_PUBLIC</li>
+ *                                                  <li>calendars.CLASSIFICATION_PRIVATE</li>
+ *                                                  </ul>
+ * @return {Object}                                 
+ */
+CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, 
+                                        pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification)
+{
+    var entry = {};
+    
+    entry[calendars.TYPE] = calendars.VEVENT; // hardcoded, cause only other option would be calendars.VTODO for an task
+                                              // since tasks are handled via. Task_entity there is no need for the calendars.VTODO option.
+    
+    if (!pDescription)
+    {
+        if(vars.getString("$sys.scope") == "vaadin")
+        {
+            pDescription = neon.getImageContent(vars.getString("$sys.currententityname"));
+        }
+        else
+        {
+            pDescription = swing.getImageContent(); //todo: check whether it's necessary or not. #1047482
+        }
+    }
+    
+    if (!pOwner)
+    {
+        pOwner = vars.getString("$sys.user");
+    }
+    
+    if (!pStart) 
+    {
+        entry[calendars.DTSTART] = Date.now();
+    }
+    else
+    {
+        entry[calendars.DTSTART] = pStart.getTime();
+    }
+    
+    if (!pEnd) 
+    {
+        let tempStartdate = entry[calendars.DTSTART];
+        entry[calendars.DTEND] = tempStartdate + datetime.ONE_HOUR;
+    }
+    else
+    {
+        entry[calendars.DTEND] = pEnd.getTime().toString();
+    }
+    
+    if (!pCategories || pCategories == []) 
+    {
+        pCategories = "";
+    }
+    else 
+    {
+        for (i = 0; i < pCategories.length; i++)
+        {
+            pCategories[i] = translate.text(pCategories[i]);
+        }
+        
+        pCategories = text.encodeMS(pCategories);
+    }
+
+    if ((pAffectedUsers == null || pAffectedUsers == undefined) && (pExternalAttendees == null || pExternalAttendees == undefined))
+    {
+        entry[calendars.AFFECTEDUSERS] = "";
+    }
+    else
+    {
+        var affectedUsers = [];
+        affectedUsers.push(calendars.getCalendarUser(vars.get("$sys.user")));
+        
+        if(pAffectedUsers && pAffectedUsers != [])
+        {
+            affectedUsers = calendars.getCalendarUsers(pAffectedUsers);
+        }
+        
+        if(pExternalAttendees && pExternalAttendees != [])
+        {
+            for(let i = 0; i < pExternalAttendees.length; i++)
+            {
+                affectedUsers.push("; mailto:" + pExternalAttendees[i] + "; CN:" +  pExternalAttendees[i] + "; ")
+            }
+        }    
+        
+        entry[calendars.AFFECTEDUSERS] = text.encodeMS(affectedUsers);
+    }
+    
+    if (!pStatus)
+    {
+        pStatus = calendars.STATUS_CONFIRMED;
+    }
+    
+    if(pReminder)
+    {
+        entry[calendars.HASREMINDER] = "true";
+        entry[calendars.REMINDER_DURATION] = pReminder.getTime().toString();
+    }
+    else
+    {
+        entry[calendars.HASREMINDER] = "false";
+    }
+    
+    if(pLinks) 
+    {
+        entry["LINKS"] = pLinks;
+    }
+    
+    entry[calendars.USER] = calendars.getCalendarUser(pOwner);
+    entry[calendars.DESCRIPTION] = pDescription;
+    entry[calendars.SUMMARY] = pSummary || "";
+    entry[calendars.STATUS] = CalendarUtil.mapCalendarStatus(pStatus, calendars.getBackendType());
+    entry[calendars.CLASSIFICATION] = pClassification || calendars.CLASSIFICATION_PUBLIC;
+    entry[calendars.CATEGORIES] = pCategories;
+    entry[calendars.TRANSPARENCY] =  "OPAQUE";
+    entry[calendars.LOCATION] = pLocation || "";
+    entry["X-ADITO-ISALLDAYEVENT"] = pIsAllDay ? "TRUE" : "FALSE";
+    entry[calendars.DTSTART] = entry[calendars.DTSTART].toString();
+
+    return entry;
+}
+
+/*
+ * Add an condition.<br>
+ *
+ * @param {[]} pConditions              <p>
+ *                                      The condition.<br>
+ * @param {Integer} pIndex              <p>
+ *                                      Index of the condition.<br>
+ * @param {Object} pValues              <p>
+ *                                      The values.<br>
+ * @return {void}
+ */
+CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues)
+{
+    var params = ["TYPE", "START", "END", "USER", "STATUS", "UID"];
+
+    for (var i = 0; i < params.length; i++)
+        if (pValues[params[i]] != undefined)    pConditions[params[i] + "_" + pIndex] = pValues[params[i]];
+} 
+
+/*
+ * Returns the date without the time.<br>
+ *
+ * @param {String} datetimeIn           <p>
+ *                                      Datetime.<br>
+ * @return {Date}                       <p>
+ *                                      The desired date.<br>
+ */
+CalendarUtil.getDate = function(datetimeIn)
+{
+    if ( datetimeIn != "")
+        return datetime.clearTime(datetimeIn);
+    else return "";
+}
+
+/*
+ * Resets the event filter.<br>
+ *
+ * @return {Object}
+ */
+CalendarUtil.reset_filterEvent = function()
+{
+    var today = CalendarUtil.getDate(vars.getString("$sys.date"));
+
+    return pFilter =  {
+        user: vars.getString("$sys.user"),
+        datefrom: String(today), //nur die Termine ab heute anzeigen,
+        //die von vor einer Woche sind uninteressant
+        dateto: String(eMath.addInt(eMath.addInt(today, datetime.ONE_WEEK)
+            ,datetime.ONE_DAY - datetime.ONE_MINUTE)),
+        category: "",
+        tentative: "true",
+        confirmed: "true",
+        cancelled: "",
+        free: "true"
+    };
+}
+
+/*
+ * Gibt den richtigen Status zum Prüfen je nach Backend zurück
+ * Returns the matching status, to the corresponding backend.
+ *
+ *
+ * @param {String} pStatus req die konstante für den zu prüfenden status,
+ *                             z.B. calendars.STATUS_INPROCESS
+ *
+ * @param {String} pCalendarType req die konstante für den typen des Termin- oder Aufgabenbackends,
+ *                             z.B. calendars.BACKEND_DB
+ *
+ * @return {String} Konstanten für den Kalender (Backend-Typen), gibt es den status im backend nicht
+ *                  wird null geliefert
+ */
+CalendarUtil.mapCalendarStatus = function(pStatus, pCalendarType)
+{
+    switch (pCalendarType)
+    {
+        //case calendars.BACKEND_EXCHANGE:
+        case calendars.BACKEND_EXCHANGEWS:
+            if (pStatus == calendars.STATUS_CONFIRMED)
+                return calendars.STATUS_BUSY;
+            else
+                return pStatus;
+        default:
+            if (pStatus == calendars.STATUS_OOF)//nur bei exchange
+                return null;
+            else
+                return pStatus;
+    }
+}
+
+/**
+ * Returns the "real" calendar system/backend type<br>
+ * (e.g.: BackendType & SyncBackendType)
+ *
+ * @param {Number} pScope               <p>
+ *                                      The needed scope:<br>
+ *                                      <ul>
+ *                                      <li>calendars.VEVENT</li>
+ *                                      <li>calendars.VTODO</li>
+ *                                      </ul>
+ * @return {Number}                     <p>
+ *                                      The backend type (e.g.: calendars.BACKEND_*).<br>
+ */
+CalendarUtil.getCalendarSystemType = function(pScope)
+{
+    // Check sync backend type
+    if (calendars.getSyncBackendType() != calendars.BACKEND_NONE && calendars.getSyncBackendType() != 3)
+    {
+        var scope = calendars.getSyncBackendTypeScope();
+        if (scope.length == 1 && scope[0] == pScope) // Scope.length = 1 -> VEVENT *OR* VTODO
+            return calendars.getSyncBackendType();
+        else if (scope.length == 2) // Scope.length = 2 -> Both
+            return calendars.getSyncBackendType();
+       // Scope.length = 0 -> Nothing selected -> Skip this block
+    }
+
+    // Fallback to backend type (event)
+    if (calendars.getBackendType() != calendars.BACKEND_NONE && pScope === calendars.VEVENT)
+        return calendars.getBackendType();
+
+    // Second fallback to backend type (todo)
+    if (calendars.getBackendTypeTasks() != calendars.BACKEND_NONE && pScope === calendars.VTODO)
+        return calendars.getBackendTypeTasks();
+
+    // Everything is none
+    return calendars.BACKEND_NONE;
+}
+
+CalendarUtil.buildEntriesFromUids = function(appointmentUids) 
+{
+    var entryArray = new Array(appointmentUids.length);
+    
+    for(var i = 0; i < appointmentUids.length; i++)
+    {
+        var hasPermission = true;
+        
+        if(vars.get("$param.ErrorOnPermissionDenied") == "false" || vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
+            hasPermission = hasUserPermissionForReadingEntry(getEntryOwnerCn(appointmentUids[i]));
+       
+        if(hasPermission)
+            entryArray[i] = CalendarUtil.buildEntry(calendars.getEntry(appointmentUids[i], null, null), null);
+    }
+    
+    //filter out all null
+    var filteredEntryArray = entryArray.filter(function (el) {
+        return el != null;
+    });
+    
+    return filteredEntryArray;
+}
+
+
+CalendarUtil.countEntriesFromUids = function(appointmentUids) 
+{
+    return CalendarUtil.buildEntriesFromUids(appointmentUids).length;
+}
+
+CalendarUtil.buildEntry = function (pEntry, pMasterentry)
+{
+    var uid = pEntry[calendars.ID];    
+    var summary = pEntry[calendars.SUMMARY];
+    var attendees = pEntry[calendars.AFFECTEDUSERS];
+    var startdate = pEntry[calendars.DTSTART];
+    var enddate = pEntry[calendars.DTEND];
+    var links = pEntry[calendars.LINKS];
+    var description = pEntry[calendars.DESCRIPTION];
+    if(pEntry[calendars.ORGANIZER2] != undefined)
+        var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"];
+    if(pEntry[calendars.USER2] != undefined)
+        var owner = JSON.stringify(pEntry[calendars.USER2]);
+    var status = pEntry[calendars.STATUS];
+    var location = pEntry[calendars.LOCATION];
+    var reminder = pEntry[calendars.REMINDER_DURATION];
+    var remindercheck = pEntry[calendars.HASREMINDER]
+    var classification = pEntry[calendars.CLASSIFICATION];
+    var transparency = pEntry[calendars.TRANSPARENCY];
+    var categories = pEntry[calendars.CATEGORIES];
+    var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE";
+    
+    var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null
+    var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null
+    
+    // Recurrence
+    var recurrenceID = pEntry[calendars.RECURRENCEID];
+    var rrule = null;
+    if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master
+        rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null;
+    } else {
+        rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null;
+    }
+    
+    return [
+            uid, 
+            attendees.length, 
+            startdate, 
+            enddate, 
+            summary, 
+            organizer,
+            owner,
+            attendees, 
+            status,  
+            description, 
+            location, 
+            '', 
+            isAllDay,
+            classification,
+            transparency, 
+            categories, 
+            reminder, 
+            remindercheck, 
+            rrule, 
+            recurrenceID, 
+            null, 
+            masterBegin, 
+            masterEnd,
+            null
+        ];
+}
+
+
+function hasUserPermissionForReadingEntry(calUserCn)
+{
+    return calendars.hasPermission(calUserCn, calendars.VEVENT, "READ");
+}
+
+function getEntryOwnerCn(appointmentUid)
+{
+    
+    var owner = newSelect("ASYS_CALENDARBACKEND.OWNER", "_____SYSTEMALIAS")
+        .from("ASYS_CALENDARBACKEND")
+        .whereIfSet("ASYS_CALENDARBACKEND.ELEMENTUID", appointmentUid)
+        .cell(true);
+        
+    var ownerArr = text.decodeMS(owner);
+    return ownerArr[1].split(":")[1];
 }
\ No newline at end of file
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index 7606f5621de2acaf083d346df68143384f7d297b..f488f0ee653f84eb47ab793219f9965bfd6d6a04 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -512,6 +512,27 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic
                 .arrayColumn();
 }
 
+
+/**
+ * Returns the contact ids which aren't in the given campaignstep.<br>
+ * 
+ * @param {String} pCampaignStepId                      <p>
+ *                                                  The id of the campaignstep.<br>
+ * @param {String[]} pParticipantRowIds             <p>
+ *                                                  The participant ids (campaignparticipantids).<br>
+ * @return {String[]}                               <p>
+ *                                                  The contact ids which arent in the<br>
+ *                                                  given campaignstep.<br>                                                                                                  
+ */
+CampaignUtils.GetContactIdsNotInCampaignStepByRowIds = function(pCampaignStepId, pParticipantRowIds)
+{   
+    return newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+                .from("CAMPAIGNPARTICIPANT")
+                .where("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds, SqlBuilder.IN())
+                .and("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID",pCampaignStepId,SqlBuilder.NOT_EQUAL())
+                .arrayColumn();
+}
+
 /**
  * Returns the contact ids which arent in the campaign<br>
  * with the given campaign id.<br>
@@ -537,7 +558,7 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon
                     .from("CONTACT");
 
     if (origin == "Person")
-       query.leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID");
+       query.join("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID");
 
     query.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
         .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
@@ -556,6 +577,41 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon
     return query.arrayColumn();
 }
 
+/**
+ * Returns the contact ids which arent in a different campaignstep of the same campaign<br>
+ * with the given campaign id.<br>
+ * 
+ * @param {String} pCampaignStepId                      <p>
+ *                                                  The id of the campaignstep.<br>
+ * @param {String} pCampaignId                      <p>
+ *                                                  The id of the campaign.<br>
+ * @param {String} pCondition (optional)            <p>
+ *                                                  An condition which is used to limit the search contact results.<br>
+ * @return {String[]}                               <p>
+ *                                                  The contact ids that arent in the campaignstep.<br>                                                                                                                                                    
+ */
+CampaignUtils.GetContactIdsNotInCampaignStepByCondition = function(pCampaignStepId,pCampaignId, pCondition)
+{
+
+    var subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+        .from("CAMPAIGNPARTICIPANT")
+        .where("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", pCampaignStepId);
+    
+        var query = newSelect("CONTACT.CONTACTID")
+        .from("CONTACT")
+        .join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+        .join("CAMPAIGNPARTICIPANT","CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID")
+        .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
+        .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID",pCampaignId )
+        .and("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID",pCampaignStepId,SqlBuilder.NOT_EQUAL());
+            
+
+    if(pCondition != "")
+        query.and(pCondition);
+
+    return query.arrayColumn();
+}
+
 /**
  * Returns the contact ids which are in the campaign,<br>
  * with the given campaign id.<br>
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 3df661040ea43b3347bd1afb180f11d5f2bd0c04..2824ee403672033132486d51070529e44f28e9db 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -539,18 +539,17 @@ ContactUtils.getDefaultAddressId = function(pContactId)
  */
 ContactUtils.getCommRestrictionCondition = function (pMedium, pNoRestriction, pStartDate)
 {
-    if (!pStartDate && pStartDate !== 0)
-        pStartDate = datetime.date();
     var existsQuery = new SqlBuilder()
-        .select("COMMRESTRICTIONID")
-        .from("COMMRESTRICTION")
-        .whereIfSet("COMMRESTRICTION.MEDIUM", pMedium)
-        .and("COMMRESTRICTION.STARTDATE", pStartDate, SqlBuilder.LESS_OR_EQUAL())
+        .select("COMMUNICATIONSETTINGSID")
+        .from("COMMUNICATIONSETTINGS")
+        .where(newWhereIfSet("COMMUNICATIONSETTINGS.MEDIUM", pMedium)
+            .or("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$global()))
+        .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected())
         .and(newWhere()
             // check contactid
-            .or("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID")
+            .or("COMMUNICATIONSETTINGS.CONTACT_ID = CONTACT.CONTACTID")
             // or the contact id of the organisation
-            .or("COMMRESTRICTION.CONTACT_ID", newSelect("orgContact.CONTACTID")
+            .or("COMMUNICATIONSETTINGS.CONTACT_ID", newSelect("orgContact.CONTACTID")
                                                     .from("CONTACT anyContact")
                                                     .join("CONTACT orgContact", newWhere("anyContact.ORGANISATION_ID = orgContact.ORGANISATION_ID")
                                                                                     .and("orgContact.PERSON_ID is null")
@@ -588,7 +587,7 @@ ContactUtils.hasCommRestriction = function(pContactId, pMedium, pStartDate)
  */
 ContactUtils.getActiveCommRestrictionsSubselect = function()
 {
-    var mediumList = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMRESTRICTION.MEDIUM");
+    var mediumList = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM");
     var mask = new SqlMaskingUtils()
 
     var orgContactSubselect = newSelect("orgContact.CONTACTID")
@@ -601,11 +600,13 @@ ContactUtils.getActiveCommRestrictionsSubselect = function()
     var subselect = "''";
     if(group)
     {
-        var res = newSelect(group).from("COMMRESTRICTION")
-                    .where("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID")
+        var res = newSelect(group).from("COMMUNICATIONSETTINGS")
+                    .where("COMMUNICATIONSETTINGS.CONTACT_ID = CONTACT.CONTACTID")
+                    .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected())
 
-        var subres = newSelect(group).from("COMMRESTRICTION")
-                    .where("COMMRESTRICTION.CONTACT_ID in ( "+orgContactSubselect.toString()+")")
+        var subres = newSelect(group).from("COMMUNICATIONSETTINGS")
+                    .where("COMMUNICATIONSETTINGS.CONTACT_ID in ( "+orgContactSubselect.toString()+")")
+                    .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected())
                     
         subselect = mask.concatWithSeparator(["("+res.toString()+")", "("+subres.toString()+")"], ", ", false);
     }
diff --git a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod b/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod
similarity index 70%
rename from process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod
rename to process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod
index 11432054cc7356358ef25e9d7b657ca5973bba2f..0469b8849190b5290f93637119386f35f63cb99e 100644
--- a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod
+++ b/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
-  <name>RebuildAllDuplicateCaches_serverProcess</name>
+  <name>DSGVOAnonymize_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <process>%aditoprj%/process/RebuildAllDuplicateCaches_serverProcess/process.js</process>
+  <process>%aditoprj%/process/DSGVOAnonymize_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
   <variants>
     <element>EXECUTABLE</element>
   </variants>
diff --git a/process/DSGVOAnonymize_serverProcess/process.js b/process/DSGVOAnonymize_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..221517b85f56be78e1b67e270f4a1b8a75188f45
--- /dev/null
+++ b/process/DSGVOAnonymize_serverProcess/process.js
@@ -0,0 +1,219 @@
+import("system.SQLTYPES");
+import("system.logging");
+import("Sql_lib");
+import("system.datetime");
+import("system.db");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+
+/*
+Notice: The commented Code can be used for some Customers who don't want to delete all Activities of a Person. Only those who no longer have a Link.
+*/
+
+var contactIds = [[]];
+var personIds = [[]];
+var loghistoryTabelsContact = ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"];
+var loghistoryTabelsPerson = ["PERSON"];
+var loghistoryTabelsActivity = ["ACTIVITY", "AB_ATTRIBUTERELATION"];
+var today = datetime.date();
+var anonymizeString = "*****";
+var user = "System";
+var delayDays = parseInt(new KeywordAttribute($KeywordRegistry.dsgvoConfiguration(), "Delete Delay in Days", "7")
+    .getValue($KeywordRegistry.dsgvoConfiguration$config()));
+var statements = [];
+var statementsAudit = [];
+var statementsSys = [];
+var indexIdsArray = 0;
+var splitLength = 1000;
+
+var setFlagDate = today - datetime.ONE_DAY * delayDays;
+
+logging.log("start anonymization");
+
+let contacts = newSelect(["CONTACT.CONTACTID", "CONTACT.PERSON_ID"])
+.from("CONTACT")
+.join("DSGVODELETEFLAG","CONTACT.CONTACTID = DSGVODELETEFLAG.CONTACT_ID")
+.where("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete())
+.and("DSGVODELETEFLAG.DATE_NEW",setFlagDate,SqlBuilder.LESS_OR_EQUAL())
+.groupBy(["CONTACT.CONTACTID", "CONTACT.PERSON_ID"])
+.table(true,  db.DB_EOF, 600000);
+
+logging.log(contacts.length + " persons to anonymize");
+
+if (contacts.length > 0)
+{
+    contacts.forEach(function([pContactId, pPersonId]) 
+    {
+        if (contactIds[indexIdsArray].length == splitLength)
+        {
+            contactIds.push([]);
+            personIds.push([]);
+            indexIdsArray++;
+        }
+        contactIds[indexIdsArray].push(pContactId);
+        personIds[indexIdsArray].push(pPersonId);
+        
+        let collapsedActivityIds = [];
+        let activityIds = newSelect(["ACTIVITYLINK.ACTIVITY_ID"])
+        .from("ACTIVITYLINK")
+        .where("ACTIVITYLINK.OBJECT_ROWID", pContactId)
+        .and("ACTIVITYLINK.OBJECT_TYPE", "Person")
+        /*.and(
+            newSelect("count(*)")
+            .from("ACTIVITYLINK", "AL")
+            .where("AL.ACTIVITY_ID = ACTIVITYLINK.ACTIVITY_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)*/
+        .arrayColumn();
+        
+        do {
+            collapsedActivityIds.push(activityIds.splice(0, splitLength));
+        } while (activityIds.length > 0)
+        
+        collapsedActivityIds.forEach(function (pActivityIds)
+        {
+            if (pActivityIds.length > 0) 
+            {
+                // ------------------------------------------------------------------------------------------------------------------------
+                // DELETE: ACTIVITYLINK, ACTIVITY and all relations
+        
+                statements.push(newWhere("ACTIVITYLINK.ACTIVITY_ID", pActivityIds, SqlBuilder.IN()) 
+                    /*.or(newWhere("ACTIVITYLINK.OBJECT_ROWID", pContactId)
+                        .and("ACTIVITYLINK.OBJECT_TYPE", "Person"))*/
+                    .buildDeleteStatement(true, "ACTIVITYLINK"));
+        
+                statements.push(newWhere("ACTIVITY.ACTIVITYID", pActivityIds, SqlBuilder.IN())
+                    .buildDeleteStatement(true, "ACTIVITY"));
+        
+                statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias())
+                    .where("ASYS_BINARIES.ROW_ID", pActivityIds, SqlBuilder.IN(), null)
+                    .buildDeleteStatement(true, "ASYS_BINARIES"));
+        
+                statements.push(newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID", pActivityIds, SqlBuilder.IN())
+                    .buildDeleteStatement(true, "AB_ATTRIBUTERELATION"));
+                
+                statements.push(newWhere("AB_LOGHISTORY.TABLENAMEID", pActivityIds, SqlBuilder.IN())
+                    .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsActivity, SqlBuilder.IN())
+                    .buildDeleteStatement(true, "AB_LOGHISTORY"));
+            }
+        });
+        
+        let collapsedTaskIds = [];
+        let taskIds = newSelect(["TASKLINK.TASK_ID"])
+        .from("TASKLINK")
+        .where("TASKLINK.OBJECT_ROWID", pContactId)
+        .and("TASKLINK.OBJECT_TYPE", "Person")
+        /*.and(
+            newSelect("count(*)")
+            .from("TASKLINK", "TL")
+            .where("TL.TASK_ID = TASKLINK.TASK_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)*/
+        .arrayColumn();
+       
+        do {
+            collapsedTaskIds.push(taskIds.splice(0, splitLength));
+        } while (taskIds.length > 0)
+       
+        collapsedTaskIds.forEach(function (pTaskIds)
+        {
+            if (pTaskIds.length > 0)
+            {
+                // ------------------------------------------------------------------------------------------------------------------------
+                // DELETE: TASKLINK, TASK and all relations
+      
+                statements.push(newWhere("TASKLINK.TASK_ID", pTaskIds, SqlBuilder.IN())
+                    /*.or(newWhere("TASKLINK.OBJECT_ROWID", pContactId)
+                        .and("TASKLINK.OBJECT_TYPE", "Person"))*/
+                    .buildDeleteStatement(true, "TASKLINK"));
+       
+                statements.push(newWhere("TASK.TASKID", pTaskIds, SqlBuilder.IN())
+                    .buildDeleteStatement(true, "TASK"));
+       
+                statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias())
+                    .where("ASYS_BINARIES.ROW_ID", pTaskIds, SqlBuilder.IN(), null)
+                    .buildDeleteStatement(true, "ASYS_BINARIES"));
+               
+                statements.push(newWhere("AB_LOGHISTORY.TABLENAMEID", pTaskIds, SqlBuilder.IN())
+                    .and("AB_LOGHISTORY.TABLENAME", "TASK", SqlBuilder.EQUAL())
+                    .buildDeleteStatement(true, "AB_LOGHISTORY"));
+            }
+        });
+        
+        
+        // ------------------------------------------------------------------------------------------------------------------------
+        // Insert: AB_LOGHISTORY
+        
+        statements.push(new SqlBuilder()
+            .buildInsertStatement({
+                "USER_NEW" : user, 
+                "DATE_NEW" : today, 
+                "DESCRIPTION" : "Kontakt anonymisiert.", 
+                "LOGTYPE": "U" , 
+                "TABLENAME" : "DSGVO", 
+                "TABLENAMEID" : pContactId
+            }, "AB_LOGHISTORY", "AB_LOGHISTORYID"));
+    });
+    
+    for (let index = 0; index <= indexIdsArray; index++)
+    {
+        let tempContactIds = contactIds[index];
+        let tempPersonIds = personIds[index];
+        
+        // ------------------------------------------------------------------------------------------------------------------------
+        // Update: CONTACT, PERSON
+    
+        statementsAudit.push(newWhere("CONTACT.CONTACTID", tempContactIds, SqlBuilder.IN())
+            .buildUpdateStatement({
+                "USER_EDIT" : user, 
+                "DATE_EDIT" : today, 
+                "ADDRESS_ID" : null, 
+                "STATUS" : $KeywordRegistry.contactStatus$inactive()
+            }, "CONTACT"));
+        
+        statements.push(newWhere("PERSON.PERSONID", tempPersonIds, SqlBuilder.IN())
+            .buildUpdateStatement({
+                "USER_EDIT" : user, 
+                "DATE_EDIT" : today, 
+                "FIRSTNAME" : anonymizeString,
+                "LASTNAME": anonymizeString
+            }, "PERSON"));
+        
+        // ------------------------------------------------------------------------------------------------------------------------
+        // DELETE: ADDRESS, ASYS_BINARIES, COMMUNICATION, AB_ATTRIBUTERELATION, AB_LOGHISTORY, AB_OBJECTRELATION, AB_APPOINTMENTLINK
+        
+        statements.push(newWhere("ADDRESS.CONTACT_ID", tempContactIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "ADDRESS"));
+        
+        statements.push(newWhere("COMMUNICATION.CONTACT_ID", tempContactIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "COMMUNICATION"));
+    
+        statements.push(newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID", tempContactIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "AB_ATTRIBUTERELATION"));
+            
+        statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias())
+            .where("ASYS_BINARIES.ROW_ID", tempContactIds, SqlBuilder.IN(), null)
+            .buildDeleteStatement(true, "ASYS_BINARIES"));
+        
+        statements.push(newWhere("AB_OBJECTRELATION.OBJECT1_ROWID", tempContactIds, SqlBuilder.IN())
+            .or("AB_OBJECTRELATION.OBJECT2_ROWID", tempContactIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "AB_OBJECTRELATION"));
+            
+        statements.push(newWhere("AB_OBJECTRELATION.OBJECT1_ROWID", tempPersonIds, SqlBuilder.IN())
+            .or("AB_OBJECTRELATION.OBJECT2_ROWID", tempPersonIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "AB_OBJECTRELATION"));
+            
+        statements.push(newWhere("AB_APPOINTMENTLINK.OBJECT_ROWID", tempContactIds, SqlBuilder.IN())
+            .or("AB_APPOINTMENTLINK.OBJECT_ROWID", tempPersonIds, SqlBuilder.IN())
+            .buildDeleteStatement(true, "AB_APPOINTMENTLINK"));
+            
+        statements.push(newWhere(
+            newWhere("AB_LOGHISTORY.TABLENAMEID", tempContactIds, SqlBuilder.IN())
+            .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsContact, SqlBuilder.IN()))
+        .or(newWhere("AB_LOGHISTORY.TABLENAMEID", tempPersonIds, SqlBuilder.IN())
+            .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsPerson, SqlBuilder.IN()))
+        .buildDeleteStatement(true, "AB_LOGHISTORY"));
+    }
+    
+    db.execute(statements, "Data_alias_noAudit", 10000000);
+    db.execute(statementsAudit, "Data_alias", 10000000);
+    db.execute(statementsSys, SqlUtils.getBinariesAlias(), 10000000);
+}
+
+logging.log("end anonymization");
\ No newline at end of file
diff --git a/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod b/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..767a329542f6a14ad4248ae4623fb1cff2340d46
--- /dev/null
+++ b/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>DSGVOSetDeleteFlags_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/DSGVOSetDeleteFlags_serverProcess/process.js</process>
+  <restrictedRoles />
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/DSGVOSetDeleteFlags_serverProcess/process.js b/process/DSGVOSetDeleteFlags_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f21ca346a912979b2b49f04157ac62430c7e29b
--- /dev/null
+++ b/process/DSGVOSetDeleteFlags_serverProcess/process.js
@@ -0,0 +1,140 @@
+import("system.db");
+import("system.neon");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.util");
+import("system.entities");
+import("Sql_lib");
+import("system.tools");
+import("system.SQLTYPES");
+import("Util_lib");
+
+let selection = JSON.parse(vars.get("$local.tableSelection"));
+var statements = [];
+
+if (vars.get("$local.deleteFlags") == "true")
+{
+    let reasons = newSelect(["DSGVOCONFIGURATION.REASON"])
+    .from("DSGVOCONFIGURATION")
+    .whereIfSet("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", selection, SqlBuilder.IN())
+    .arrayColumn();
+    
+    newWhereIfSet("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete())
+        .and("CONTACT.CONTACTID", 
+            newSelect("DSGVODELETEFLAG.CONTACT_ID")
+            .from("DSGVODELETEFLAG")
+            .where("DSGVODELETEFLAG.REASON", $KeywordRegistry.dsgvoReason$manuel(), SqlBuilder.NOT_EQUAL())
+            .andIfSet("DSGVODELETEFLAG.REASON", reasons, SqlBuilder.IN()), 
+            SqlBuilder.IN())
+        .updateData(true, "CONTACT", ["STATUS"], null, [$KeywordRegistry.contactStatus$active()]);
+
+    newWhereIfSet("DSGVODELETEFLAG.REASON", $KeywordRegistry.dsgvoReason$manuel(), SqlBuilder.NOT_EQUAL())
+        .andIfSet("DSGVODELETEFLAG.REASON", reasons, SqlBuilder.IN())
+        .deleteData(true, "DSGVODELETEFLAG");
+}
+
+let contactIdsToMark = [[]];
+var contactIdsToMarkIndex = 0;
+
+let configIndexes = {
+    "FILTER" : 0,
+    "REASON" : 1
+}
+
+let configurations = newSelect(["DSGVOCONFIGURATION.FILTER", "DSGVOCONFIGURATION.REASON"])
+.from("DSGVOCONFIGURATION")
+.whereIfSet("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", selection, SqlBuilder.IN())
+.table();
+
+configurations.forEach(_getTheObjectsToTheFilter);
+
+contactIdsToMark.forEach(function (pContactIds) 
+{
+    if (!Utils.isNullOrEmpty(pContactIds))
+    {
+        statements.push(newWhereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN())
+        .buildUpdateStatement({
+            "STATUS" : $KeywordRegistry.contactStatus$markToDelete()
+        }, "CONTACT"));
+    }
+});
+
+
+db.execute(statements, "Data_alias", 10000000);
+
+function _getTheObjectsToTheFilter (pConfig) 
+{
+    let excludedContactId = new Set();
+    let filter = JSON.parse(pConfig[configIndexes.FILTER]);
+    
+    var config = entities.createConfigForLoadingRows()
+    .entity("Person_entity")
+    .ignorePermissions(true)
+    .filter(JSON.stringify(filter.filter))
+    .fields(["#UID"]);
+    
+    let contactsToMark = [[]]
+    let index = 0;
+    
+    entities.getRows(config).forEach(function(e)
+    {
+        if (contactsToMark[index].length == 1000)
+        {
+            contactsToMark.push([]);
+            index++;
+        }
+        contactsToMark[index].push(e["#UID"]);
+    });
+    
+    contactsToMark.forEach(function (pContactIds)
+    {
+        if (!Utils.isNullOrEmpty(pContactIds))
+        {
+            pContactIds = newSelect("CONTACT.CONTACTID")
+            .from("CONTACT")
+            .where(
+                newSelect("COUNT(*)")
+                .from("CONTACT", "C")
+                .where("C.PERSON_ID = CONTACT.PERSON_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)
+            .and(
+                newSelect("COUNT(*)")
+                .from("DSGVODELETEFLAG")
+                .where("DSGVODELETEFLAG.REASON", pConfig[configIndexes.REASON])
+                .and("DSGVODELETEFLAG.CONTACT_ID = CONTACT.CONTACTID"), 0, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)
+            .and("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN())
+            .arrayColumn();
+    
+            var users = tools.getUsersByAttribute(tools.CONTACTID, pContactIds, tools.PROFILE_DEFAULT);
+            users.forEach(function (user){
+                excludedContactId.add(user[tools.PARAMS][tools.CONTACTID])
+            }); 
+    
+            pContactIds.forEach(_insertDeleteFlags,{
+                "reason": pConfig[configIndexes.REASON], 
+                "excludedContactId": excludedContactId
+            });
+        }
+    });
+}
+
+function _insertDeleteFlags (pContactId)
+{
+    if (!this.excludedContactId.has(pContactId)) 
+    {
+        statements.push(new SqlBuilder().buildInsertStatement({
+            "DSGVODELETEFLAGID": util.getNewUUID(),
+            "REASON": this.reason, 
+            "CONTACT_ID" : pContactId, 
+            "USER_NEW": vars.get("$sys.user"), 
+            "DATE_NEW": vars.get("$sys.date")
+        }, "DSGVODELETEFLAG"));
+        
+        if (contactIdsToMark[contactIdsToMarkIndex].length == 1000)
+        {
+            contactIdsToMark.push([]);
+            contactIdsToMarkIndex++;
+        }
+        
+        contactIdsToMark[contactIdsToMarkIndex].push(pContactId);
+    }
+}
\ No newline at end of file
diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js
index 4eeff329bdde5132e17ae5e101d8aff4e52f7303..c7c004a2ce7c76c8cf6a21c65df3086058e5bd14 100644
--- a/process/DataPrivacy_lib/process.js
+++ b/process/DataPrivacy_lib/process.js
@@ -76,10 +76,11 @@ DataPrivacyType.get = function(pKey)
             TYPE_BIRTH: new DataPrivacyType("TYPE_BIRTH", _getBirthday, true),
             TYPE_ADDRESS: new DataPrivacyType("TYPE_ADDRESS", _getAddress),
             TYPE_COMM: new DataPrivacyType("TYPE_COMM", _getCommunication),
-            TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute)
-            // Picture also?
-            // Gender also?
-            // Orgs of the person also?
+            TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute),
+            TYPE_PRIVACY_NOTICE: new DataPrivacyType("TYPE_PRIVACY_NOTICE", _getDSGVODocument)
+        // Picture also?
+        // Gender also?
+        // Orgs of the person also?
         }
     
     if (pKey)
@@ -105,10 +106,10 @@ DataPrivacyType.get = function(pKey)
             pContactId = pContactIdSaved;
         
         var entityConfig = entities.createConfigForLoadingRows()
-                                   .entity("Person_entity")
-                                   .provider("Contact")
-                                   .uid(pContactId)
-                                   .fields(pFields);
+        .entity("Person_entity")
+        .provider("Contact")
+        .uid(pContactId)
+        .fields(pFields);
         return  entities.getRow(entityConfig);
     }
      
@@ -199,8 +200,8 @@ DataPrivacyType.get = function(pKey)
     {
         // TODO: update and fix Address_lib and use it (and remove format-functions in PostalAddress_lib)
         var entityConfig = entities.createConfigForLoadingRows()
-                                   .entity("Address_entity")
-                                   .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "PROVINCE"]);
+        .entity("Address_entity")
+        .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "PROVINCE"]);
 
         if (pAddressId)
         {
@@ -209,7 +210,7 @@ DataPrivacyType.get = function(pKey)
         else
         {
             entityConfig.provider("ContactAddresses")
-                        .addParameter("ContactId_param", pContactId);
+            .addParameter("ContactId_param", pContactId);
             
         }        
         
@@ -236,8 +237,8 @@ DataPrivacyType.get = function(pKey)
     function _getCommunication(pContactId, pCommunicationId) 
     {
         var entityConfig = entities.createConfigForLoadingRows()
-                                   .entity("Communication_entity")
-                                   .fields(["COMMUNICATIONID", "ADDR"]);
+        .entity("Communication_entity")
+        .fields(["COMMUNICATIONID", "ADDR"]);
 
         if (pCommunicationId)
         {
@@ -246,7 +247,7 @@ DataPrivacyType.get = function(pKey)
         else
         {
             entityConfig.provider("AllCommunications")
-                        .addParameter("ContactId_param", pContactId);
+            .addParameter("ContactId_param", pContactId);
         }
         
         return entities.getRows(entityConfig).map(function(pComm)
@@ -272,10 +273,10 @@ DataPrivacyType.get = function(pKey)
         if (pContactId)
         {
             var attributeQuery = new AttributeRelationQuery()
-                .objectRowId(pContactId)
-                .objectType("Person")
-                .includeDisplayValue()
-                .includeFullAttributeName();
+            .objectRowId(pContactId)
+            .objectType("Person")
+            .includeDisplayValue()
+            .includeFullAttributeName();
             
             if (pAttributeId)
                 attributeQuery.attributeId(pAttributeId);
@@ -289,8 +290,44 @@ DataPrivacyType.get = function(pKey)
                 value: pAttr.fullAttributeName + ": " + pAttr.displayValue,
                 id: pAttr.attributeId
             }
+        })
+        .filter(function (pAttr) 
+        {
+            return newSelect("COUNT(*)")
+            .from("AB_ATTRIBUTEUSAGE")
+            .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO")
+            .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", pAttr.id).cell() != "0"
         });
     }
+    
+    /**
+     * Callback function to get the
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pContactIdSaved=undefined] 
+     * 
+     * @return {Object[]}
+     */
+    function _getDSGVODocument(pContactId, pContactIdSaved) 
+    {        
+        // Todo Format or set content dsgvotypepAssignmentRowId
+        var count = db.getBinaryCount("CONTACT", "DOCUMENT", pContactIdSaved || pContactId, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE")
+        
+        if (count > 0)
+        {
+            return [{
+                value: translate.text("consent"),
+                id: pContactId
+            }];
+        }
+        else
+        {
+            return [{
+                value: translate.text("consent pending"),
+                id: pContactId
+            }];
+        }
+    }
 }
 
 /**
@@ -312,22 +349,22 @@ function DataPrivacyUtils() {}
 DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond)
 {
     return newSelect("DSGVOID," +               // 0
-                        "CONTACT_ID," +            // 1
-                        "DSGVOTYPE," +             // 2
-                        "ROW_ID," +                // 3
-                        "''," +                    // 4 - dummy for value
-                        "STATUORITYSOURCE," +      // 5
-                        "PURPOSE," +               // 6
-                        "VALID_TO," +              // 7
-                        "DATE_NEW," +              // 8
-                        "DATE_EDIT," +             // 9
-                        "USER_NEW," +              // 10
-                        "USER_EDIT, " +            // 11
-                        KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.dsgvoType(), "DSGVOTYPE")) // 12 - dsgvotype-displayvalue)
-                .from("DSGVO")
-                .where("DSGVO.CONTACT_ID", pContactId)
-                .andIfSet(pFilterCond)
-                .table();
+        "CONTACT_ID," +            // 1
+        "DSGVOTYPE," +             // 2
+        "ROW_ID," +                // 3
+        "''," +                    // 4 - dummy for value
+        "STATUORITYSOURCE," +      // 5
+        "PURPOSE," +               // 6
+        "VALID_TO," +              // 7
+        "DATE_NEW," +              // 8
+        "DATE_EDIT," +             // 9
+        "USER_NEW," +              // 10
+        "USER_EDIT, " +            // 11
+        KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.dsgvoType(), "DSGVOTYPE")) // 12 - dsgvotype-displayvalue)
+    .from("DSGVO")
+    .where("DSGVO.CONTACT_ID", pContactId)
+    .andIfSet(pFilterCond)
+    .table();
 }
 
 /**
@@ -390,9 +427,9 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond)
                 var newId = util.getNewUUID();
                 // insert
                 inserts.push(["DSGVO",
-                             ["DSGVOID", "USER_NEW", "DATE_NEW", "DSGVOTYPE", "ROW_ID", "CONTACT_ID"],
-                             null,
-                             [newId, currentUser, now, dsgvotype.key, pRow.id, pContactId]]);
+                    ["DSGVOID", "USER_NEW", "DATE_NEW", "DSGVOTYPE", "ROW_ID", "CONTACT_ID"],
+                    null,
+                    [newId, currentUser, now, dsgvotype.key, pRow.id, pContactId]]);
                          
                 // and also insert it in the return data to avoid selecting from DSGVO again
                 returnDSGVOData.push([
@@ -409,7 +446,7 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond)
                     currentUser,    // "USER_NEW," +              // 10
                     "",             // "USER_EDIT "               // 11
                     KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), dsgvotype.key), // 12
-                ])
+                    ])
             }
         });
     }
@@ -472,13 +509,13 @@ DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage
 DataPrivacyUtils.checkAllFilled = function(pContactId)
 {
     var countNotFilled = newSelect("count(*)")
-                            .from("DSGVO")
-                            .where("DSGVO.CONTACT_ID", pContactId)
-                            .and(newWhere()
-                                .or("STATUORITYSOURCE is null")
-                                .or("PURPOSE is null")
-                                .or("VALID_TO is null"))
-                            .cell();
+    .from("DSGVO")
+    .where("DSGVO.CONTACT_ID", pContactId)
+    .and(newWhere()
+        .or("STATUORITYSOURCE is null")
+        .or("PURPOSE is null")
+        .or("VALID_TO is null"))
+    .cell();
                             
     return countNotFilled == "0";       
 }
@@ -497,20 +534,20 @@ DataPrivacyUtils.dataForExport = function(pContactId, pLocale)
     
     var fields = ["DSGVOTYPE", "VALUE", "STATUORITYSOURCE", "PURPOSE", "VALID_TO"];
     var config = entities.createConfigForLoadingRows()
-            .entity(entity)
-            .provider("DSGVOEntries")
-            .addParameter("ContactId_param", pContactId)
-            .fields(fields)
+    .entity(entity)
+    .provider("DSGVOEntries")
+    .addParameter("ContactId_param", pContactId)
+    .fields(fields)
 
     return [fields, entities.getRows(config).map(function(pRow) {
         var dsgvotype = DataPrivacyType.get(pRow.DSGVOTYPE);
         
         var newRow = [
-            KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), pRow.DSGVOTYPE, pLocale),
-            (dsgvotype.formatAsDate ?  datetime.toDate(pRow.VALUE, translate.text("dd.MM.yyyy", pLocale), "UTC") : pRow.VALUE),
-            KeywordUtils.getViewValue($KeywordRegistry.dsgvoStatuoritysource(), pRow.STATUORITYSOURCE, pLocale),
-            KeywordUtils.getViewValue($KeywordRegistry.dsgvoPurpose(), pRow.PURPOSE, pLocale),
-            datetime.toDate(pRow.VALID_TO, translate.text("dd.MM.yyyy", pLocale), "UTC"),
+        KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), pRow.DSGVOTYPE, pLocale),
+        (dsgvotype.formatAsDate ?  datetime.toDate(pRow.VALUE, translate.text("dd.MM.yyyy", pLocale), "UTC") : pRow.VALUE),
+        KeywordUtils.getViewValue($KeywordRegistry.dsgvoStatuoritysource(), pRow.STATUORITYSOURCE, pLocale),
+        KeywordUtils.getViewValue($KeywordRegistry.dsgvoPurpose(), pRow.PURPOSE, pLocale),
+        datetime.toDate(pRow.VALID_TO, translate.text("dd.MM.yyyy", pLocale), "UTC"),
         ];
         
         return newRow;
@@ -533,7 +570,7 @@ DataPrivacyUtils.downloadCSV = function(pContactId, pLocale)
     
     var csvTable = text.toCSV(data, "\r\n", ";", '"');
     
-    neon.download(util.encodeBase64String(csvTable), "data_pricacy.csv");
+    neon.download(util.encodeBase64String(csvTable), "data_privacy.csv");
 }
 
 /**
@@ -587,9 +624,9 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL
     {
         // load recipient // TODO: evtl. put this load entity into lib and use it in all display value processes
         var recipientConfig = entities.createConfigForLoadingRows()
-            .entity("AnyContact_entity")
-            .uid(pDSGVOInfo.recipient)
-            .fields(["#CONTENTTITLE"])
+        .entity("AnyContact_entity")
+        .uid(pDSGVOInfo.recipient)
+        .fields(["#CONTENTTITLE"])
         
         pDSGVOInfo.recipient = entities.getRow(recipientConfig)["#CONTENTTITLE"];
         
@@ -600,7 +637,7 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL
             pDSGVOInfo.garantees = KeywordUtils.getViewValue($KeywordRegistry.dsgvoGuarantee(), pDSGVOInfo.garantees, pLocale),
             
             transmission += "\n" + translate.text("The transfer of data to recipients located in a third country is based on the following guarantees:", pLocale) 
-                          + "\n" + pDSGVOInfo.garantees;
+            + "\n" + pDSGVOInfo.garantees;
         }
     }
     
@@ -610,9 +647,9 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL
     {
         // load recipient // TODO: evtl. put this load entity into lib and use it in all display value processes
         var datasourceConfig = entities.createConfigForLoadingRows()
-            .entity("AnyContact_entity")
-            .uid(pDSGVOInfo.datasource)
-            .fields(["#CONTENTTITLE"])
+        .entity("AnyContact_entity")
+        .uid(pDSGVOInfo.datasource)
+        .fields(["#CONTENTTITLE"])
         
         pDSGVOInfo.datasource = entities.getRow(datasourceConfig)["#CONTENTTITLE"];
         
@@ -627,16 +664,16 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL
     {
         deadline = translate.withArguments("As stated in our letter of %0, we have made use of the possibility to extend the deadline to three months due to %1.",
             [datetime.toDate(pDSGVOInfo.deadlineDate, translate.text("dd.MM.yyyy", pLocale)),
-             (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$complex() ? translate.text("the high complexity of your application", pLocale) 
+            (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$complex() ? translate.text("the high complexity of your application", pLocale) 
                 :
-             (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$count() ? translate.text("the number of your applications", pLocale) : ""))
+                (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$count() ? translate.text("the number of your applications", pLocale) : ""))
             ], pLocale)
     }
     
     var saveTill = datetime.toDate(newSelect("max(VALID_TO)")
-                                        .from("DSGVO")
-                                        .where("DSGVO.CONTACT_ID", pContactId)
-                                        .cell());
+        .from("DSGVO")
+        .where("DSGVO.CONTACT_ID", pContactId)
+        .cell());
     
     saveTill = translate.text("We save your data until ", pLocale) + saveTill + ".";
     var addrObject = new AddrObject(pContactId);
@@ -648,8 +685,8 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL
     
     if (fakeDataProtectionOfficerAddr.indexOf("Err.") != -1)
     {
-                fakeDataProtectionOfficerAddr = 
-"Herr Max Mustermann\n\
+        fakeDataProtectionOfficerAddr = 
+        "Herr Max Mustermann\n\
 Musterstr. 3\n\
 12345 Musterstadt\n\
 Muster-Datenschutzberatung";
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index 5fef12bb28f9133080c716a9f542a528103792ec..2d2c94f233ccfac4d99840b457f803de64259134 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -555,7 +555,7 @@ DocumentTemplate.prototype.getReplacedEmailsByContactIds = function (pContactIds
     var emailObjects = {};
     var isEML = this.type == DocumentTemplate.types.EML;
     this.setOptions({base64 : isEML});
-    var emailContents = this.getReplacedContentByContactIds(pContactIds, pAdditionalPlaceholders);
+    var emailContents = this.getReplacedContentByContactIds(pContactIds, PlaceholderUtils.getLinkPlaceholders());
     
     for (let contactId in emailContents)
     {
diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js
index 6085c3f5eec1ff9f9c1954bfd29b490188c27751..ee264f730e597f0c4b8c305e11ad71a32d49e0f4 100644
--- a/process/Document_lib/process.js
+++ b/process/Document_lib/process.js
@@ -5,6 +5,7 @@ import("system.db");
 import("system.vars");
 import("system.neon");
 import("Sql_lib");
+import("MimeType_lib");
 
 /**
  * Provides static methods for managing documents.
@@ -43,6 +44,52 @@ DocumentUtil.downloadSelectedDocuments = function(pAssignmentName) {
     }
 }
 
+/**
+ * Utility function to open a selected document. 
+ * Selected document will be checked with $sys.selectionRows
+ * Document will be opened with neon.open
+ * @param {String} pAssignmentName (optional) the name of the assignment, used to modify the filename
+ * 
+ */
+DocumentUtil.openSelectedDocument = function(pAssignmentName) 
+{
+    var alias = SqlUtils.getBinariesAlias();
+
+    if(vars.exists("$sys.selectionRows") && vars.getString("$sys.selectionRows"))
+    {
+        var rows = vars.get("$sys.selectionRows");
+        var uids = vars.get("$sys.selection");
+        var binaryContents = db.getBinaryContents(uids, alias);     
+
+        if(binaryContents.length == 1) 
+        {
+            if(pAssignmentName == "ERRORLOG")
+                neon.openFile(binaryContents[0], rows[0]["NAME"] + ".txt", rows[0]["TYPE"], false);    
+            else 
+                neon.openFile(binaryContents[0], rows[0]["NAME"], rows[0]["TYPE"], false);    
+        }  
+    }
+}
+
+/**
+ * Checks if the mimetype can be opened.
+ */
+DocumentUtil.canOpenSelectedDocument = function() 
+{
+    if(vars.exists("$sys.selectionRows") && vars.getString("$sys.selectionRows"))
+    {
+        var rows = vars.get("$sys.selectionRows");
+        var uids = vars.get("$sys.selection");
+
+        if(uids.length == 1)
+        {
+            return MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"]);
+        }
+    }
+    
+    return false;
+}
+
 /**
  * Utility function to delete the current/opened Document.
  */
diff --git a/process/DuplicateMerge_lib/DuplicateMerge_lib.aod b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..bc0eb0235229e83f6e13f3215fd29f3dcb46bc1a
--- /dev/null
+++ b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>DuplicateMerge_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/DuplicateMerge_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/DuplicateMerge_lib/process.js b/process/DuplicateMerge_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b83ce3f225e20ebee0e6ca40ff7bc859dea99b3
--- /dev/null
+++ b/process/DuplicateMerge_lib/process.js
@@ -0,0 +1,368 @@
+import("Communication_lib");
+import("Sql_lib");
+import("system.db");
+import("ActivityTask_lib");
+import("KeywordRegistry_basic");
+import("system.translate");
+import("DuplicateScanner_lib");
+
+/**
+ * Methods for duplicate merging.
+ * Do not create an instance of this!
+ * 
+ * @class
+ */
+function DuplicateMergeUtils() {}
+
+/*
+ *
+ * Merges the source person into the target person. 
+ * This 
+ * - replaces the source's with the target's contactid in a predefined set of tables.
+ * - resets the standard communications of the source contact and keeps the ones of the target.
+ * - updates participants of campaigns and removes obsolet ones(which would be duplicates)
+ * - deletes the source person and contact
+ * - deletes the duplicate record, if one exists
+ * - deletes all unrelated-duplicate-relations containing the source contact id
+ *
+ *  @param {String} pSourceContactId The contact to be integrated into another
+ *  @param {String} pTargetContactId The contact in which the source gets integrated
+ *  @returns {Boolean} if the merge was sucessful
+ */
+DuplicateMergeUtils.mergePerson = function(pSourceContactId, pTargetContactId)
+{
+    var sourcePersonId = newSelect("PERSON_ID")
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pSourceContactId)
+        .cell();
+    var targetPersonId = newSelect("PERSON_ID")
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pTargetContactId)
+        .cell();
+        
+    DuplicateMergeUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId);
+    var isLinkedDataUpdated = DuplicateMergeUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId);
+    var isParticipantsUpdated = DuplicateMergeUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", 
+        pSourceContactId, pTargetContactId);
+    DuplicateMergeUtils._updateOtherContacts(pSourceContactId, sourcePersonId, targetPersonId);
+    
+    var deleteStatements = [];
+    if (sourcePersonId != targetPersonId)
+    {
+        deleteStatements.push(newWhere("PERSON.PERSONID", sourcePersonId).buildDeleteStatement());
+    }
+    
+    deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement());
+    deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
+    
+    //update binary 
+    var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias());
+    metaData.forEach(function (binaryMetaData) 
+    {
+        db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias());
+    });
+    var deletedRows = db.deletes(deleteStatements)
+
+    DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [pSourceContactId, pTargetContactId]);
+    var dupIds = DuplicateScannerUtils.getDuplicateIdsByEntityScanner("Person_entity", pTargetContactId);
+    if(dupIds.length > 0)
+    {
+        DuplicateScannerUtils.insertHasDuplicateEntry("Person_entity", pTargetContactId, dupIds.length);
+    }
+
+    return isLinkedDataUpdated || isParticipantsUpdated || deletedRows > 0;
+}
+
+DuplicateMergeUtils.mergeOrganisation = function(pSourceContactId, pTargetContactId)
+{
+    var sourceOrganisationId = newSelect("ORGANISATION_ID")
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pSourceContactId)
+        .cell();
+
+    var targetOrganisationId = newSelect("ORGANISATION_ID")
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pTargetContactId)
+        .cell();
+    
+    DuplicateMergeUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId);
+    DuplicateMergeUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId);
+    DuplicateMergeUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", 
+        pSourceContactId, pTargetContactId);
+    DuplicateMergeUtils._migratePersonsToNewOrganisation(sourceOrganisationId, targetOrganisationId);
+    
+    var deleteStatements = [];
+    deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement());
+    deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteOrganisationAndContactQuery(sourceOrganisationId, pSourceContactId));
+    deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
+    
+    //update binary 
+    var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias());
+    metaData.forEach(function (binaryMetaData) 
+    {
+        db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias());
+    });
+    var deletedRows = db.deletes(deleteStatements)
+
+    DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [pSourceContactId, pTargetContactId]);
+    var dupIds = DuplicateScannerUtils.getDuplicateIdsByEntityScanner("Organisation_entity", pTargetContactId);
+    if(dupIds.length > 0)
+    {
+        DuplicateScannerUtils.insertHasDuplicateEntry("Organisation_entity", pTargetContactId, dupIds.length);
+    }
+
+    return deletedRows >= 2;
+}
+
+DuplicateMergeUtils.createMergeSuccessActivity = function(pSourceContactId, pTargetContactId, pCurrentContactId, pContext)
+{
+    var activityDataForInsert = {
+        subject: translate.withArguments("A %0 record has been merged", [pContext]),
+        content: translate.withArguments("%0 with ID \"%1\" has been integrated into the %0 with the ID \"%2\"", [pContext, pSourceContactId, pTargetContactId]),
+        //categoryKeywordId: $KeywordRegistry.ac
+        directionKeywordId: $KeywordRegistry.activityDirection$internal(),
+        responsibleContactId: pCurrentContactId
+    };
+    var activityLinks = [[pContext, pTargetContactId]];
+
+    return ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias());
+}
+
+/*
+ * Persons get reassigned to new organisation
+ *
+ * @returns {Boolean} If records have been updated
+ */
+DuplicateMergeUtils._migratePersonsToNewOrganisation = function (pSourceOrganisationId, pTargetOrganisationId)
+{
+    var updateCount = newWhereIfSet(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId)
+                        .and("PERSON_ID is not null")
+                        .updateFields(new Map().set("ORGANISATION_ID", pTargetOrganisationId), "CONTACT");
+        
+    var deleteCount = newWhere(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId)
+                        .and("PERSON_ID is not null")
+                        .deleteData();
+    return updateCount > 0 || deleteCount > 0;
+}
+
+/*
+ * Person and organisations keep the max_count = 1 attribute of the target and the one from the source is deleted
+ *
+ * @returns {Boolean} If records have been deleted
+ */
+DuplicateMergeUtils._deleteUniqueAttributes = function (pSourceContactId, pTargetContactId)
+{
+    var targetAttrUnique = newSelect("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
+                                .from("AB_ATTRIBUTERELATION")
+                                .join("AB_ATTRIBUTEUSAGE on AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID")
+                                .where("AB_ATTRIBUTEUSAGE.MAX_COUNT = 1")
+                                .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pTargetContactId)
+                                .table();
+    var deleteCount = 0;
+    
+    targetAttrUnique.forEach(function(attribute){
+        deleteCount += newWhereIfSet("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", attribute)
+                        .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pSourceContactId)
+                        .deleteData();
+    });
+
+    return deleteCount > 0;
+}
+
+DuplicateMergeUtils._migrateLinkedContactData = function (pSourceContactId, pTargetContactId)
+{
+    var updateStatements = new Map();
+    var currentAlias = db.getCurrentAlias();
+    
+    var setStandardsStatements = [];
+    var [standardPhone, standardMail, standardAddressId] = newSelect([
+            "(" + CommUtil.getStandardSubSqlPhone() + ")", 
+            "(" + CommUtil.getStandardSubSqlMail() + ")",
+            "CONTACT.ADDRESS_ID"
+        ])
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pTargetContactId)
+        .arrayRow();
+    
+    //if the targetContact already has a standard phone comm, set the comm from the sourceContact as not standard
+    if (standardPhone)
+    {
+        setStandardsStatements.push(
+            newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId)
+                .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("PHONE"), SqlBuilder.IN())
+                .buildUpdateStatement({"ISSTANDARD" : "0"})
+        );
+    }
+    if (standardMail)
+    {
+        setStandardsStatements.push(
+            newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId)
+                .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("EMAIL"), SqlBuilder.IN())
+                .buildUpdateStatement({"ISSTANDARD" : "0"})
+        );
+    }
+    //set the standardaddress of the sourceContact as standard of the targetContact if it doesn't have one set yet
+    if(!standardAddressId) 
+    {
+        var sourceStandard = newSelect("CONTACT.ADDRESS_ID")
+            .from("CONTACT")
+            .where("CONTACT.CONTACTID", pSourceContactId)
+            .cell();
+        setStandardsStatements.push(newWhere("CONTACT.CONTACTID", pTargetContactId).buildUpdateStatement({"ADDRESS_ID": sourceStandard}));
+    }
+    
+    updateStatements.set(currentAlias, setStandardsStatements);
+    
+    DuplicateMergeUtils._getLinkedTableInfos(pTargetContactId).forEach(function ([tableName, columnName, additionalCondition, dbAlias])
+    {
+        if (!dbAlias)
+        {
+            dbAlias = currentAlias;
+        }
+        
+        if (!updateStatements.has(dbAlias))
+        {
+            updateStatements.set(dbAlias, []);
+        }
+        var statements = updateStatements.get(dbAlias);
+        
+        var updateValues = {};
+        updateValues[columnName] = pTargetContactId;
+        
+        var updateCondition = new SqlBuilder(dbAlias).where([tableName, columnName], pSourceContactId).andIfSet(additionalCondition);
+        
+        //push must be used here to keep the reference
+        statements.push(updateCondition.buildUpdateStatement(updateValues, tableName));
+    });
+    
+    var totalChanges = 0;
+    
+    updateStatements.forEach(function (statements, alias)
+    {
+        totalChanges += db.updates(statements, alias);
+    });
+    
+    totalChanges += newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).deleteData(); //delete leftover communications from the source contact
+    totalChanges += new AttributeRelationQuery(pSourceContactId).deleteAllAttributes(); //delete leftover attributes
+
+    return totalChanges > 0;
+}
+
+/*
+ * All records with contactId = sourceContactId get updated, which are not assigned to the same "group" as the targetContactId.
+ * This is because otherwise there would now be in total two "participants" in the same "group" as opposed to one before.
+ * Also if they already are in the same "group" those records shouldn't be updated because it would lead to the same outcome.
+ *
+ * @returns {Boolean} If records have been updated
+ */
+DuplicateMergeUtils._migrateParticipantsToNewContact = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId)
+{
+    var excludedIds = newSelect(pAssignableIdColumn)
+        .from(pTableName)
+        .where([pTableName, pContactIdColumn], pTargetContactId)
+        .arrayColumn();
+
+    var updateCount = newWhereIfSet([pTableName, pAssignableIdColumn], excludedIds, SqlBuilder.NOT_IN())
+        .and([pTableName, pContactIdColumn], pSourceContactId)
+        .updateFields(new Map().set(pContactIdColumn, pTargetContactId), pTableName);
+        
+    var deleteCount = newWhere([pTableName, pContactIdColumn], pSourceContactId)
+        .tableName(pTableName)
+        .deleteData();
+    
+    return updateCount > 0 || deleteCount > 0;
+}
+
+/*
+ * Update other contacts from the source
+ *
+ * @returns {Boolean} If records have been updated
+ */
+DuplicateMergeUtils._updateOtherContacts = function (pSourceContactId, sourcePersonId, targetPersonId)
+{
+    var otherContacts = newSelect("PERSON.PERSONID")
+                                .from("PERSON")
+                                .join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID")
+                                .where("PERSON.PERSONID", sourcePersonId)
+                                .and("CONTACT.CONTACTID", pSourceContactId, SqlBuilder.NOT_EQUAL())
+                                .table();
+    var updateCount = 0;
+    
+    otherContacts.forEach(function(person){                 
+        updateCount += newWhere("CONTACT.PERSON_ID", person)
+                        .updateFields({"PERSON_ID" : targetPersonId}, "CONTACT");
+    });
+
+    return updateCount > 0;
+}
+
+DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSourceContactId)
+{
+    return [
+        newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).buildDeleteStatement(),
+        newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).buildDeleteStatement()
+    ];
+}
+
+DuplicateMergeUtils._buildDeleteOrganisationAndContactQuery = function(pSourceOrganisationId, pSourceContactId)
+{
+    return [
+        newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).buildDeleteStatement(),
+        newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()
+    ];
+}
+
+/*
+ * Contains all Tables and their fields which may contain the contact id to be replaced for the data alias
+ *
+ * @returns {String[[]]} Array in the format [TableName, ContactIdColumnName, AdditionalCondition, alias]
+ */
+DuplicateMergeUtils._getLinkedTableInfos = function(pTargetContactId)
+{
+    //don't use communications that the target already has
+    var targetComms = newSelect("COMMUNICATION.ADDR") 
+        .from("COMMUNICATION")
+        .where("COMMUNICATION.CONTACT_ID", pTargetContactId)
+        .arrayColumn();
+        
+    var communicationDedupCondition = targetComms.length > 0
+        ? newWhere("COMMUNICATION.ADDR", targetComms, SqlBuilder.NOT_IN())
+        : "";
+    
+    return[
+        ["AB_APPOINTMENTLINK", "OBJECT_ROWID"],
+        ["AB_CTILOG", "CONTACT_ID"],
+        ["AB_OBJECTRELATION", "AB_OBJECTRELATIONID"],
+        ["AB_OBJECTRELATION", "OBJECT1_ROWID"],
+        ["AB_OBJECTRELATION", "OBJECT2_ROWID"],
+        ["AB_LOGHISTORY", "TABLENAMEID"],
+        ["ADDRESS", "CONTACT_ID"],
+        ["BULKMAILRECIPIENT", "CONTACT_ID"],
+        ["BULKMAIL", "TESTING_CONTACT_ID"],
+        ["CAMPAIGN", "EMPLOYEE_CONTACT_ID"],
+        ["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID"],
+        ["COMMRESTRICTION", "CONTACT_ID"],
+        ["COMMRESTRICTION", "EMPLOYEE_INVOLVED"],
+        ["COMMUNICATION", "CONTACT_ID", communicationDedupCondition],
+        ["COMPETITION", "CONTACT_ID"],
+        ["CONTRACT", "CONTACT_ID"],
+        ["LETTERRECIPIENT", "CONTACT_ID"],
+        ["OBJECTMEMBER", "CONTACT_ID"],
+        ["OFFER", "CONTACT_ID"],
+        ["PRODUCT", "CONTACT_ID"],
+        ["PRODUCTPRICE", "CONTACT_ID"],
+        ["SALESORDER", "CONTACT_ID"],
+        ["SALESPROJECT", "CONTACT_ID"],
+        ["TASK", "REQUESTOR_CONTACT_ID"],
+        ["TASK", "EDITOR_CONTACT_ID"],
+        ["TASKLINK", "OBJECT_ROWID"],
+        ["ACTIVITY", "RESPONSIBLE"],
+        ["DSGVO", "CONTACT_ID"],
+        ["DSGVOINFO", "CONTACT_ID"],
+        ["TIMETRACKING", "CONTACT_ID"],
+        ["ACTIVITYLINK", "OBJECT_ROWID"],
+        ["AB_ATTRIBUTERELATION", "OBJECT_ROWID"],
+
+        ["ASYS_CALENDARLINK", "DBID", "", SqlUtils.getSystemAlias()]
+    ];
+}
diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index e26053edc6cb753291a842212cbfcef324124799..be805bc2aecc3323fb0e536f545da25e8d2b5762 100644
--- a/process/DuplicateScanner_lib/process.js
+++ b/process/DuplicateScanner_lib/process.js
@@ -1,20 +1,12 @@
 import("system.project");
-import("ActivityTask_lib");
-import("KeywordRegistry_basic");
-import("system.translate");
-import("system.datetime");
-import("JditoFilter_lib");
-import("system.process");
 import("system.util");
 import("system.vars");
-import("system.net");
-import("system.logging");
 import("system.db");
 import("system.entities");
 import("Sql_lib");
 import("system.indexsearch");
-import("Communication_lib");
-import("Attribute_lib");
+import("IndexSearch_lib");
+import("system.process");
 
 /**
  * Methods for duplicate scanning.
@@ -24,1356 +16,250 @@ import("Attribute_lib");
  */
 function DuplicateScannerUtils() {}
 
-/*
- * Loads all prefilters for a scanner in the form of arrays in an array.
- * Single filter record: [FILTER_CONDITION, COUNT_CHARACTERS_TO_USE, MAX_RESULTS_THRESHOLD]
- *
- *  @param {String} pFilterName Name of the filter
- *  @param {String} pTargetEntity Entity which has been configured
- *  @returns {String[[]]} Array of arrays containing the configured values
- */
-DuplicateScannerUtils.loadFilters = function(pFilterName, pTargetEntity)
-{
-    let query = newSelect("FILTER_CONDITION, COUNT_CHARACTERS_TO_USE, MAX_RESULTS_THRESHOLD")
-                    .from("DUPLICATESCANNERPREFILTERCONFIG")
-                    .join("DUPLICATESCANNER", "DUPLICATESCANNER.ID = DUPLICATESCANNERPREFILTERCONFIG.DUPLICATESCANNER_ID")
-                    .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
-                    .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity);
-
-    return query.table();
-}
-
-/*
- * Deletes the cached duplicate for the given id.
- * If there would only remain one item in the cluster after deletion, the whole cluster including the duplicate gets deleted.
- * In this case, all records marked as unrelated duplicate will be deleted aswell.
- *
- * @param {String} pDuplicateId Id of the duplicate to delete
- */
-DuplicateScannerUtils.deleteCachedDuplicate = function(pDuplicateId)
-{
-    var [countDuplicatesInClusterWithoutParameterId, clusterId] = newSelect("count(ID), CLUSTERID")
-                    .from("DUPLICATECLUSTERS")
-                    .where("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID")
-                                                            .from("DUPLICATECLUSTERS")
-                                                            .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId).build(),
-                                                        SqlBuilder.IN())
-                    .and("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId, SqlBuilder.NOT_EQUAL())
-                    .groupBy("CLUSTERID")
-                    .arrayRow();
-
-    //If only one duplicate would be remaining,
-    //the whole cluster has to be deleted because there are no more duplicates.
-    //Otherwise delete just the single duplicate. The parameterized duplicate has been excluded via sql
-    //therefore check for smaller/equals 1
-    if(countDuplicatesInClusterWithoutParameterId <= 1)
-    {
-        newWhere("DUPLICATECLUSTERS.CLUSTERID", clusterId).deleteData();
-        newWhere("UNRELATEDDUPLICATES.CLUSTERID", clusterId).deleteData();
-    }
-    else
-    {
-        newWhereIfSet("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId).deleteData();
-
-        //Delete all records where this duplicateId is mentioned
-        DuplicateScannerUtils.deleteAllUnrelatedDuplicateRelations(pDuplicateId);
-    }
-}
-
-/*
- * Deletes all Clusters for the given target Entity.
- * No records markes as unrelated duplicate are being deleted.
- *
- * @param {String} pTargetEntity Entity which has been configured
- * @return Count of deleted rows
- */
-DuplicateScannerUtils.deleteClustersByTargetEntity = function(pTargetEntity)
-{
-    return newWhereIfSet("DUPLICATECLUSTERS.TARGET_ENTITY", pTargetEntity).deleteData();
-}
-
-/*
- * Updates the duplicate relations markes as unrelated for the given target entity.
- * All ClusterIds get updated with the new values if the same combination of duplicateIds
- * still exists in the DUPLICATECLUSTERS table.
- *
- * Afterwards, all records which contain a nonexistend clusterId are being deleted
- *
- * @param {String} pTargetEntity Name of Entity whose duplicates should be updated
+/**
+ * Returns an sql condition which returns a list of duplicate ids.
+ * The count is checked using pCount and pOperator.
+ * This function can be used for FilterExtensions
+ * 
+ * @param {string[]} pEntities target entities
+ * @param {number} pCount value of count (will be applied to the operator) 
+ * @param {string} pOperator the operator in sql notation e.g.: # = ?
+ * @param {boolean} pSubtractIgnored if set the ignored duplicates will be subtracted
+ * 
+ * @returns {SqlBuilder} subselect selecting the duplicate ids
  */
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations = function(pTargetEntity)
+DuplicateScannerUtils.getDuplicateConditionalListSql = function(pEntities, pCount, pOperator, pSubtractIgnored)
 {
-    /*
-     * Update all records with the current valid clusterId where the same duplicateId combination exists
-     */
-    let clusterIdChanges = newSelect("dc1.CLUSTERID, ud.CLUSTERID")
-                    .from("UNRELATEDDUPLICATES", "ud")
-                    .join("DUPLICATECLUSTERS", "dc1.DUPLICATEID = ud.SOURCEDUPLICATEID", "dc1")
-                    .join("DUPLICATECLUSTERS", "dc2.DUPLICATEID = ud.UNRELATEDDUPLICATEID", "dc2")
-                    .where(["DUPLICATECLUSTERS", "TARGET_ENTITY", "dc1"], pTargetEntity)
-                    .table();
-
-    let updateStatements = clusterIdChanges.map(function ([newClusterId, oldClusterId])
-    {
-        return newWhere("UNRELATEDDUPLICATES.CLUSTERID", oldClusterId).buildUpdateStatement({
-            "CLUSTERID": newClusterId
-        }, "UNRELATEDDUPLICATES");
-    });
+    var subselect = newSelect("count(*)").from("UNRELATEDDUPLICATES")
+    .where("UNRELATEDDUPLICATES.DUPLICATETYPE = HASDUPLICATE.OBJECT_TYPE")
+    .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID = HASDUPLICATE.OBJECT_ROWID");
     
-    db.updates(updateStatements);
-
-    /*
-     * All unrelated duplicate ids that still exist in a cluster, have been updated with the new cluster id.
-     * All records with a nonexistend clusterid can now be deleted because they haven't been detected as a duplicate any more.
-     */
-    newWhere("UNRELATEDDUPLICATES.CLUSTERID", newSelect("dc1.CLUSTERID").from("DUPLICATECLUSTERS", "dc1"), SqlBuilder.NOT_IN())
-        .deleteData();
-}
-
-/*
- * Creates a relation between two duplicates which means they are unrelated.
- * They will not appear in each others duplicate tab any more.
- * To remove this relation use DuplicateScannerUtils.deleteUnrelatedDuplicateRelation
- *
- * @param {String} pSourceContactId Id of first duplicate
- * @param {String} pUnrelatedContactId Id of second duplicate
- * @param {String} pClusterId Id of the cluster in which the duplicates are aggregated
- * @returns {String} Number of Records inserted
- */
-DuplicateScannerUtils.createUnrelatedDuplicateRelation = function(pSourceContactId, pUnrelatedContactId, pClusterId)
-{
-    return new SqlBuilder().insertFields({
-        "UNRELATEDDUPLICATEID": pUnrelatedContactId,
-        "SOURCEDUPLICATEID": pSourceContactId,
-        "CLUSTERID": pClusterId
-    }, "UNRELATEDDUPLICATES", "ID");
-}
-
-/*
- * Gets the cluster id in which the given duplicate id exists
- *
- *  @param {String} pDuplicateId whose cluster id should be searched
- *  @returns {String} Cluster id
- */
-DuplicateScannerUtils.getClusterId = function(pDuplicateId)
-{
-    return newSelect("CLUSTERID")
-                .from("DUPLICATECLUSTERS")
-                .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId)
-                .cell();
-}
-
-/*
- * Deletes the "unrelated" relation between two duplicates
- *
- *  @param {String} pSourceDuplicateId Id of the source duplicate
- *  @param {String} pUnrelatedDuplicateId Id of the source duplicate
- *  @returns {String} Number of records deleted
- */
-DuplicateScannerUtils.deleteUnrelatedDuplicateRelation = function(pSourceDuplicateId, pUnrelatedDuplicateId)
-{
-    return newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId)
-                .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateId)
-                .deleteData();
-}
-
-/*
- * Deletes all relations to a duplicate id wether the id is the source or the unrelated duplicate in the relation
- *
- *  @param {String} pDuplicateId Duplicate id whose "unrelated" relations are to delete
- *  @returns {String} Number of records deleted
- */
-DuplicateScannerUtils.deleteAllUnrelatedDuplicateRelations = function(pDuplicateId)
-{
-    DuplicateScannerUtils.deleteUnrelatedDuplicateRelation(pDuplicateId, pDuplicateId);
+    var countSql = pSubtractIgnored ? "(HASDUPLICATE.DUPLICATECOUNT - (" + subselect.toString() + "))" : "(HASDUPLICATE.DUPLICATECOUNT)";
+    return newSelect("HASDUPLICATE.OBJECT_ROWID").from("HASDUPLICATE")
+    .where("HASDUPLICATE.OBJECT_TYPE", pEntities, SqlBuilder.IN())
+    .and(pOperator.replace("#", countSql).replace("?", pCount));
 }
 
-/*
- * Loads all other duplicates from the cluster in which the parameterized duplicate is located
- *
- *  @param {String} pDuplicateId
- *  @returns {String[]} Array of duplicate ids
- */
-DuplicateScannerUtils.getCachedDuplicatesForDuplicateId = function(pDuplicateId)
-{
-    return newSelect("DUPLICATEID")
-                .from("DUPLICATECLUSTERS")
-                .where("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID")
-                                                            .from("DUPLICATECLUSTERS")
-                                                            .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId),
-                                                    SqlBuilder.IN())
-                .and("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId, SqlBuilder.NOT_EQUAL())
-                .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();
-}
-
-/*
- * Returns all duplicate ids which haven't been marked as unrelated for the given cluster id.
- *
- * @param {String} pClusterId The clusters id
- * @return {String[]} Array of duplicate ids excluding those marked as unrelated
- */
-DuplicateScannerUtils.getCachedDuplicatesForClusterId = function(pClusterId)
-{
-    return newSelect("DUPLICATEID")
-                .from("DUPLICATECLUSTERS")
-                .where("DUPLICATECLUSTERS.DUPLICATEID", newSelect("UNRELATEDDUPLICATEID").from("UNRELATEDDUPLICATES"),
-                            SqlBuilder.NOT_IN())
-                .and("DUPLICATECLUSTERS.CLUSTERID", pClusterId)
-                .arrayColumn();
-}
-
-/*
- * Recreates the cached duplicate clusters based on the configured pattern. <br />
- * The old clusters have to be deleted manually beforehand or by using "deleteClustersByTargetEntity".<br />
- * If there have already been ignored relations between duplicate records, it's advised to call "refreshUnrelatedDuplicateRelations" after the recreation of the duplicates cache.<br />
- * Please check the documentation of the params on how to get the infos required.<br />
- * <br />
- * If the usage of an external webservice has been activated, the search will be executed beforehand and the results will then be given to the pFormatValuesConsumeWebserviceCallback via parameter.<br />
- * To access the values it is advised to run thru the parameter like an array and access its value by key which is the index field name. The entity<br />
- * field names can be converted using DuplicateScannerUtils.translateEntityToIndexFields. For further infos see the example section below.<br />
- * <br />
- * Attention!<br />
- * If it is configured to use the external webservice callback the values have to be in the same format as they are in the parameter of the callback.<br />
- * <br />
- * @param {String} pFilterName Name of the filter to use
- * @param {String} pTargetEntity The target entity which has been assigned to the filters configuration
- * @param {String} pRecordsBlockSize The values which are checked get loaded in blocks.
- * @param {String} pFormatValuesConsumeWebserviceCallback Null if no external service is used otherwise a function with one parameter.
- * @return {Int} Count of duplicate clusters created
- *
- * @example
- * var filterName = "PersonDuplicates";
- * var targetEntity = "Person_entity";
- * var recordBlockSize = DuplicateScannerUtils.getBlockSize();
- *
- * let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay)
- * {
- *      let indexResultFields = DuplicateScannerUtils.TranslateEntityToIndexFields(targetEntity, resultFields)
- *
- *      //Run thru every duplicate result an read out the resultfields
- *      for (let i = 0; i < pPossibleDuplicatesRay.length; i++)
- *      {
- *          for (let b = 0; b < resultFields.length; b++)
- *          {
- *              let entityFieldName = resultFields[b];
- *              let indexFieldName = indexResultFields[entityFieldName];
- *              //format values
- *          }
- *      }
- *      //call webservice
- *      //reformat results to same structure as before
- *      return pPossibleDuplicatesRay;
- * };
- *
- * DuplicateScannerUtils.DeleteDuplicateClustersByTargetEntity(targetEntity);
- *
- * DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, pRecordsBlockSize, formatToJsonAndCallWsCallback);
- *
- * DuplicateScannerUtils.RefreshUnrelatedDuplicateRelations(targetEntity);
+/**
+ * Ignores duplicates corrosponding to the type, the source, and the duplicate ids
+ * 
+ * @param {string} pDuplicateType the duplicate type e.g.: Organisation_entity
+ * @param {string} pSourceDuplicateId the source duplicate id
+ * @param {string[]} pUnrelatedDuplicateIds the target duplicate ids
+ * @param {boolean} pIgnore weather the duplicate should be ignored or unignored
  */
-DuplicateScannerUtils.rebuildDuplicatesCache = function(pFilterName, pTargetEntity,
-    pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback)
+DuplicateScannerUtils.updateIgnored = function(pDuplicateType, pSourceDuplicateId, pUnrelatedDuplicateIds, pIgnore)
 {
-    let useExternalWebservice = _DuplicateScannerUtils._isUseExternalWebservice(pFilterName, pTargetEntity);
-    let resultFields = DuplicateScannerUtils.getResultFields(filterName, targetEntity);
-
-    let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity);
-    let entityFieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern);
-    let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity);
+    newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId)
+    .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateIds, SqlBuilder.IN())
+    .deleteData();
     
-    let alreadyIdentifiedIds = [];
+    var TABLE_NAME = "UNRELATEDDUPLICATES";
+    var COLUMN_NAMES = ["ID", "DUPLICATETYPE", "SOURCEDUPLICATEID", "UNRELATEDDUPLICATEID"];
+    var COLUMN_TYPES = db.getColumnTypes(TABLE_NAME, COLUMN_NAMES);
     
-    let entityFields = _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(entityFieldConfigs);
-
-    entityFields.push(entityIdField);
-    
-    let targetRecords = DuplicateScannerUtils.getEntityRecords(pTargetEntity, entityFields, 0, pRecordsBlockSize);
-
-    let currentRecordIndex = pRecordsBlockSize;
-    while(targetRecords.length > 0)
+    var statements = [];
+    pUnrelatedDuplicateIds.forEach(function(currId)
     {
-        
-        foundDuplicateIds = DuplicateScannerUtils.scanRecords(pTargetEntity, targetRecords,
-            entityFieldConfigs, resultFields, useExternalWebservice,
-            pFormatValuesConsumeWebserviceCallback, alreadyIdentifiedIds, indexPattern, entityIdField);
-        
-        if (foundDuplicateIds)
-            alreadyIdentifiedIds = alreadyIdentifiedIds.concat(foundDuplicateIds);
-
-        if(targetRecords.length < pRecordsBlockSize)
-        {
-            break;
-        }
-        targetRecords = DuplicateScannerUtils.getEntityRecords(pTargetEntity, entityFields,
-            currentRecordIndex, pRecordsBlockSize);
-
-        currentRecordIndex += pRecordsBlockSize;
-    }
-}
-
-DuplicateScannerUtils.scanRecords = function(pTargetEntity, pTargetRecordsData,
-    pEntityFieldConfigs, pResultFields, pUseExternalWebservice, pFormatValuesConsumeWebserviceCallback, pAlreadyIdentifiedIds, pIndexPattern, pEntityIdField)
-{
-    let foundDuplicateIds = [];
-
-    //If the contact id loading query has no results, stop.
-    //No ids should be deleted if an error has been made in this query.
-    if(pTargetRecordsData.length <= 0)
-        return foundDuplicateIds;
-
-    //First it gets checked if the current id has already been identified. If that's the case it'll continue with the next.
-    //Otherwise an object gets build in the form of ["FilterFieldName" = "FilterFieldValueFromQuery"] with which a scan for possible duplicates get's started
-    var duplicatesToInsertQueries = [];
-    for (let b = 0; b < pTargetRecordsData.length; b++)
+        var columnValues = [util.getNewUUID(), pDuplicateType, pSourceDuplicateId, currId];
+        statements.push([TABLE_NAME, COLUMN_NAMES, COLUMN_TYPES, columnValues]);
+    });
+    if(pIgnore)
     {
-        let entityFieldValuesRay = DuplicateScannerUtils.buildEntityFieldConfigs(pEntityFieldConfigs, pTargetRecordsData[b]);
-
-        //The first field in this Array must always be the configured id field. This is ensured using onValidation-logic
-        let idValue = pTargetRecordsData[b][pEntityIdField];
-
-        //If the current Id has already been identified, continue
-        if(pAlreadyIdentifiedIds.indexOf(pTargetRecordsData[b][pEntityIdField]) > -1)
-        {
-            continue;
-        }
-
-        let foundDuplicates = _DuplicateScannerUtils._scanForDuplicates(pTargetEntity,
-            entityFieldValuesRay, pResultFields, idValue, pFormatValuesConsumeWebserviceCallback, pUseExternalWebservice, pIndexPattern)
-
-        if(foundDuplicates == null || foundDuplicates.length == 0)
-        {
-            continue;
-        }
-        //Insert all found duplicate ids into an cache array because those ids don't have to be checked again lateron.
-        for (let i = 0; i < foundDuplicates.length; i++)
-        {
-            let localId = foundDuplicates[i][indexsearch.FIELD_ID];
-            foundDuplicateIds.push(localId);
-        }
-
-        pAlreadyIdentifiedIds = pAlreadyIdentifiedIds.concat(foundDuplicateIds);
-
-        //The duplicates list contains only the found duplicates to the original id, therefore it get's added manually
-        foundDuplicateIds.push(pTargetRecordsData[b][pEntityIdField]);
-
-        let insertQueriesRay = _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(foundDuplicateIds, pTargetEntity)
-        duplicatesToInsertQueries = duplicatesToInsertQueries.concat(insertQueriesRay);
-        foundDuplicateIds = [];
+        db.inserts(statements);
     }
-    db.inserts(duplicatesToInsertQueries, db.getCurrentAlias(), 10 * datetime.ONE_MINUTE);
-    return foundDuplicateIds;
 }
 
-/* 
- * Searches for a cluster which contains the duplicates specified by the parameterized array. <br />
- * The contents of the cluster have to be identical, if no fitting cluster could be found an empty string is returned.
+/**
+ * Removes ignored duplicates from an array of duplicate ids
  * 
- * @param {String} pNewRecordId The id of the record which was used to scan for duplicates
- * @param {String[]} pDuplicateIds Duplicate ids used to search for a cluster containing them
- * @param {String} pTargetEntity Entity which has been configured
- * @returns {String} A clusterid if a matching cluster has been found, otherwise ""
- */
-DuplicateScannerUtils.cacheNewScanResults = function(pNewRecordId, pDuplicateIds, pTargetEntity)
-{
-    let duplicateIds = [];
-    //Run thru every duplicate result and read out the id. 
-    //Do it now to have a simple array on all usages lateron.
-    for (let i = 0; i < pDuplicateIds.length; i++)
-    {
-        let duplicateContactId = pDuplicateIds[i][indexsearch.FIELD_ID];
-        duplicateIds.push(duplicateContactId);
-    }
-    
-    let clusterId = DuplicateScannerUtils.getClusterWithIdenticalDuplicates(duplicateIds);
-    
-    //If no cluster has beend found, create a new one with all found duplicateIds, 
-    //otherwise add the id to the existing cluster
-    let idRayToInsert = [];
-    if(clusterId == undefined || clusterId == null || clusterId == "")
-    {
-        idRayToInsert = duplicateIds;
-        idRayToInsert.push(pNewRecordId);
-    }
-    else
-        idRayToInsert.push(pNewRecordId);
-    
-    insertQueriesRay = _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(idRayToInsert, pTargetEntity, clusterId)
-
-    return db.inserts(insertQueriesRay);
-}
-
-/* 
- * Searches for a cluster which contains the duplicates specified by the parameterized array. <br />
- * The contents of the cluster have to be identical, if no fitting cluster could be found an empty string is returned.
+ * @param {string} pTargetEntity the target entity e.g.: Organisation_entity
+ * @param {string} pTargetUid the source duplicate id
+ * @param {string} pIdArray the array of duplicate ids
  * 
- * @param {String[]} pDuplicateIds Duplicate ids which should be in the same cluster
- * @returns {String} Id of the cluster which contains all given duplicate ids or ""
+ * @returns {string[]} the filtered duplicate ids
  */
-DuplicateScannerUtils.getClusterWithIdenticalDuplicates = function(pDuplicateIds)
+DuplicateScannerUtils.filterIgnored = function(pTargetEntity, pTargetUid, pIdArray)
 {
-    let RESULT_NO_CLUSTER_FOUND = "";
-
-    if(pDuplicateIds.length < 1)
-        return RESULT_NO_CLUSTER_FOUND;
-    
-    let clusterIdSelect = newSelect("distinct CLUSTERID")
-                                .from("DUPLICATECLUSTERS")
-                                .where();
-    
-    for (let i = 0; i < pDuplicateIds.length; i++) 
+    if(pIdArray.length == 0)
     {
-        clusterIdSelect.and("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID").from("DUPLICATECLUSTERS").where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateIds[i]),
-                                        SqlBuilder.IN());
+        return pIdArray;
     }
-
-    let foundClusterId = clusterIdSelect.cell();
-
-    if(foundClusterId == null || foundClusterId == "")
-        return RESULT_NO_CLUSTER_FOUND;
-    
-    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.
-     * In this case, the cluster and the parameterized duplicateids are not identical 
-     * which means a new cluster has to be created.
-     */
-    if(pDuplicateIds.length != duplicatesInCluster.length)
-        return RESULT_NO_CLUSTER_FOUND;
-    else
-        return foundClusterId;
+    var ignoreTable = newSelect(["UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID"])
+        .from("UNRELATEDDUPLICATES")
+        .where("UNRELATEDDUPLICATES.DUPLICATETYPE", pTargetEntity)
+        .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pTargetUid)
+        .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pIdArray, SqlBuilder.IN())
+        .arrayColumn();
+    return pIdArray.filter(function(curr) {
+        return !ignoreTable.includes(curr);
+    });
 }
 
-DuplicateScannerUtils.getEntityRecords = function(pTargetEntity, pEntityFields, pStartRow, pCountRecordsToLoad)
-{
-    let getRowsConfig = entities.createConfigForLoadingRows()
-    .entity(pTargetEntity)
-    .fields(pEntityFields)
-    .count(pCountRecordsToLoad)
-    .startrow(pStartRow);
-    return entities.getRows(getRowsConfig);
-}
-/*
- * Loads the configured resultfields as array
- *
- *  @param {String} pFilterName Name of the filter
- *  @param {String} pTargetEntity Entity which has been configured
- *  @returns {String[]} Resultfields as array
+/**
+ * Deletes duplicates corrosponding to the given type and ids
+ * 
+ * @param {string} pObjectType the duplicate type e.g.: Organisation_entity
+ * @param {string[]} pObjectRowIds the duplicate ids e.g. some organisation ids
  */
-DuplicateScannerUtils.getResultFields = function(pFilterName, pTargetEntity)
+DuplicateScannerUtils.deleteHasDuplicateEntries = function(pObjectType, pObjectRowIds)
 {
-    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();
+    newWhere("HASDUPLICATE.OBJECT_TYPE", pObjectType)
+    .and("HASDUPLICATE.OBJECT_ROWID", pObjectRowIds, SqlBuilder.IN())
+    .deleteData();
 }
 
-/*
- * Scans for duplicates based on the configured pattern and the selected id field<br />
- * All values to the used placeholders have to be present in "pValuesToCheck"<br />
- * First all placeholders in the pattern will be replaced with their respective values.
- * Then, the pattern is extended wo exclude the record on which the search is based on.
- *<br />
- * If the usage of an external webservice has been activated, the result will then be given to the pFormatValuesConsumeWebserviceCallback via parameter.<br />
- * To access the values it is advised to run thru the parameter like an array and access its value by key which is the index field name. The entity
- * field names can be converted using DuplicateScannerUtils.translateEntityToIndexFields
- * <br />
- * <br />
- * Attention!<br />
- * If it's a single scanForDuplicates call it doesn't matter what the callback returns because after the callback, no more modifications follow before
- * returning the data.<br />
- * If it's inside the RebuildCache the values have to be in the same format as the parameter
- *
- * @param {String} pFilterName Name of the filter
- * @param {String} pTargetEntity Respective target entity
- * @param {{"key", "value"}} pValuesToCheck An object with key value pairs which hold the name of the entity field as key and it's value as value. See the example "valuesToCheck"
- * @param {function} pFormatValuesConsumeWebserviceCallback Null if no external service is used otherwise a function with one parameter.
- * If the function is called is based on the configuration of the current scanner
- * @returns {[["key", "value"]]} Array of Key-Value-Pairs based on the configured resultfields, if an external webservices was used
- * the structure is defined by the parameterized function "pFormatValuesConsumeWebserviceCallback"
- *
- * @example
- * var filterName = "PersonDuplicates";
- * let targetEntity = "Person_entity";
- * let valuesToCheck = {};
- * var entityModel = project.getEntityStructure(targetEntity);
+/**
+ * Manually inserts a duplicate entry by the given type, id and count
  * 
- * //Read the values of all available entity fields and write the fieldname/value combination
- * //as key/value pairs into an object. This is used to trigger the scan for duplicates
- * let fieldValue = "";
- * let entityFields = [];
- * for (fieldname in entityModel.fields) 
- * { 
- *     field = entityModel.fields[fieldname]; 
- *     if(field.fieldType == project.ENTITYFIELDTYPE_FIELD)
- *     {
- *         fieldValue = vars.get("$field." + field.name);
- *         
- *         if(fieldValue != null && fieldValue != "")
- *         {
- *             valuesToCheck[field.name] = fieldValue;
- *         }
- *     }
- * }
- *
- * let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay)
- * {
- *     let indexResultFields = DuplicateScannerUtils.TranslateEntityToIndexFields(targetEntity, resultFields)
- *
- *     //Run thru every duplicate result an read out the resultfields
- *     for (let i = 0; i < pPossibleDuplicatesRay.length; i++)
- *     {
- *         for (let b = 0; b < resultFields.length; b++)
- *         {
- *             let entityFieldName = resultFields[b];
- *             let indexFieldName = indexResultFields[entityFieldName];
- *             //format values
- *         }
- *     }
- *     //call webservice
- *     //reformat results to same structure as before
- *     return pPossibleDuplicatesRay;
- * };
- *
- * //The result values can be accessed as seen above in "formatToJsonAndCallWsCallback"
- * DuplicateScannerUtils.ScanForDuplicates(filterName, targetEntity, valuesToCheck,
- * formatToJsonAndCallWsCallback);
+ * @param {string} pObjectType the type e.g.: Organisation_entity
+ * @param {string} pObjectRowId the id e.g. a organisation id
+ * @param {number} pCount the count / how many duplicates are there
  */
-DuplicateScannerUtils.scanForDuplicates = function(pFilterName, pTargetEntity, pValuesToCheck, pFormatValuesConsumeWebserviceCallback)
+DuplicateScannerUtils.insertHasDuplicateEntry = function(pObjectType, pObjectRowId, pCount)
 {
-    let useExternalWebservice = _DuplicateScannerUtils._isUseExternalWebservice(pFilterName, pTargetEntity);
-    let resultFields = DuplicateScannerUtils.getResultFields(pFilterName, pTargetEntity);
-    
-    let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity);
-    let entityFieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern);  
-    let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity);
-    
-    let entityFieldConfigValuesRay = DuplicateScannerUtils.buildEntityFieldConfigs(entityFieldConfigs, pValuesToCheck);
-   
-   //The first field in this Array must always be the configured id field.
-    let idValue = pValuesToCheck[entityIdField];
-
-    return _DuplicateScannerUtils._scanForDuplicates(pTargetEntity,
-        entityFieldConfigValuesRay, resultFields, idValue,
-        pFormatValuesConsumeWebserviceCallback, useExternalWebservice, indexPattern)
+    var COLUMNS = [
+        "HASDUPLICATEID",
+        "OBJECT_TYPE", "OBJECT_ROWID",
+        "DUPLICATECOUNT"
+    ];
+    var COLUMN_TYPES = db.getColumnTypes("HASDUPLICATE", COLUMNS);
+    var values = [
+        util.getNewUUID(),
+        pObjectType, pObjectRowId,
+        pCount.toFixed(0)
+    ];
+    db.insertData("HASDUPLICATE", COLUMNS, COLUMN_TYPES, values);
 }
 
-/*
- * Executes a indexsearch.lookupIndexField for eacht entity field in the parameterized array
- * and returns it as Map.
- *
- *  @param {String} pEntityName ...Name of the entity
- *  @param {String[]} pEntityFields Array of the entities Fields to translate to index fields
- *  @returns Map-like object where (key = entity field) and (value = index field)
- *
- *  @example
- *  let entityResultFields = ["LASTNAME"];
- *  let entityIndexFields = DuplicateScannerUtils.translateEntityToIndexFields("Person_entity", entityResultFields);
- *
+/**
+ * Updates HasDuplicate by entity (used in onInser and onUpdate)
+ * 
+ * @param {string} pTargetEntity the target entity e.g.: Organisation_entity
  */
-DuplicateScannerUtils.translateEntityToIndexFields = function(pEntityName, pEntityFields)
+DuplicateScannerUtils.updateHasDuplicateEntry = function(pTargetEntity)
 {
-    let entityIndexFields = {};
-    for (let i = 0; i < pEntityFields.length; i++)
-    {
-        let entityFieldName = pEntityFields[i];
+    var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity);
+    var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter);
 
-        //todo remove if api has been fixed
-        if(entityFieldName.startsWith(pEntityName))
-            entityFieldName = entityFieldName.replace(pEntityName + ".", "");
-
-        let indexField = indexsearch.lookupIndexField(pEntityName, entityFieldName);
-        entityIndexFields[pEntityFields[i]] = indexField;
-    }
-    return entityIndexFields;
-}
+    var fields = indexsearchFilter.getFields();
+    fields.add(scanner.idField);
+    fields = Array.from(fields);
 
-/*
- *
- * Merges the source person into the target person. 
- * This 
- * - replaces the source's with the target's contactid in a predefined set of tables.
- * - resets the standard communications of the source contact and keeps the ones of the target.
- * - updates participants of campaigns and removes obsolet ones(which would be duplicates)
- * - deletes the source person and contact
- * - deletes the duplicate record, if one exists
- * - deletes all unrelated-duplicate-relations containing the source contact id
- *
- *  @param {String} pSourceContactId The contact to be integrated into another
- *  @param {String} pTargetContactId The contact in which the source gets integrated
- *  @returns {Boolean} if the merge was sucessful
- */
-DuplicateScannerUtils.mergePerson = function(pSourceContactId, pTargetContactId)
-{
-    var sourcePersonId = newSelect("PERSON_ID")
-        .from("CONTACT")
-        .where("CONTACT.CONTACTID", pSourceContactId)
-        .cell();
-    var targetPersonId = newSelect("PERSON_ID")
-        .from("CONTACT")
-        .where("CONTACT.CONTACTID", pTargetContactId)
-        .cell();
-        
-    _DuplicateScannerUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId);
-    var isLinkedDataUpdated = _DuplicateScannerUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId);
-    var isParticipantsUpdated = _DuplicateScannerUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", 
-        pSourceContactId, pTargetContactId);
-    _DuplicateScannerUtils._updateOtherContacts(pSourceContactId, sourcePersonId, targetPersonId);
-    
-    var deleteStatements = [];
-    if (sourcePersonId != targetPersonId)
-        deleteStatements.push(newWhere("PERSON.PERSONID", sourcePersonId).buildDeleteStatement());
-    
-    deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement());
-    deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
-    
-    //update binary 
-    var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias());
-    metaData.forEach(function (binaryMetaData) 
+    var entityObj = {};
+    fields.forEach(function(field)
     {
-        db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias());
+        entityObj[field] = vars.get("$field." + field);
     });
-    var deletedRows = db.deletes(deleteStatements)
-
-    DuplicateScannerUtils.deleteCachedDuplicate(pSourceContactId);
-
-    return isLinkedDataUpdated || isParticipantsUpdated || deletedRows > 0;
-}
-
-DuplicateScannerUtils.createMergeSuccessActivity = function(pSourceContactId, pTargetContactId, pCurrentContactId, pContext)
-{
-    var activityDataForInsert = {
-        subject: translate.withArguments("A %0 record has been merged", [pContext]),
-        content: translate.withArguments("%0 with ID \"%1\" has been integrated into the %0 with the ID \"%2\"", [pContext, pSourceContactId, pTargetContactId]),
-        //categoryKeywordId: $KeywordRegistry.ac
-        directionKeywordId: $KeywordRegistry.activityDirection$internal(),
-        responsibleContactId: pCurrentContactId
-    };
-    var activityLinks = [[pContext, pTargetContactId]];
-
-    return ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias());
-}
-
-DuplicateScannerUtils.mergeOrganisation = function(pSourceContactId, pTargetContactId)
-{
-    var sourceOrganisationId = newSelect("ORGANISATION_ID")
-        .from("CONTACT")
-        .where("CONTACT.CONTACTID", pSourceContactId)
-        .cell();
-
-    var targetOrganisationId = newSelect("ORGANISATION_ID")
-        .from("CONTACT")
-        .where("CONTACT.CONTACTID", pTargetContactId)
-        .cell();
+    var selfId = entityObj[scanner.idField];
     
-    _DuplicateScannerUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId);
-    _DuplicateScannerUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId);
-    _DuplicateScannerUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", 
-        pSourceContactId, pTargetContactId);
-    _DuplicateScannerUtils._migratePersonsToNewOrganisation(sourceOrganisationId, targetOrganisationId);
+    var indexPattern = indexsearchFilter.buildQuery(entityObj);
+    var ids = DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, selfId);
     
-    var deleteStatements = [];
-    deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement());
-    deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery(sourceOrganisationId, pSourceContactId));
-    deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
-    
-    //update binary 
-    var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias());
-    metaData.forEach(function (binaryMetaData) 
+    DuplicateScannerUtils.deleteHasDuplicateEntries(pTargetEntity, [selfId]);
+    if(ids.length > 0)
     {
-        db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias());
-    });
-    var deletedRows = db.deletes(deleteStatements)
-
-    DuplicateScannerUtils.deleteCachedDuplicate(pSourceContactId);
-
-    return deletedRows >= 2;
-}
-
-/*
- * Creates an array of arrays containing the entity field config paired with it's value.
- *
- * @param {[]} pDuplicateFieldsConfig An Array with the configured fields in the form of [ENTITY_FIELD, IS_ID, USE_FOR_SEARCH]. @see LoadDuplicateIndexFieldsConfiguration()
- * @param {{"key", "value"}} pTargetRecordData One record containing the values for the configured fields. It's in the format of {"key(=EntityFieldName", "Value"}
- * @return {[[]]} An array of arrays containing the entity field config an its value. ["{entityfield: FIRSTNAME}", "PETER"]]
- * @example
- * pDuplicateFieldsConfig
- * ["CONTACTID", true, false]
- * ["FIRSTNAME", false, true]
- *
- * pTargetRecordData
- * ["d786045c-8b21-4f22-b6d9-72be9f61c04d", "PETER"]
- *
- * => ["{entityfield: FIRSTNAME}", "PETER"]]
- */
-DuplicateScannerUtils.buildEntityFieldConfigs = function(pDuplicateFieldsConfig, pTargetRecordData)
-{
-    let INDEX_CONFIG_ENTITY_FIELD = 0;
-    let entityFieldConfigValuesRay = [];
-    /*
-    * Based on the parameterized filter field names and the values loaded via the query,
-    * an array which contains records in the style of ["FilterFieldName", "FilterFieldValueFromQuery"] gets created.
-    * This is mandatory to run the scan for this record.
-    */
-    for (let i = 0; i < pDuplicateFieldsConfig.length; i++)
-    {
-        let fieldConfig = JSON.parse("{" + pDuplicateFieldsConfig[i] + "}");
-        let entityField = fieldConfig.entityfield;
-        let entityFieldValue = pTargetRecordData[entityField];
-        if(entityFieldValue == null)
-            entityFieldValue = "";
-        else
-            entityFieldValue = indexsearch.escapeString(entityFieldValue).trim();
-        
-        let exclude = fieldConfig.exclude;
-        if (exclude)
-        {   
-            exclude.forEach(function (excludeValue)
-            {
-                entityFieldValue = " " + entityFieldValue + " ";
-                entityFieldValue = entityFieldValue.replace(new RegExp( " " + excludeValue + " ", "gi"), "");
-            });  
-        }
-        
-        let valuelength = fieldConfig.length; 
-        if ( valuelength )
-            entityFieldValue = entityFieldValue.substr(0, parseInt(valuelength)) + "*";
-        
-        let empty = fieldConfig.empty; 
-        if ( !empty && entityFieldValue == "")
-            entityFieldValue = "*";
-       
-        entityFieldValue = entityFieldValue.trim();
-        entityFieldConfigValuesRay.push([pDuplicateFieldsConfig[i], entityFieldValue]);
+        DuplicateScannerUtils.insertHasDuplicateEntry(pTargetEntity, selfId, ids.length);
     }
-    return entityFieldConfigValuesRay.length > 0 ? entityFieldConfigValuesRay : [["", ""]];
-}
-
-DuplicateScannerUtils.getBlockSize = function()
-{
-    return project.getPreferenceValue("custom.duplicates.dataBlockSize", "5000");
-}
-
-DuplicateScannerUtils.getEntityFieldsFromConfig = function(pFilterName, pTargetEntity)
-{
-    let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity);
-    if(indexPattern == null || indexPattern == "")
-        return [];
-    let fieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern);
-    if(fieldConfigs == null || fieldConfigs.length < 1)
-        return [];
-    let entityFields = _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(fieldConfigs);
-    let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity);
-    entityFields.push(entityIdField);
-    return entityFields;
 }
 
 /**
- * Loads the configured entity fields required for the given duplicate scanner.
+ * Returns a DuplicateScanner object by the given entity name
+ * 
+ * @param {string} pTargetEntity a entity name e.g.: Organisation_entity
  * 
- *  @param {String} pFilterName the name of the scanner
- *  @param {String} pTargetEntity the target entity
- *  @return {Object} an object with two properties:
- *      <ul>
- *          <li>entityFields: array of entity fields</li>
- *          <li>entityIdField: the id field name as string</li>
- *      </ul>
+ * @returns {object} the scanner object
  */
-DuplicateScannerUtils.getEntityFieldObjectFromConfig = function (pFilterName, pTargetEntity)
+DuplicateScannerUtils.getScannerByEntity = function(pTargetEntity)
 {
-    var indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity);
-    if (!indexPattern)
-        return null;
-    var fieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern);
-    if (fieldConfigs == null || fieldConfigs.length === 0)
-        return null;
-    
+    var duplicateScanner = newSelect([
+        "DUPLICATESCANNER.ID_FIELD_NAME",
+        "DUPLICATESCANNER.SCAN_PATTERN"
+    ])
+    .from("DUPLICATESCANNER")
+    .where("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity).arrayRow();
+    var filterObj = JSON.parse(duplicateScanner[1]).filter;
     return {
-        entityFields : _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(fieldConfigs),
-        entityIdField : _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity)
+        idField: duplicateScanner[0],
+        filter: filterObj
     };
 }
 
-DuplicateScannerUtils.getUnrelatedRelationsForDuplicate = function(pDuplicateId)
-{
-    let unrelatedIds = [];
-    let duplicateIds = newSelect("SOURCEDUPLICATEID, UNRELATEDDUPLICATEID")
-                .from("UNRELATEDDUPLICATES")
-                .where("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId)
-                .or("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId)
-                .table();
-    let sourceDuplicateId = "";
-    let unrelatedDuplicateId = "";
-    for (let i = 0; i < duplicateIds.length; i++) 
-    {
-        sourceDuplicateId = duplicateIds[i][0];
-        unrelatedDuplicateId = duplicateIds[i][1];
-        
-        if(sourceDuplicateId != null && sourceDuplicateId != "" && sourceDuplicateId != pDuplicateId)
-        {
-            unrelatedIds.push(sourceDuplicateId);
-        }
-        else if(unrelatedDuplicateId != null && unrelatedDuplicateId != "" && unrelatedDuplicateId != pDuplicateId)
-        {
-            unrelatedIds.push(unrelatedDuplicateId);
-        }
-    }
-    return unrelatedIds;
-}
-
-function _DuplicateScannerUtils() {}
-
-_DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs = function(pEntityFieldConfigs)
-{
-    let fieldNames = [];
-    for (let i = 0; i < pEntityFieldConfigs.length; i++) 
-    {
-        let fieldConfig = JSON.parse("{" + pEntityFieldConfigs[i] + "}");
-        let entityField = fieldConfig.entityfield;
-        fieldNames.push(entityField);
-    }
-    return fieldNames;
-}
-
-/*
- * Gets the Pattern for the scanner
- * A pattern usually contains placeholders in the style of "{entityFieldName]"
+/**
+ * Calls the index search and returns the found duplicate ids
  * 
- * @param {String} pScannerName Name of the filter to use
- * @param {String} pTargetEntity The target entity which has been assigned to the filters configuration
- * @returns {String} Scan pattern as string
- */
-_DuplicateScannerUtils._loadIndexPattern = function(pScannerName, pTargetEntity)
-{
-    let scanPattern = _DuplicateScannerUtils._filterToScanPattern( newSelect("SCAN_PATTERN")
-                            .from("DUPLICATESCANNER")
-                            .where("DUPLICATESCANNER.FILTER_NAME", pScannerName)
-                            .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
-                            .cell());
-    scanPattern = scanPattern.trim();
-    return scanPattern;
-}
-
-
-_DuplicateScannerUtils._filterToScanPattern = function(filterString) {
-    if (filterString == "")
-        return "";
-    try 
-    {
-        var filter = JSON.parse(filterString);
-    }
-    catch (err)
-    {
-        return "";
-    }
-    return _DuplicateScannerUtils._filterChildsToScanPattern(filter.filter.childs, filter.filter.operator);
-}
-
-_DuplicateScannerUtils._filterChildsToScanPattern = function(childs, operator) {
-    let group = "";
-    for (let i = 0; i < childs.length; i++) {
-        if (group != ""){
-            group = group + " " + operator+ " ";
-        }
-        if (childs[i].type == "row"){
-            group =  group + _DuplicateScannerUtils._filterChildsRowToScanPattern(childs[i].name, childs[i].operator, childs[i].value);
-        } else if (childs[i].type == "group") {
-            group = group + "("  + _DuplicateScannerUtils._filterChildsToScanPattern(childs[i].childs, childs[i].operator) + ")";
-        }
-    }
-    return group;
-}
-
-_DuplicateScannerUtils._filterChildsRowToScanPattern = function (name, operator, value) {
-    let row = "";
-    row = row + name.toLowerCase() + ':({"entityfield":"' + name + '"';
-    switch (operator){
-        case "NOT_EQUAL":
-        case "CONTAINSNOT":
-            row = row + ', "exclude":' + value;
-        case "ISNOTNULL":
-            row = row + ', "empty":' + false;
-    }
-    row = row + '})';
-    return row;
-}
-
-_DuplicateScannerUtils._loadEntityFieldConfigsFromPattern = function(indexPattern)
-{
-    return indexPattern.match(/[^{}]+(?=\})/g);
-}
-
-_DuplicateScannerUtils._replacePlaceholderForValuesInPattern = function(pIndexPattern, pEntityFieldValueRays)
-{
-    let INDEX_ENTITY_FIELD_NAME = 0;
-    let INDEX_ENTITY_FIELD_VALUE = 1;
-
-    let placeholder = "";
-    let fieldValue = "";
-    for (let i = 0; i < pEntityFieldValueRays.length; i++) 
-    {
-        placeholder = "{" + pEntityFieldValueRays[i][INDEX_ENTITY_FIELD_NAME] + "}";
-        fieldValue = pEntityFieldValueRays[i][INDEX_ENTITY_FIELD_VALUE];        
-        pIndexPattern = pIndexPattern.replace(placeholder, fieldValue);
-    }
-    return pIndexPattern;
-}
-
-_DuplicateScannerUtils._loadEntityIdField = function(pFilterName, pTargetEntity)
-{
-    return newSelect("ID_FIELD_NAME")
-                .from("DUPLICATESCANNER")
-                .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
-                .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
-                .cell();
-}
-
-/*
- * @see DuplicateScannerUtils.scanForDuplicates for the documentation
- */
-_DuplicateScannerUtils._scanForDuplicates = function(pTargetEntity, pEntityFieldConfigValuesRay,
-pResultFields, pRecordIdValueToIgnore, pFormatValuesConsumeWebserviceCallback, pUseExternalWebservice, pIndexPattern)
-{
-    //No filterfields/indexpattern => No indexsearch
-    if(pEntityFieldConfigValuesRay.length < 1 || pIndexPattern == null || pIndexPattern == "")
-        return null;
-    
-    let possibleDuplicates = [];
-    let ignoreSourceRecordPattern = _DuplicateScannerUtils._getIgnoreSourceRecordPattern(pRecordIdValueToIgnore);
-
-    let indexPatternWithValues = _DuplicateScannerUtils._replacePlaceholderForValuesInPattern(pIndexPattern, pEntityFieldConfigValuesRay);
-
-    possibleDuplicates = _DuplicateScannerUtils._callIndexSearch(pTargetEntity, indexPatternWithValues, ignoreSourceRecordPattern, pResultFields, 100);
-    
-    if(possibleDuplicates == null)
-        return null;
-
-    possibleDuplicates = possibleDuplicates[indexsearch.HITS];
-    
-    if(pUseExternalWebservice && pFormatValuesConsumeWebserviceCallback != null)
-        possibleDuplicates = pFormatValuesConsumeWebserviceCallback.apply(this, [possibleDuplicates]);
-
-    return possibleDuplicates;
-}
-
-/*
- * Returns a bool which say wether or not an external service should be used
- *
- * @param {String} pFilterName Name of the filter
- * @param {String} pTargetEntity Entity which has been configured
- *  @returns {Bool} True = use, False = no use
- */
-_DuplicateScannerUtils._isUseExternalWebservice = function(pFilterName, pTargetEntity)
-{
-    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;
-}
-
-/*
- * Runs the indexsearch based on the given parameters.
- * If the "pEntityFieldValueRays" is empty, no search will be executed.
+ * @param {string} pTargetEntity search for duplicate in this entity e.g.: Organisation_entity
+ * @param {string} pIndexPattern the index pattern as string
+ * @param {string=} pSelfId optionally the own id (this will be excluded)
  * 
- * @param {String} pTargetEntity Entity which has been configured
- * @param {String} pIndexPatternWithValues The pattern used to search. Has to contain the values already.
- * @param {String} pIdFilter The filter pattern used to exclude the current record from the result.
- * @param {String} pResultFields The result field config. Use "DuplicateScannerUtils.getResultFields"
- * @param {String} pResultSetRows todo
- * @returns {[["key", "value"]] || null} Array of Key-Value-Pairs based on the configured pResultFields, if no pattern exists null
+ * @returns {string[]} the duplicate ids
  */
-_DuplicateScannerUtils._callIndexSearch = function(pTargetEntity, pIndexPatternWithValues, pIdFilter, pResultFields, pResultSetRows)
+DuplicateScannerUtils.getDuplicateIds = function(pTargetEntity, pIndexPattern, pSelfId)
 {
-    //logging.log(pIndexPatternWithValues)
-    //The indexPattern can't be null because it is required to run the search.
-    if(pIndexPatternWithValues == null || pIndexPatternWithValues == "")
-        return null;
     let indexQuery = indexsearch.createIndexQuery()
-                                .setPattern(pIndexPatternWithValues)
-                                .setEntities([pTargetEntity])
-//                                .addFilter(pIdFilter);
-                                // .setDefaultOperator(indexsearch.OPERATOR_AND)
-                                //.addSearchFields("Person_entity.FIRSTNAME", "Person_entity.LASTNAME", "Person_entity.CONTACTID")
-                                //.setRows(pResultSetRows);
-    if(pIdFilter && pIdFilter.length > 0)
-        indexQuery.addFilter(pIdFilter);
-    
-    indexQuery = _DuplicateScannerUtils._setResultFields(indexQuery, pResultFields);
-    return indexsearch.searchIndex(indexQuery);
-}
-
-/*
- * Sets each field of the given array as resultfield on the given query.
- * Supports indexsearch internal fields aswell
- * (indexsearch.FIELD_ID, indexsearch.FIELD_TITLE, indexsearch.FIELD_TYPE, indexsearch.FIELD_DESCRIPTION)
- *
- * @param {IndexQuery} pIndexQuery An indexquery created with "indexsearch.createIndexQuery()"
- * @param {String[]} pResultFields The result field config. Use "DuplicateScannerUtils.getResultFields"
- * @returns {IndexQuery} IndexQuery with the resultfields set
- */
-_DuplicateScannerUtils._setResultFields = function(pIndexQuery, pResultFields)
-{
-    let resultIndexFields = [];
-    let resultFields = [];
-    for (let i = 0; i < pResultFields.length; i++)
+        .setPattern(pIndexPattern)
+        .setEntities([pTargetEntity]);
+    if(pSelfId)
     {
-        if(pResultFields[i] == indexsearch.FIELD_ID
-            || pResultFields[i] == indexsearch.FIELD_TITLE
-            || pResultFields[i] == indexsearch.FIELD_TYPE
-            || pResultFields[i] == indexsearch.FIELD_DESCRIPTION)
-            {
-            resultIndexFields.push(pResultFields[i]);
-        }
-        else
-            resultFields.push(pResultFields[i]);
+        // creates -_local_id_:"<pSelfId>"
+        var optFilter = indexsearch.buildPattern(indexsearch.createPatternConfig().minus(
+            indexsearch.createPhraseTerm(pSelfId)
+            .setIndexField(indexsearch.FIELD_ID)
+        ));
+        indexQuery = indexQuery.addFilter(optFilter);
     }
 
-    if(resultIndexFields.length > 0)
-        pIndexQuery = pIndexQuery.addResultIndexFields(resultIndexFields);
-
-    if(resultFields.length > 0)
+    var indexResult = indexsearch.searchIndex(indexQuery);
+    indexResult = indexResult[indexsearch.HITS];
+    if(indexResult === null || indexResult.length === 0)
     {
-        pIndexQuery = pIndexQuery.addResultFields(resultFields);
+        return [];
     }
-    return pIndexQuery;
-}
-
-/*
- * Creates the queries to insert new duplicates into a new cluster based on the pDuplicatesRay
- *
- * @param {String[]} pDuplicatesRay Array of duplicate ids
- * @param {String} pTargetEntity Entity which has been configured
- * @returns {String[]} Array of insert queries
- */
-_DuplicateScannerUtils._createInsertDuplicatesClusterQuery = function (pDuplicatesRay, pTargetEntity)
-{
-    return _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(pDuplicatesRay, pTargetEntity, util.getNewUUID());
-}
-
-/*
- * Creates the queries to insert new duplicates into a new cluster based on the pDuplicatesRay
- *
- * @param {String[]} pDuplicatesRay Array of duplicate ids
- * @param {String} pTargetEntity Entity which has been configured
- * @param {String} pClusterId Clusters id to which the duplicates are in relation
- * @returns {String[]} Array of insert queries
- */
-_DuplicateScannerUtils._createInsertDuplicatesClusterQuery = function (pDuplicatesRay, pTargetEntity, pClusterId)
-{
-    let duplicatesToInsertQueries = [];
-    let cols = ["ID", "CLUSTERID", "DUPLICATEID", "TARGET_ENTITY"];
 
-    if (!pClusterId)
-        pClusterId = util.getNewUUID();
-            
-    for (let i = 0; i < pDuplicatesRay.length; i++)
+    var duplicateIds = [];
+    indexResult.forEach(function(curr)
     {
-        let newId = util.getNewUUID();
-        let valuesToInsert = [newId, pClusterId, pDuplicatesRay[i], pTargetEntity];
-
-        duplicatesToInsertQueries.push(["DUPLICATECLUSTERS", cols, null, valuesToInsert]);
-    }
-    return duplicatesToInsertQueries;
-}
-
-/*
- * Deletes all clusters
- *
- * @returns {String} Count of records deleted
- */
-_DuplicateScannerUtils._deleteDuplicateClusters = function ()
-{
-    return db.deleteData("DUPLICATECLUSTERS");
-}
-
-/*
- * All records with contactId = sourceContactId get updated, which are not assigned to the same "group" as the targetContactId.
- * This is because otherwise there would now be in total two "participants" in the same "group" as opposed to one before.
- * Also if they already are in the same "group" those records shouldn't be updated because it would lead to the same outcome.
- *
- * @returns {Boolean} If records have been updated
- */
-_DuplicateScannerUtils._migrateParticipantsToNewContact = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId)
-{
-    var excludedIds = newSelect(pAssignableIdColumn)
-        .from(pTableName)
-        .where([pTableName, pContactIdColumn], pTargetContactId)
-        .arrayColumn();
-
-    var updateCount = newWhereIfSet([pTableName, pAssignableIdColumn], excludedIds, SqlBuilder.NOT_IN())
-        .and([pTableName, pContactIdColumn], pSourceContactId)
-        .updateFields(new Map().set(pContactIdColumn, pTargetContactId), pTableName);
-        
-    var deleteCount = newWhere([pTableName, pContactIdColumn], pSourceContactId)
-        .tableName(pTableName)
-        .deleteData();
-    
-    return updateCount > 0 || deleteCount > 0;
-}
-
-_DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery = function(pSourceOrganisationId, pSourceContactId)
-{
-    return [
-        newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).buildDeleteStatement(),
-        newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()
-    ];
-}
-
-_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSourceContactId)
-{
-    return [
-        newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).buildDeleteStatement(),
-        newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).buildDeleteStatement()
-    ];
-}
-
-/*
- * Creates a filter pattern which excludes results with the provided id from the search. 
- *
- * @param {String} pRecordIdValueToIgnore The id value to exclude from the result.
- * @returns {String} Filter pattern which excludes hits with the given id (index) from the result.
- */
-_DuplicateScannerUtils._getIgnoreSourceRecordPattern = function(pRecordIdValueToIgnore)
-{
-    // creates -_local_id_:"<pRecordIdValueToIgnore>"
-    if(pRecordIdValueToIgnore && pRecordIdValueToIgnore.length > 0)
-        return indexsearch.buildPattern(indexsearch.createPatternConfig().minus(
-                            indexsearch.createPhraseTerm(pRecordIdValueToIgnore)
-                            .setIndexField(indexsearch.FIELD_ID)
-                        ));
-    return null;
-}
-
-_DuplicateScannerUtils._migrateLinkedContactData = function (pSourceContactId, pTargetContactId)
-{
-    var updateStatements = new Map();
-    var currentAlias = db.getCurrentAlias();
-    
-    var setStandardsStatements = [];
-    var [standardPhone, standardMail, standardAddressId] = newSelect([
-            "(" + CommUtil.getStandardSubSqlPhone() + ")", 
-            "(" + CommUtil.getStandardSubSqlMail() + ")",
-            "CONTACT.ADDRESS_ID"
-        ])
-        .from("CONTACT")
-        .where("CONTACT.CONTACTID", pTargetContactId)
-        .arrayRow();
-    
-    //if the targetContact already has a standard phone comm, set the comm from the sourceContact as not standard
-    if (standardPhone)
-    {
-        setStandardsStatements.push(
-            newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId)
-                .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("PHONE"), SqlBuilder.IN())
-                .buildUpdateStatement({"ISSTANDARD" : "0"})
-        );
-    }
-    if (standardMail)
-    {
-        setStandardsStatements.push(
-            newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId)
-                .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("EMAIL"), SqlBuilder.IN())
-                .buildUpdateStatement({"ISSTANDARD" : "0"})
-        );
-    }
-    //set the standardaddress of the sourceContact as standard of the targetContact if it doesn't have one set yet
-    if(!standardAddressId) 
-    {
-        var sourceStandard = newSelect("CONTACT.ADDRESS_ID")
-            .from("CONTACT")
-            .where("CONTACT.CONTACTID", pSourceContactId)
-            .cell();
-        setStandardsStatements.push(newWhere("CONTACT.CONTACTID", pTargetContactId).buildUpdateStatement({"ADDRESS_ID": sourceStandard}));
-    }
-    
-    updateStatements.set(currentAlias, setStandardsStatements);
-    
-    _DuplicateScannerUtils._getLinkedTableInfos(pTargetContactId).forEach(function ([tableName, columnName, additionalCondition, dbAlias])
-    {
-        if (!dbAlias)
-            dbAlias = currentAlias;
-        
-        if (!updateStatements.has(dbAlias))
-            updateStatements.set(dbAlias, []);
-        var statements = updateStatements.get(dbAlias);
-        
-        var updateValues = {};
-        updateValues[columnName] = pTargetContactId;
-        
-        var updateCondition = new SqlBuilder(dbAlias).where([tableName, columnName], pSourceContactId).andIfSet(additionalCondition);
-        
-        //push must be used here to keep the reference
-        statements.push(updateCondition.buildUpdateStatement(updateValues, tableName));
+        duplicateIds.push(curr[indexsearch.FIELD_ID]);
     });
-    
-    var totalChanges = 0;
-    
-    updateStatements.forEach(function (statements, alias)
-    {
-        totalChanges += db.updates(statements, alias);
-    });
-    
-    totalChanges += newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).deleteData(); //delete leftover communications from the source contact
-    totalChanges += new AttributeRelationQuery(pSourceContactId).deleteAllAttributes(); //delete leftover attributes
-
-    return totalChanges > 0;
-}
-
-/*
- * Contains all Tables and their fields which may contain the contact id to be replaced for the data alias
- *
- * @returns {String[[]]} Array in the format [TableName, ContactIdColumnName, AdditionalCondition, alias]
- */
-_DuplicateScannerUtils._getLinkedTableInfos = function(pTargetContactId)
-{
-    //don't use communications that the target already has
-    var targetComms = newSelect("COMMUNICATION.ADDR") 
-        .from("COMMUNICATION")
-        .where("COMMUNICATION.CONTACT_ID", pTargetContactId)
-        .arrayColumn();
-        
-    var communicationDedupCondition = targetComms.length > 0
-        ? newWhere("COMMUNICATION.ADDR", targetComms, SqlBuilder.NOT_IN())
-        : "";
-    
-    return[
-        ["AB_APPOINTMENTLINK", "OBJECT_ROWID"],
-        ["AB_CTILOG", "CONTACT_ID"],
-        ["AB_OBJECTRELATION", "AB_OBJECTRELATIONID"],
-        ["AB_OBJECTRELATION", "OBJECT1_ROWID"],
-        ["AB_OBJECTRELATION", "OBJECT2_ROWID"],
-        ["AB_LOGHISTORY", "TABLENAMEID"],
-        ["ADDRESS", "CONTACT_ID"],
-        ["BULKMAILRECIPIENT", "CONTACT_ID"],
-        ["BULKMAIL", "TESTING_CONTACT_ID"],
-        ["CAMPAIGN", "EMPLOYEE_CONTACT_ID"],
-        ["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID"],
-        ["COMMRESTRICTION", "CONTACT_ID"],
-        ["COMMRESTRICTION", "EMPLOYEE_INVOLVED"],
-        ["COMMUNICATION", "CONTACT_ID", communicationDedupCondition],
-        ["COMPETITION", "CONTACT_ID"],
-        ["CONTRACT", "CONTACT_ID"],
-        ["LETTERRECIPIENT", "CONTACT_ID"],
-        ["OBJECTMEMBER", "CONTACT_ID"],
-        ["OFFER", "CONTACT_ID"],
-        ["PRODUCT", "CONTACT_ID"],
-        ["PRODUCTPRICE", "CONTACT_ID"],
-        ["SALESORDER", "CONTACT_ID"],
-        ["SALESPROJECT", "CONTACT_ID"],
-        ["TASK", "REQUESTOR_CONTACT_ID"],
-        ["TASK", "EDITOR_CONTACT_ID"],
-        ["TASKLINK", "OBJECT_ROWID"],
-        ["ACTIVITY", "RESPONSIBLE"],
-        ["DSGVO", "CONTACT_ID"],
-        ["DSGVOINFO", "CONTACT_ID"],
-        ["TIMETRACKING", "CONTACT_ID"],
-        ["ACTIVITYLINK", "OBJECT_ROWID"],
-        ["AB_ATTRIBUTERELATION", "OBJECT_ROWID"],
-
-        ["ASYS_CALENDARLINK", "DBID", "", SqlUtils.getSystemAlias()]
-    ];
-}
-
-
-/*
- * Returns wether or not a value should be substring'd
- *
- * @return true if pCountCharsOfValueToUse is a number, greater than 0 and smaller than the values length
- */
-_DuplicateScannerUtils._isValueLongerThanCharsToUse = function(pValueLength, pCountCharsOfValueToUse)
-{
-    return !isNaN(pCountCharsOfValueToUse)
-    && pCountCharsOfValueToUse > 0
-    && pValueLength > pCountCharsOfValueToUse;
-}
-
-/*
- * Returns wether or not the parameter isnt null and a number or not
- *
- * @param {String} pCountCharsOfValueToUse Hopefully a number
- * @returns {String} True if parameter isnt null and a number, False if it's null or no number
- */
-_DuplicateScannerUtils._isNotNullAndANumber = function(pCountCharsOfValueToUse)
-{
-    return pCountCharsOfValueToUse != null && !isNaN(pCountCharsOfValueToUse);
+    return duplicateIds;
 }
 
-/*
- * Persons get reassigned to new organisation
- *
- * @returns {Boolean} If records have been updated
+/**
+ * Does the same as getDuplicateIds but takes in a scanner (by entity) instead of an indexPattern
+ * 
+ * @param {string} pTargetEntity the entity name used to get the Scanner
+ * @param {string} pTargetUid all variables will be loaded by this id
+ * 
+ * @returns {string[]} the duplicate ids
  */
-_DuplicateScannerUtils._migratePersonsToNewOrganisation = function (pSourceOrganisationId, pTargetOrganisationId)
+DuplicateScannerUtils.getDuplicateIdsByEntityScanner = function(pTargetEntity, pTargetUid)
 {
-    var updateCount = newWhereIfSet(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId)
-                        .and("PERSON_ID is not null")
-                        .updateFields(new Map().set("ORGANISATION_ID", pTargetOrganisationId), "CONTACT");
-        
-    var deleteCount = newWhere(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId)
-                        .and("PERSON_ID is not null")
-                        .deleteData();
-    return updateCount > 0 || deleteCount > 0;
-}
+    var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity);
+    var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter);
 
-/*
- * Person and organisations keep the max_count = 1 attribute of the target and the one from the source is deleted
- *
- * @returns {Boolean} If records have been deleted
- */
-_DuplicateScannerUtils._deleteUniqueAttributes = function (pSourceContactId, pTargetContactId)
-{
-    var targetAttrUnique = newSelect("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
-                                .from("AB_ATTRIBUTERELATION")
-                                .join("AB_ATTRIBUTEUSAGE on AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID")
-                                .where("AB_ATTRIBUTEUSAGE.MAX_COUNT = 1")
-                                .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pTargetContactId)
-                                .table();
-    var deleteCount = 0;
+    var targetLoadConfig = entities.createConfigForLoadingRows()
+        .entity(pTargetEntity)
+        .uid(pTargetUid) // Array.from because getFields returns a Set
+        .fields(Array.from(indexsearchFilter.getFields()));
+    var targetRow = entities.getRow(targetLoadConfig);
     
-    targetAttrUnique.forEach(function(attribute){
-        deleteCount += newWhereIfSet("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", attribute)
-                        .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pSourceContactId)
-                        .deleteData();
-    });
-
-    return deleteCount > 0;
+    var indexPattern = indexsearchFilter.buildQuery(targetRow);
+    return DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, pTargetUid);
 }
 
-/*
- * Update other contacts from the source
- *
- * @returns {Boolean} If records have been updated
+/**
+ * Does the same as getDuplicateIdsByEntityScanner
+ * but the variables are directly passed in as an argument
+ * 
+ * @param {string} pTargetEntity the entity name used to get the Scanner
+ * @param {object} pEntityObj the variables (should include all variables needed to build the indexPattern)
+ * 
+ * @returns {string[]} the duplicate ids
  */
-    _DuplicateScannerUtils._updateOtherContacts = function (pSourceContactId, sourcePersonId, targetPersonId)
+DuplicateScannerUtils.getDuplicateIdsByEntityObj = function(pTargetEntity, pEntityObj)
 {
-    var otherContacts = newSelect("PERSON.PERSONID")
-                                .from("PERSON")
-                                .join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID")
-                                .where("PERSON.PERSONID", sourcePersonId)
-                                .and("CONTACT.CONTACTID", pSourceContactId, SqlBuilder.NOT_EQUAL())
-                                .table();
-    var updateCount = 0;
-    
-    otherContacts.forEach(function(person){                 
-        updateCount += newWhere("CONTACT.PERSON_ID", person)
-                        .updateFields({"PERSON_ID" : targetPersonId}, "CONTACT");
-    });
-
-    return updateCount > 0;
-}
\ No newline at end of file
+    var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity);
+    var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter);
+    var indexPattern = indexsearchFilter.buildQuery(pEntityObj);
+    return DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, pEntityObj[scanner.idField]);
+}
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index 61787a5d831ae07d315df9530951b04849e2b560..2bb2c3d1239b1458fed124790bb58827b0f15fab 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -1,19 +1,20 @@
+import("system.translate");
 import("system.question");
-import("Sql_lib");
-import("MimeType_lib");
-import("Document_lib");
 import("system.logging");
-import("system.translate");
 import("system.text");
-import("system.db");
-import("system.util");
-import("Communication_lib");
-import("DocumentTemplate_lib");
 import("system.neon");
 import("system.mail");
-import("Bulkmail_lib");
 import("system.tools");
+import("system.util");
+import("system.db");
+import("KeywordRegistry_basic");
+import("DocumentTemplate_lib");
+import("Communication_lib");
 import("EmailUtil_lib");
+import("Bulkmail_lib");
+import("MimeType_lib");
+import("Document_lib");
+import("Sql_lib");
 
 function EmailWritingUtils () {}
 
@@ -89,9 +90,10 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId,
  * @param {String} pEmailFilename optional file name of the email.
  * @param {String} [pAdditionalPlaceholders] additional placeholders for the email
  * @param {Array[]} [pUpdateStatements] an array with update statements which will be executed after email is downloaded/sent.
- * @param {String} pTypeClassification Documenttemplatetypeclassification
+ * @param {String} pDocumentTemplateType The document template type (single or serial - <b><u><i>use keyword!</i></u></b>).
  */
-EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pUpdateStatements, pTypeClassification)
+EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, 
+                                                pAdditionalPlaceholders, pUpdateStatements, pDocumentTemplateType)
 {
     var params = {
         "ContactId_param" : pToContactId,
@@ -101,7 +103,7 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComing
         "EmailFilename" : pEmailFilename,
         "AdditionalPlaceholders_param" : JSON.stringify(pAdditionalPlaceholders),
         "UpdateStatements_param" : JSON.stringify(pUpdateStatements),
-        "DocumentTemplateTypeClassification_param" : pTypeClassification
+        "DocumentTemplateTypeClassification_param" : pDocumentTemplateType
     };
     
     if (pToEmailAddress)
@@ -120,16 +122,18 @@ EmailWritingUtils.getMailbridgeAddress = function ()
  * Opens a view where the email with the report(s) can be downloaded as .eml
  * and after that it can be sent with e.g. Thunderbird
  * 
+ * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending)
  * @param {String} pRecipient Contact id of the recipient. 
  * @param {String} pComingFrom source from where you started (e.g. "Person", "Organisation")
  * @param {Array} pReportArray array with reports.
  * @param {String} pNotificationMsg message which will be shown after the operation is done.
  * @param {String} pEmailFilename optional file name of the email.
  * @param {String} [pAdditionalPlaceholders] additional placeholders for the email
- * @param {String} [pOfferId] optional needed for the offerEmails, to change the status of the offer
- * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending)
+ * @param {String} [pUpdateStatements] Opt. update-statements which will be executed, after download process is started.
+ * @param {String} pDocumentTemplateType The document template type (single or serial - <b><u><i>use keyword!</i></u></b>).
  */
-EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId)
+EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, 
+                                                    pUpdateStatements, pDocumentTemplateType)
 {
     var pRecpientEmail;
     
@@ -141,7 +145,8 @@ EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComing
         pRecpientEmail = null;
     }
     
-    EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId);
+    EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, 
+                                    pUpdateStatements, pDocumentTemplateType);
 }
 
 /**
@@ -397,7 +402,7 @@ Email.prototype.send = function (pUser)
             let mailbridgeExists = tools.getUser(mailbridgeTitle);
             
             if(mailbridgeExists)
-                mail.sendMailAs(mailbridgeTitle, mailId)
+                sentMails = mail.sendMailAs(mailbridgeTitle, mailId)
             else //check mailbridge user if this error gets thrown
                 question.showMessage(translate.withArguments("Mailbridge failed: user '%0' is unknown, contact an administrator.", [mailbridgeTitle]), question.ERROR, translate.text("Error"));
         }
diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js
index acd4c707cd7141cea4d447a432df02e3a9adec54..7557234d79c3a1f068fa2b7d3418244712e46c9d 100644
--- a/process/IncomingEmailExecutor_lib/process.js
+++ b/process/IncomingEmailExecutor_lib/process.js
@@ -200,10 +200,10 @@ IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks)
         directionKeywordId: this.activityData.direction || this.failbackActivityData.direction
     };
     
-    if (vars.get("$sys.isclient")){
+    if (vars.get("$sys.isclient") == "true"){
         activityDataForInsert.responsibleContactId = EmployeeUtils.getCurrentContactId();
     } else {
-        activityDataForInsert.responsibleContactId = this.activityData.employeeContactId || this.failbackActivityData.employeeContactId;
+        activityDataForInsert.responsibleContactId = this.activityData.employeeContactId ? this.activityData.employeeContactId : this.failbackActivityData.employeeContactId;
     }
     
     var activityLinks = this.activityData.links || this.failbackActivityData.links;
diff --git a/process/IndexSearch_lib/process.js b/process/IndexSearch_lib/process.js
index be35ad2cc8c0a24fabe76bd57ba2a64d9ce9b310..549aefab097b21cce5c1053bf013ec1daa322be9 100644
--- a/process/IndexSearch_lib/process.js
+++ b/process/IndexSearch_lib/process.js
@@ -1,3 +1,4 @@
+import("system.indexsearch");
 import("system.neon");
 import("system.text");
 
@@ -160,4 +161,146 @@ IndexsearchUtils.createAffectedInfoContainer = function(changedIdValue, changedT
         }
     });
     return res;
-}
\ No newline at end of file
+}
+
+
+/**
+ * Static utility class for constructing an indexsearch pattern
+ */
+function IndexsearchFilterUtils() {}
+
+/**
+ * Creates an indexsearch pattern from a filter
+ * 
+ * @param {object} pFilter the filter in json representation
+ * 
+ * @returns {IndexsearchFilterGroup|IndexsearchFilterRow} the IndexSearchFilter object
+ */
+IndexsearchFilterUtils.fromFilter = function(pFilter)
+{
+    if(pFilter["type"] == "group")
+    {
+        return IndexsearchFilterGroup.fromFilter(pFilter["childs"], pFilter["operator"]);
+    }
+    else if(pFilter["type"] == "row")
+    {
+        return IndexsearchFilterRow.fromFilter(pFilter["name"], pFilter["operator"], pFilter["value"]);
+    }
+    throw new Error("Unknown filter node type: " + pFilter["type"]);
+}
+
+
+/**
+ * The IndexsearchFilterGroup object represents the a filter group
+ * and is able to generate the corrosponding indexsearch pattern
+ * 
+ * @param {(IndexsearchFilterGroup|IndexsearchFilterRow)[]} pChilds the child filterrows/filtergroups
+ * @param {string} pOperator the operator for the group can either be 'AND' or 'OR'
+ */
+function IndexsearchFilterGroup(pChilds, pOperator)
+{
+    this.childs = pChilds;
+    this.operator = pOperator;
+}
+
+/**
+ * Returns all fiels as Set witch are required for this filter
+ * 
+ * @returns {Set<string>} The fields as Set
+ */
+IndexsearchFilterGroup.prototype.getFields = function()
+{
+    var fields = new Set();
+    for(let i = 0; i < this.childs.length; i++)
+    {
+        this.childs[i].getFields().forEach(fields.add, fields);
+    }
+    return fields;
+}
+
+/**
+ * Builds the index pattern and returns it as string
+ * 
+ * @param {Record<string, string>} pFieldValues the field name value pair
+ */
+IndexsearchFilterGroup.prototype.buildQuery = function(pFieldValues)
+{
+    return this.childs.map(function(curr) { return curr.buildQuery(pFieldValues); })
+    .filter(function(curr) { return curr != null; })
+    .join(" " + this.operator + " ");
+}
+
+/**
+ * Creates a new IndexsearchFilterGroup object
+ * 
+ * @param {(IndexsearchFilterGroup|IndexsearchFilterRow)[]} pChilds the child filterrows/filtergroups
+ * @param {string} pOperator the operator for the group can either be 'AND' or 'OR'
+ */
+IndexsearchFilterGroup.fromFilter = function(pChilds, pOperator)
+{
+    return new IndexsearchFilterGroup(
+        pChilds.map(function(curr)
+        {
+            return IndexsearchFilterUtils.fromFilter(curr);
+        }),
+        pOperator
+    );
+}
+
+
+function IndexsearchFilterRow(pName, pEmpty, pExclude)
+{
+    this.name = pName;
+    this.empty = pEmpty;
+    this.exclude = pExclude;
+}
+
+/**
+ * Returns all fiels as Set witch are required for this filter
+ * 
+ * @returns {Set<string>} The fields as Set
+ */
+IndexsearchFilterRow.prototype.getFields = function()
+{
+    return new Set([this.name]);
+}
+
+/**
+ * Builds the index pattern and returns it as string
+ * 
+ * @param {Record<string, string>} pFieldValues the field name value pair
+ */
+IndexsearchFilterRow.prototype.buildQuery = function(pFieldValues)
+{
+    var fieldValue = pFieldValues[this.name] ? pFieldValues[this.name] : "";
+    if(!this.empty && fieldValue == "")
+    {
+        return null;
+    }
+    var valueStr = fieldValue;
+    for(let i = 0; i < this.exclude.length; i++)
+    {
+        valueStr = valueStr.replace(new RegExp(this.exclude[i], "gi"), "");
+    }
+    return this.name.toLowerCase() + ':("' + indexsearch.escapeString(valueStr.trim().replace(/\s+/g, "")) + '")';
+}
+
+/**
+ * Creates a new IndexsearchFilterGroup object
+ * 
+ * @param {string} pName the row field name
+ * @param {string} pOperator the operator for the group can either be 'AND' or 'OR'
+ * @param {string} pValue the field valze
+ */
+IndexsearchFilterRow.fromFilter = function(pName, pOperator, pValue)
+{
+    if(pOperator == "NOT_EQUAL" || pOperator == "CONTAINSNOT")
+    {
+        return new IndexsearchFilterRow(pName, true, JSON.parse(pValue));
+    }
+    else if(pOperator == "ISNOTNULL")
+    {
+        return new IndexsearchFilterRow(pName, false, []);
+    }
+    throw new Error("Unknown filterrow operator: " + pOperator);
+}
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 2ae0206e4c39a9c54e875dee258ac76d8b3fb761..defb4e85cb3a5ccdc2553cd3e1932668f03d7d26 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -42,6 +42,7 @@ $KeywordRegistry.contactStatus = function(){return "ContactStatus";};
 $KeywordRegistry.contactStatus$active = function(){return "CONTACTSTATACTIVE";};
 $KeywordRegistry.contactStatus$inactive = function(){return "CONTACTSTATINACTIVE";};
 $KeywordRegistry.contactStatus$inReview = function(){return "CONTACTSTATREVIEW";};
+$KeywordRegistry.contactStatus$markToDelete = function(){return "CONTACTSTATDELETE";};
 
 $KeywordRegistry.currency = function(){return "Currency";};
 $KeywordRegistry.currency$eur = function(){return "EUR";};
@@ -200,6 +201,7 @@ $KeywordRegistry.dsgvoStatuoritysource = function(){return "DSGVOStatuoritysourc
 
 $KeywordRegistry.dsgvoType = function() {return "DSGVOType";};
 $KeywordRegistry.dsgvoType$birth = function(){return "TYPE_BIRTH";};
+$KeywordRegistry.dsgvoType$privacyNotice = function(){return "TYPE_PRIVACY_NOTICE";};
 
 $KeywordRegistry.dsgvoTransmission = function() {return "DSGVOTransmission";};
 $KeywordRegistry.dsgvoTransmission$none = function(){return "DSGVONONE";};
@@ -212,6 +214,13 @@ $KeywordRegistry.dsgvoDeadline$complex = function(){return "DSGVODEADLINECOMPLEX
 $KeywordRegistry.dsgvoDeadline$count = function(){return "DSGVODEADLINECOUNT";};
 $KeywordRegistry.dsgvoGuarantee = function() {return "DSGVOGuarantee";};
 
+$KeywordRegistry.dsgvoConfiguration = function() {return "DSGVOConfiguration";};
+$KeywordRegistry.dsgvoConfiguration$config = function() {return "DSGVO_CONFIGURATION";};
+$KeywordRegistry.dsgvoConfiguration$configId = function() {return "51f106b6-b593-4279-bf39-c8d226ebc607";};
+
+$KeywordRegistry.dsgvoReason = function(){ return "DSGVOReason";};
+$KeywordRegistry.dsgvoReason$manuel = function(){ return "607cfce8-1cc3-466e-9a69-4f0c9cf7e391";};
+
 $KeywordRegistry.textPlaceholder = function(){return "textPlaceholder";};
 
 $KeywordRegistry.communicationMediumCampaign = function(){return "CommunicationMediumCampaign";};
@@ -363,4 +372,33 @@ $KeywordRegistry.forecastKind$planning = function(){return "PLANNING";}
 $KeywordRegistry.forecastStatus = function(){return "ForecastStatus";}
 $KeywordRegistry.forecastStatus$inPlanning = function(){return "IN_PLANNING";}
 $KeywordRegistry.forecastStatus$locked = function(){return "LOCKED";}
-$KeywordRegistry.forecastStatus$planned = function(){return "PLANNED";}
\ No newline at end of file
+$KeywordRegistry.forecastStatus$planned = function(){return "PLANNED";}
+$KeywordRegistry.checklistEntryType$auto = function(){return "AUTO";}
+
+$KeywordRegistry.communicationSettingStatus = function(){return "CommunicationSettingStatus";};
+$KeywordRegistry.communicationSettingStatus$pending = function(){return "COMMUNICATION_PENDING";};
+$KeywordRegistry.communicationSettingStatus$allowed = function(){return "COMMUNICATION_ALLOWED";};
+$KeywordRegistry.communicationSettingStatus$rejected = function(){return "COMMUNICATION_REJECTED";};
+
+$KeywordRegistry.communicationChannelType = function(){return "CommunicationChannelType";};
+$KeywordRegistry.communicationChannelType$profiling = function(){return "COMMUNICATIONCHANNEL_PROFILING";};
+$KeywordRegistry.communicationChannelType$global = function(){return "COMMUNICATIONCHANNEL_GLOBAL";};
+$KeywordRegistry.communicationChannelType$communication = function(){return "COMMUNICATIONCHANNEL_COMMUNICATION";};
+$KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";};
+
+$KeywordRegistry.weblinkType = function(){return "WeblinkType";};
+$KeywordRegistry.weblinkType$EMail = function() {return "WEBLINK_EMAIL"};
+
+$KeywordRegistry.interestStatus = function(){return "InterestStatus";};
+$KeywordRegistry.interestStatus$active = function(){return "INTEREST_ACTIVE";};
+$KeywordRegistry.interestStatus$inactive = function(){return "INTEREST_INACTIVE";};
+
+$KeywordRegistry.interestLinkStatus = function(){return "InterestLinkStatus";};
+$KeywordRegistry.interestLinkStatus$subscribed = function(){return "INTERESTLINK_SUBSCRIBED";};
+$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";};
+
+$KeywordRegistry.deviceType = function(){return "DeviceType";};
+$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";};
+
+$KeywordRegistry.communicationBlacklistType = function(){return "CommunicationBlacklistType";};
+$KeywordRegistry.communicationBlacklistType$emailRecipientFilter = function(){return "BLACKLIST_TYPE_EMAILRECIPIENT_FILTER";};
\ No newline at end of file
diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js
index 3f33564d881f46aa07e062522eb22d7a89dbbea8..4d7f8120f6aea55a909bf5caa13530687fbf07d1 100644
--- a/process/Keyword_lib/process.js
+++ b/process/Keyword_lib/process.js
@@ -201,16 +201,18 @@ KeywordUtils.getEntryNamesByContainer = function(pContainerName, pLocale)
 * 
 * @param {String} pContainerName name of the keyword container for filtering
 * @param {String} [pLocale=locale depending on current client/servercontext] Language-value for translations
+* @param {boolean=} pOnlyActive if true only active keywords will be returned
 * 
 * @return {String[]} 2D-Array in the form of [[id1, translatedTitle1], [idN, translatedTitleN]]
 */
-KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale)
+KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale, pOnlyActive)
 {
     //TODO: this can be propably removed when the "Salesproject_entity.REASONS.dropDownProcess.js" is replaced by a consumer
     var list = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE")
                     .from("AB_KEYWORD_ENTRY")
                     .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID")
                     .where("AB_KEYWORD_CATEGORY.NAME", pContainerName)
+                    .andIfSet("AB_KEYWORD_ENTRY.ISACTIVE", pOnlyActive ? "1" : null)
                     .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc")
                     .table();
 
diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js
index d37c1f78ac48bda146e8791629958fe82d076044..1859595621f80e74f67d3b93cbd5959a5746cb60 100644
--- a/process/Leadimport_lib/process.js
+++ b/process/Leadimport_lib/process.js
@@ -918,19 +918,19 @@ LeadImportUtils.scanLeadDups = function(pAllContactData)
         
         if (orgObj != undefined && Object.keys(orgObj).length > 0)//checks if there is an ORGANISATIONDUPLICATE
         {
-            let scanResultsOrg = DuplicateScannerUtils.scanForDuplicates("OrganisationDuplicates", "Organisation_entity", orgObj, null);
-            if (scanResultsOrg != null && scanResultsOrg.length > 0)
+            let scanResultsOrg = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Organisation_entity", orgObj);
+            if (scanResultsOrg.length > 0)
             {
-                let insertCountOrg = DuplicateScannerUtils.cacheNewScanResults(orgObj["CONTACTID"], scanResultsOrg, "Organisation_entity");
+                DuplicateScannerUtils.insertHasDuplicateEntry("Organisation_entity", orgObj["CONTACTID"], scanResultsOrg);
                 dupOrg = true;
             }
         }
         if (persObj != undefined && Object.keys(persObj).length > 0)//checks if there is an PERSONDUPLICATE
         {
-            let scanResultsPers = DuplicateScannerUtils.scanForDuplicates("PersonDuplicates", "Person_entity", persObj, null);
-            if (scanResultsPers != null && scanResultsPers.length > 0)
+            let scanResultsPers = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Person_entity", persObj);
+            if (scanResultsPers.length > 0)
             {
-                let insertCountPers = DuplicateScannerUtils.cacheNewScanResults(persObj["CONTACTID"], scanResultsPers, "Person_entity");
+                DuplicateScannerUtils.insertHasDuplicateEntry("Person_entity", persObj["CONTACTID"], scanResultsPers);
                 dupPers = true;
             }
         }
diff --git a/process/MarketingCondition_lib/MarketingCondition_lib.aod b/process/MarketingCondition_lib/MarketingCondition_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5e55b885b065114498b81f6bb9b0c95e4eafbb67
--- /dev/null
+++ b/process/MarketingCondition_lib/MarketingCondition_lib.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>MarketingCondition_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/MarketingCondition_lib/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..2053acd67b4992dadcbb7c8048dbd530d4e80b3b
--- /dev/null
+++ b/process/MarketingCondition_lib/process.js
@@ -0,0 +1,206 @@
+import("Util_lib");
+import("JditoFilter_lib");
+import("system.vars");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+
+/**
+ * Object for building communication settings sql conditions.
+ */
+function CommunicationSettingsCondition ()
+{
+    this._contactIdSql = "CONTACT.CONTACTID";
+    this._channelType = null;
+    this._medium = null;
+    this._channelIdSql = null;
+    this._settingStatus = null;
+    this._existsOperator = SqlBuilder.EXISTS();
+}
+
+CommunicationSettingsCondition.prototype.contactIdField = function (pContactIdSql)
+{
+    this._contactIdSql = pContactIdSql;
+    return this;
+}
+
+CommunicationSettingsCondition.prototype.existNoSettings = function ()
+{
+    this._existsOperator = SqlBuilder.NOT_EXISTS();
+    return this;
+}
+
+CommunicationSettingsCondition.prototype.existSettings = function ()
+{
+    this._existsOperator = SqlBuilder.EXISTS();
+    return this;
+}
+
+/**
+ * Sets the medium and the source of the communication address for filtering the communication settings.
+ * 
+ * @param {String} pMedium      communication medium
+ * @param {String} pAddressSql  sql field or expression for the communication address
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.medium = function (pMedium, pAddressSql)
+{
+    this._channelType = $KeywordRegistry.communicationChannelType$communication();
+    this._medium = pMedium;
+    if (pAddressSql)
+        this._channelIdSql = pAddressSql;
+    return this;
+}
+
+/**
+ * Sets the medium to email and the source of the email address for filtering the communication settings.
+ * 
+ * @param {String} pAddressSql  sql field or expression for the email address
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.emails = function (pAddressSql)
+{
+    return this.medium($KeywordRegistry.communicationMediumCampaign$mail(), pAddressSql);
+}
+
+/**
+ * Sets the source of the address to filter the communication settings by address.
+ * 
+ * @param {String} pAddressSql  sql field or expression for the address id
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.address = function (pAddressSql)
+{
+    this._channelType = $KeywordRegistry.communicationChannelType$address();
+    this._channelIdSql = pAddressSql;
+    return this;
+}
+
+/**
+ * Only fetch communication settings with the status 'rejected'
+ * 
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.rejected = function ()
+{
+    this._settingStatus = $KeywordRegistry.communicationSettingStatus$rejected();
+    return this;
+}
+
+/**
+ * Only fetch communication settings with the status 'allowed'
+ * 
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.allowed = function ()
+{
+    this._settingStatus = $KeywordRegistry.communicationSettingStatus$allowed();
+    return this;
+}
+
+/**
+ * Only fetch communication settings with the status 'pending'
+ * 
+ * @return {CommunicationSettingsCondition} current object
+ */
+CommunicationSettingsCondition.prototype.pending = function ()
+{
+    this._settingStatus = $KeywordRegistry.communicationSettingStatus$pending();
+    return this;
+}
+
+/**
+ * Builds a sub select for fetching the communication settings with the properies as configured.
+ * 
+ * @param {String|Array} [pSelectFields=COMMUNICATIONSETTINGSID]  columns to select
+ * @return {SqlBuilder} SqlBuilder object with the full sql select
+ */
+CommunicationSettingsCondition.prototype.buildSelect = function (pSelectFields)
+{
+    if (pSelectFields == undefined)
+        pSelectFields = "COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID";
+    var sql = newSelect(pSelectFields)
+        .from("COMMUNICATIONSETTINGS")
+        .where("COMMUNICATIONSETTINGS.CONTACT_ID = " + this._contactIdSql)
+        .andIfSet("COMMUNICATIONSETTINGS.STATUS", this._settingStatus);
+    
+    var channelCondition = newWhere("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$global());
+    if (this._channelType)
+    {
+        var specificChannelCondition = newWhere("COMMUNICATIONSETTINGS.CHANNEL_TYPE", this._channelType)
+            .andIfSet("COMMUNICATIONSETTINGS.MEDIUM", this._medium);
+        if (this._channelIdSql)
+        {
+            specificChannelCondition.and(newWhere("COMMUNICATIONSETTINGS.CHANNEL_ID = " + this._channelIdSql)
+                .or("COMMUNICATIONSETTINGS.CHANNEL_ID is null"));
+        }
+        channelCondition.or(specificChannelCondition);
+    }
+    sql.and(channelCondition);
+    
+    return sql;
+}
+
+/**
+ * Builds a sql condition for fetching only contacts with communication settings that have the configured properties.
+ * 
+ * @return {SqlBuilder} sql condition
+ */
+CommunicationSettingsCondition.prototype.buildCondition = function ()
+{
+    return newWhere(null, this.buildSelect(), this._existsOperator);
+}
+
+
+/* required functionality:
+ * - make communication settings condition
+ * - make interest condition
+ * - make blacklist condition
+ * - make full condition
+ * - check for single contact
+ */
+
+function CommunicationBlacklist () 
+{
+    this.filter = null;
+}
+
+/**
+ * @return {CommunicationBlacklist}
+ */
+CommunicationBlacklist.getMailRecipientBlacklist = function ()
+{
+    var currentDate = vars.get("$sys.date");
+    var filters = newSelect("BLACKLIST_FILTER")
+        .from("COMMUNICATIONBLACKLIST")
+        .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$emailRecipientFilter())
+        .and(newWhere("COMMUNICATIONBLACKLIST.START_DATE", currentDate, SqlBuilder.GREATER_OR_EQUAL())
+            .or("COMMUNICATIONBLACKLIST.START_DATE is null"))
+        .and(newWhere("COMMUNICATIONBLACKLIST.END_DATE", currentDate, SqlBuilder.LESS_OR_EQUAL()))
+            .or("COMMUNICATIONBLACKLIST.END_DATE is null")
+        .table();
+    
+    var filterMappingFn = function ([blacklistFilter])
+    {
+        blacklistFilter = JSON.parse(blacklistFilter);
+        if (!blacklistFilter.filter || blacklistFilter.entity != "BulkMailRecipient_entity" || Utils.isNullOrEmpty(blacklistFilter.filter.childs))
+            return null;
+        
+        return blacklistFilter.filter;
+    };
+    
+    var blacklist = new CommunicationBlacklist();
+    blacklist.filter = {
+        type: "group",
+        operator: "AND",
+        childs: filters.map(filterMappingFn).filter(Utils.isObject)
+    };
+    return blacklist;
+}
+
+CommunicationBlacklist.prototype.getCondition = function ()
+{
+    return new FilterSqlTranslator()
+        .filter(this.filter)
+        .table("BULKMAILRECIPIENT")
+        .getSqlCondition();
+}
diff --git a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod b/process/MarketingCondition_test/MarketingCondition_test.aod
similarity index 72%
rename from process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod
rename to process/MarketingCondition_test/MarketingCondition_test.aod
index 078550c7200171ccff2e26f2515a616016da481a..e1fabb654e0c28f0747afcbf030302c26d996392 100644
--- a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod
+++ b/process/MarketingCondition_test/MarketingCondition_test.aod
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
-  <name>RebuildDuplicatesCache_serverProcess</name>
+  <name>MarketingCondition_test</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <process>%aditoprj%/process/RebuildDuplicatesCache_serverProcess/process.js</process>
+  <process>%aditoprj%/process/MarketingCondition_test/process.js</process>
   <variants>
     <element>EXECUTABLE</element>
   </variants>
diff --git a/process/MarketingCondition_test/process.js b/process/MarketingCondition_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/process/MimeType_lib/process.js b/process/MimeType_lib/process.js
index 6e262c76ea89a5e1c433972f975821589021a792..d5a07f0fc22ef7344f9a92d3b80d48f7c09c7da8 100644
--- a/process/MimeType_lib/process.js
+++ b/process/MimeType_lib/process.js
@@ -68,4 +68,30 @@ MimeTypes.WEBM = function() {return "video/webm";};
 MimeTypes.isXML = function (pMimeType)
 {
     return pMimeType == MimeTypes.XML() || pMimeType == MimeTypes.XML_APP();
-}
\ No newline at end of file
+}
+
+/**
+ * tests if the given mime type can open
+ * 
+ * @param {String} pMimeType mime type
+ * @return {Boolean} if it can open
+ */
+MimeTypes.canOpenMimeTypeInBrowser = function (pMimeType)
+{
+    return (
+//       application
+          pMimeType == MimeTypes.PDF() ||
+          pMimeType == MimeTypes.XML_APP() || 
+        
+//       text
+          pMimeType == MimeTypes.TXT() ||
+          pMimeType == MimeTypes.XML() ||
+
+//       images
+          pMimeType == MimeTypes.BMP() || 
+          pMimeType == MimeTypes.GIF() || 
+          pMimeType == MimeTypes.JPEG() ||
+          pMimeType == MimeTypes.PNG() || 
+          pMimeType == MimeTypes.SVG() 
+    );
+}
diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index 1fb67604ae5cdb6dd7491ed489ead8af5a800e39..a9561a5068390247ec5b6e0d1b39edf453e8180f 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -631,7 +631,7 @@ OfferItemUtils.getDiscountedNet = function(pExcludedIs, pOfferId, pDiscount, pEx
     var vat = 0;
     var vatExcluded = 0;
     if(pOfferId){
-        var offeritemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL")
+        var offeritemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL, ITEMPOSITION")
         .from("OFFERITEM")
         .where("OFFERITEM.OFFER_ID", pOfferId)
         .andIfSet("OFFERITEM.GROUPCODEID", pExcludedProductgroups, SqlBuilder.NOT_IN())
@@ -640,8 +640,12 @@ OfferItemUtils.getDiscountedNet = function(pExcludedIs, pOfferId, pDiscount, pEx
         .table();
         for (var i = 0; i < offeritemData.length; i++)
         {
-            sum = eMath.addDec(sum, ItemUtils.prototype.getItemSum(offeritemData[i][0], offeritemData[i][1], offeritemData[i][2], offeritemData[i][4]));
-            vat = eMath.addDec(vat, ItemUtils.prototype.getItemVAT(offeritemData[i][0], offeritemData[i][1], offeritemData[i][2], offeritemData[i][3], offeritemData[i][4]));
+            if(!offeritemData[i][5].toString().includes(".")//only top items
+                && offeritemData[i][4] == "0")//which are not optional
+            {
+                sum = eMath.addDec(sum, eMath.subDec(offeritemData[i][1], offeritemData[i][2])*offeritemData[i][0]);
+                vat = eMath.addDec(vat, offeritemData[i][3]*eMath.subDec(offeritemData[i][1], offeritemData[i][2])*offeritemData[i][0]/100);
+            }
         }
        
         sum = eMath.subDec(sum, eMath.divDec(eMath.mulDec(sum, pDiscount), "100"));
diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js
index a162fc7ee5d7514746718d5054fa10f7cb73df71..f9d5255fa6724011b31a58996b059d949c979482 100644
--- a/process/Placeholder_lib/process.js
+++ b/process/Placeholder_lib/process.js
@@ -4,6 +4,7 @@ import("CustomPlaceholder_lib");
 import("Sql_lib");
 import("Communication_lib");
 import("system.datetime");
+import("KeywordRegistry_basic");
 
 
 /* Library for document template placeholders.
@@ -124,6 +125,21 @@ PlaceholderUtils.getRegexpMatchAll = function ()
     return /\{@(.(?!{@)|(\r?\n))+?@\}/gi;
 }
 
+/**
+ * Returns all link Placeholders for Bulkmails
+ *
+ */
+PlaceholderUtils.getLinkPlaceholders = function ()
+{
+    var links = newSelect("WEBLINK.PLACEHOLDER, WEBLINK.URL")
+    .from("WEBLINK")
+    .where("WEBLINK.LINKTYPE", $KeywordRegistry.weblinkType$EMail())
+    .and("WEBLINK.PLACEHOLDER IS NOT NULL")
+    .table();
+    
+    return links.map(function(a){ return new Placeholder(a[0], Placeholder.types.FIXEDVALUE, a[1])});
+}
+
 /**
  * object representing a placeholder
  * 
diff --git a/process/RebuildAllDuplicateCaches_serverProcess/process.js b/process/RebuildAllDuplicateCaches_serverProcess/process.js
deleted file mode 100644
index b08a0abf9efa74df1e609510b0cd09d63a06d1bf..0000000000000000000000000000000000000000
--- a/process/RebuildAllDuplicateCaches_serverProcess/process.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import("system.logging");
-import("DuplicateScanner_lib");
-
-/* 
- * Serverprocess to reload duplicates
- * 
- * Step #1:
- * All Clusters for the specified targetEntity are deleted. 
- * Relations between records marked as unrelated are not deleted at this time
- * 
- * Step #2
- * The duplicates cache gets rebuilt
- * 
- * Step #3:
- * All unrelated relations between duplicate ids hold their respective cluster id.
- * If the same combination of duplicate ids exists in the duplicate cache after the rebuild,
- * it is assumed that those records remain duplicates. 
- * Therefore the saved clusterId gets refreshed with the newly created clusters id.
- * 
- * Relations between unrelated duplicates are deleted, if no cluster contains the same combination of duplicate ids 
- */
-
-// Build Person duplicate cache
-
-var filterName = "PersonDuplicates";
-var targetEntity = "Person_entity";
-var recordBlockSize = DuplicateScannerUtils.getBlockSize();
-
-logging.log(filterName + ": Delete duplicates -> ");
-DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-
-logging.log(filterName + ": Recalculate duplicates -> ");
-DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
-
-logging.log(filterName + ": Refresh unrelated duplicates -> ");
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-logging.log(filterName + ": Done rebuilding ");
-
-
-// Build Organisation duplicate cache
-
-filterName = "OrganisationDuplicates";
-targetEntity = "Organisation_entity";
-
-logging.log(filterName + ": Delete duplicates -> ");
-DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-
-logging.log(filterName + ": Recalculate duplicates -> ");
-DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
-
-logging.log(filterName + ": Refresh unrelated duplicates -> ");
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-logging.log(filterName + ": Done rebuilding ");
\ No newline at end of file
diff --git a/process/RebuildDuplicatesCache_serverProcess/process.js b/process/RebuildDuplicatesCache_serverProcess/process.js
deleted file mode 100644
index 1e7f532f75a8b4a36d1c06de9cc4503bf6f74c62..0000000000000000000000000000000000000000
--- a/process/RebuildDuplicatesCache_serverProcess/process.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import("system.logging");
-import("system.vars");
-import("DuplicateScanner_lib");
-
-/* 
- * Serverprocess to reload duplicates
- * 
- * Step #1:
- * All Clusters for the specified targetEntity are deleted. 
- * Relations between records marked as unrelated are not deleted at this time
- * 
- * Step #2
- * The duplicates cache gets rebuilt
- * 
- * Step #3:
- * All unrelated relations between duplicate ids hold their respective cluster id.
- * If the same combination of duplicate ids exists in the duplicate cache after the rebuild,
- * it is assumed that those records remain duplicates. 
- * Therefore the saved clusterId gets refreshed with the newly created clusters id.
- * 
- * Relations between unrelated duplicates are deleted, if no cluster contains the same combination of duplicate ids 
- */
-
-// Build Person duplicate cache
-
-var filterName = vars.get("$local.filterName");
-var targetEntity = vars.get("$local.targetEntity");
-var recordBlockSize = DuplicateScannerUtils.getBlockSize();
-
-logging.log(filterName + ": Delete duplicates -> ");
-DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
-
-logging.log(filterName + ": Recalculate duplicates -> ");
-DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
-
-logging.log(filterName + ": Refresh unrelated duplicates -> ");
-DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
-
-logging.log(filterName + ": Done rebuilding ");
-
diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js
index 0b58dff6eea514bc1812af026c4d1a0772b811fc..057749c13b05b09b9490f97b010d0bdb36178cb3 100644
--- a/process/Salesproject_lib/process.js
+++ b/process/Salesproject_lib/process.js
@@ -84,7 +84,9 @@ Salesproject.insertMilestone = function(salesprojectId, type, value, notifyForec
  */
 Salesproject.notifyToUpdateForecast = function() {
     if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
-        question.showMessage(translate.text("Please update the ${FORECAST_ENGLISH}."), question.INFORMATION, translate.text("${FORECAST_ENGLISH}"));
+    {
+        // TODO: workflows
+    }
 }
 
 /**
diff --git a/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ded82a9d7a27ef0c55d1456a27778be078d51da5
--- /dev/null
+++ b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>SetCommunicationSetting_workflowService</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/SetCommunicationSetting_workflowService/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>WORKFLOW</element>
+  </variants>
+</process>
diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..8aa215483ef3c55f38b6b7eee051a878790e5a7e
--- /dev/null
+++ b/process/SetCommunicationSetting_workflowService/process.js
@@ -0,0 +1,43 @@
+import("system.util");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+import("system.vars");
+
+var variables = JSON.parse(vars.get("$local.value"));
+var contactId = variables.contactId || variables.targetId;
+var channelType = variables.channelType;
+var channelId = variables.channelId;
+var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected();
+
+var settingsId = newSelect("COMMUNICATIONSETTINGSID")
+    .from("COMMUNICATIONSETTINGS")
+    .where("COMMUNICATIONSETTINGS.CONTACT_ID", contactId)
+    .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", channelType)
+    .and("COMMUNICATIONSETTINGS.CHANNEL_ID", channelId)
+    .cell();
+    
+if (settingsId)
+{
+    newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID")
+        .updateFields({"STATUS": status});
+}
+else
+{
+    settingsId = util.getNewUUID();
+    new SqlBuilder()
+        .tableName("COMMUNICATIONSETTINGS")
+        .insertFields({
+            "COMMUNICATIONSETTINGSID": settingsId,
+            "CHANNEL_TYPE": channelType,
+            "CHANNEL_ID": channelId,
+            "MEDIUM": medium,
+            "STATUS": status
+        });
+    new SqlBuilder()
+        .tableName("COMMUNICATIONLEGALBASE")
+        .insertFields({
+            "COMMUNICATIONLEGALBASEID": util.getNewUUID(),
+            "COMMUNICATIONSETTINGS_ID": settingsId,
+            "VERSION": 1
+        });
+}
\ No newline at end of file
diff --git a/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod b/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b86df5e7047ab1a0cc534a1f4dfbad242e2d94a7
--- /dev/null
+++ b/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>SetInterestLink_workflowService</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/SetInterestLink_workflowService/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>WORKFLOW</element>
+  </variants>
+</process>
diff --git a/process/SetInterestLink_workflowService/process.js b/process/SetInterestLink_workflowService/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a6447a1a3ecfafc87bf0ab271a52683c138bf81
--- /dev/null
+++ b/process/SetInterestLink_workflowService/process.js
@@ -0,0 +1,34 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.util");
+import("Sql_lib");
+
+var variables = JSON.parse(vars.get("$local.value"));
+var contactId = variables.contactId || variables.targetId;
+var interestId = variables.interestId;
+var status = variables.status || $KeywordRegistry.interestLinkStatus$notSubscribed();
+
+var interestLinkId = new SqlBuilder()
+    .select("INTERESTLINKID")
+    .from("INTERESTLINK")
+    .where("INTERESTLINK.CONTACT_ID", contactId)
+    .and("INTERESTLINK.INTEREST_ID", interestId)
+    .and("INTERESTLINK.STATUS", status)
+    .cell();
+
+if (interestLinkId)
+{
+    newWhere("INTERESTLINK.INTERESTLINKID", interestLinkId)
+        .updateFields({"STATUS": status});
+}
+else
+{
+    new SqlBuilder()
+        .tableName("INTERESTLINK")
+        .insertFields({
+            "INTERESTLINKID": util.getNewUUID(),
+            "INTEREST_ID": interestId,
+            "CONTACT_ID": contactId,
+            "STATUS": status
+        });
+}
\ No newline at end of file
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index f3708067a34ad01930d3ade922c9520011e1bb91..383117664ccc7b40a93923d2a82b7694222b9d79 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -1017,6 +1017,22 @@ SqlBuilder.prototype.selectDistinct = function (pFields)
     return this;
 }
 
+/**
+ * Sets the select clause to "select count(...)"
+ * @param {String} [pField=*]   sql column to count, if omitted "count(*)" will be used
+ * @return {SqlBuilder} current SqlBuilder object
+ */
+SqlBuilder.prototype.selectCount = function (pField)
+{
+    if (pField == undefined)
+    {
+        pField = "*";
+    }
+    this._select = SqlBuilder._getStatement(pField, "select count(", ")", true, true);
+    return this;
+}
+
+
 /**
  * sets an alias-name which is added at some places if this SqlBuilder is used as subselect (e.g. in .select(), .join(), .from(), ...)
  * @param {String} pSubselectAlias
@@ -1416,7 +1432,7 @@ SqlBuilder.prototype._whereSubquery = function(pSubquery, pMandatory, pCondition
         if (!pCondition)
             throw SqlBuilder._ERROR_NO_CONDITION();
         
-        if (subQuery.isFullSelect())
+        if (subQuery.isFullSelect() || subQuery.hasCondition()) //can also be only an condition if SqlBuilder.NOT() is used
         {
             var preparedObj = subQuery.build();
             pAddPreparedConditionCallback(this, this._prepare(undefined, preparedObj, pCondition));
@@ -1688,6 +1704,19 @@ SqlBuilder.prototype._or = function(pFieldOrCond, pValue, pMandatory, pCondition
     });
 }
 
+/**
+ * Constant-like function which provides a value for pCondition if you need a "not" statement.
+ * 
+ * @return {String} 
+ * 
+ * @example
+ * var cond = newWhere(null, someCondition, SqlBuilder.NOT())
+ */
+SqlBuilder.NOT = function()
+{
+    return "not ?";
+}
+
 /**
  * Constant-like function which provides a value for pCondition if you need a "not in" statement.
  * 
@@ -4628,4 +4657,33 @@ SqlUtils.escapeVars = function (pValue)
     if (typeof(pValue) == "string" && pValue.charAt(0) == "$")
         return "$" + pValue;
     return pValue;
-}
\ No newline at end of file
+}
+
+SqlUtils.getSqlConditionalOperator = function(pOperator)
+{
+    switch(parseInt(pOperator))
+    {
+        case 1:
+            return SqlBuilder.EQUAL();
+        case 2:
+            return SqlBuilder.NOT_EQUAL();
+        
+        case 4:
+            return SqlBuilder.LESS();
+        case 5:
+            return SqlBuilder.LESS_OR_EQUAL();
+            
+        case 3:
+            return SqlBuilder.GREATER();
+        case 6:
+            return SqlBuilder.GREATER_OR_EQUAL();
+            
+        case 11:
+            return "# is not null";
+        case 12:
+            return "# is null";
+            
+        default:
+            throw new Error("Unsupported operator " + pOperator);
+    }
+}
diff --git a/process/UserAgentParser_lib/UserAgentParser_lib.aod b/process/UserAgentParser_lib/UserAgentParser_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3af7739cd1371f4f262239bef668c0e0d982084a
--- /dev/null
+++ b/process/UserAgentParser_lib/UserAgentParser_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>UserAgentParser_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/UserAgentParser_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/UserAgentParser_lib/process.js b/process/UserAgentParser_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..c65f44d00d5c83eee785dab469f6593ac3861262
--- /dev/null
+++ b/process/UserAgentParser_lib/process.js
@@ -0,0 +1,852 @@
+/*!@license
+ * UAParser.js v0.7.26
+ * Lightweight JavaScript-based User-Agent string parser
+ * https://github.com/faisalman/ua-parser-js
+ *
+ * Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
+ * Licensed under MIT License
+ */
+
+
+
+//////////////
+// Constants
+/////////////
+
+
+var LIBVERSION  = '0.7.26',
+EMPTY       = '',
+UNKNOWN     = '?',
+FUNC_TYPE   = 'function',
+UNDEF_TYPE  = 'undefined',
+OBJ_TYPE    = 'object',
+STR_TYPE    = 'string',
+MAJOR       = 'major', // deprecated
+MODEL       = 'model',
+NAME        = 'name',
+TYPE        = 'type',
+VENDOR      = 'vendor',
+VERSION     = 'version',
+ARCHITECTURE= 'architecture',
+CONSOLE     = 'console',
+MOBILE      = 'mobile',
+TABLET      = 'tablet',
+SMARTTV     = 'smarttv',
+WEARABLE    = 'wearable',
+EMBEDDED    = 'embedded',
+UA_MAX_LENGTH = 255;
+
+
+///////////
+// Helper
+//////////
+
+
+var UserAgentParser_util = {
+    extend : function (regexes, extensions) {
+        var mergedRegexes = {};
+        for (var i in regexes) {
+            if (extensions[i] && extensions[i].length % 2 === 0) {
+                mergedRegexes[i] = extensions[i].concat(regexes[i]);
+            } else {
+                mergedRegexes[i] = regexes[i];
+            }
+        }
+        return mergedRegexes;
+    },
+    has : function (str1, str2) {
+        return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;
+    },
+    lowerize : function (str) {
+        return str.toLowerCase();
+    },
+    major : function (version) {
+        return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined;
+    },
+    trim : function (str, len) {
+        str = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+        return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
+    }
+};
+
+
+///////////////
+// Map helper
+//////////////
+
+
+var mapper = {
+
+    rgx : function (ua, arrays) {
+
+        var i = 0, j, k, p, q, matches, match;
+
+        // loop through all regexes maps
+        while (i < arrays.length && !matches) {
+
+            var regex = arrays[i],       // even sequence (0,2,4,..)
+            props = arrays[i + 1];   // odd sequence (1,3,5,..)
+            j = k = 0;
+
+            // try matching uastring with regexes
+            while (j < regex.length && !matches) {
+
+                matches = regex[j++].exec(ua);
+
+                if (!!matches) {
+                    for (p = 0; p < props.length; p++) {
+                        match = matches[++k];
+                        q = props[p];
+                        // check if given property is actually array
+                        if (typeof q === OBJ_TYPE && q.length > 0) {
+                            if (q.length == 2) {
+                                if (typeof q[1] == FUNC_TYPE) {
+                                    // assign modified match
+                                    this[q[0]] = q[1].call(this, match);
+                                } else {
+                                    // assign given value, ignore regex match
+                                    this[q[0]] = q[1];
+                                }
+                            } else if (q.length == 3) {
+                                // check whether function or regex
+                                if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
+                                    // call function (usually string mapper)
+                                    this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
+                                } else {
+                                    // sanitize match using given regex
+                                    this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
+                                }
+                            } else if (q.length == 4) {
+                                this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
+                            }
+                        } else {
+                            this[q] = match ? match : undefined;
+                        }
+                    }
+                }
+            }
+            i += 2;
+        }
+    },
+
+    str : function (str, map) {
+
+        for (var i in map) {
+            // check if array
+            if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
+                for (var j = 0; j < map[i].length; j++) {
+                    if (UserAgentParser_util.has(map[i][j], str)) {
+                        return (i === UNKNOWN) ? undefined : i;
+                    }
+                }
+            } else if (UserAgentParser_util.has(map[i], str)) {
+                return (i === UNKNOWN) ? undefined : i;
+            }
+        }
+        return str;
+    }
+};
+
+
+///////////////
+// String map
+//////////////
+
+
+var maps = {
+
+    browser : {
+        // Safari < 3.0
+        oldSafari : {
+            version : {
+                '1.0'   : '/8',
+                '1.2'   : '/1',
+                '1.3'   : '/3',
+                '2.0'   : '/412',
+                '2.0.2' : '/416',
+                '2.0.3' : '/417',
+                '2.0.4' : '/419',
+                '?'     : '/'
+            }
+        },
+        oldEdge : {
+            version : {
+                '0.1'   : '12.',
+                '21'    : '13.',
+                '31'    : '14.',
+                '39'    : '15.',
+                '41'    : '16.',
+                '42'    : '17.',
+                '44'    : '18.'
+            }
+        }
+    },
+
+    os : {
+        windows : {
+            version : {
+                'ME'        : '4.90',
+                'NT 3.11'   : 'NT3.51',
+                'NT 4.0'    : 'NT4.0',
+                '2000'      : 'NT 5.0',
+                'XP'        : ['NT 5.1', 'NT 5.2'],
+                'Vista'     : 'NT 6.0',
+                '7'         : 'NT 6.1',
+                '8'         : 'NT 6.2',
+                '8.1'       : 'NT 6.3',
+                '10'        : ['NT 6.4', 'NT 10.0'],
+                'RT'        : 'ARM'
+            }
+        }
+    }
+};
+
+
+//////////////
+// Regex map
+/////////////
+
+
+var regexes = {
+
+    browser : [[
+
+    /\b(?:crmo|crios)\/([\w\.]+)/i                                      // Chrome for Android/iOS
+    ], [VERSION, [NAME, 'Chrome']], [
+    /(?:edgios|edga|edg)\/([\w\.]+)/i                                   // Microsoft Edge
+    ], [VERSION, [NAME, 'Edge']], [
+    /edge\/([\w\.]+)/i                                                  // Old Edge (Trident)
+    ], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [
+
+    // Presto based
+    /(opera\smini)\/([\w\.-]+)/i,                                       // Opera Mini
+    /(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i,                // Opera Mobi/Tablet
+    /(opera).+version\/([\w\.]+)/i,                                     // Opera > 9.80
+    /(opera)[\/\s]+([\w\.]+)/i                                          // Opera < 9.80
+    ], [NAME, VERSION], [
+    /opios[\/\s]+([\w\.]+)/i                                            // Opera mini on iphone >= 8.0
+    ], [VERSION, [NAME, 'Opera Mini']], [
+    /\sopr\/([\w\.]+)/i                                                 // Opera Webkit
+    ], [VERSION, [NAME, 'Opera']], [
+
+    // Mixed
+    /(kindle)\/([\w\.]+)/i,                                             // Kindle
+    /(lunascape|maxthon|netfront|jasmine|blazer|instagram)[\/\s]?([\w\.]*)/i,  // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Instagram
+    // Trident based
+    /(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,             // Avant/IEMobile/SlimBrowser
+    /(ba?idubrowser)[\/\s]?([\w\.]+)/i,                                 // Baidu Browser
+    /(?:ms|\()(ie)\s([\w\.]+)/i,                                        // Internet Explorer
+
+    // Webkit/KHTML based
+    /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,
+    // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
+    /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i,         // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
+    /(weibo)__([\d\.]+)/i                                               // Weibo
+    ], [NAME, VERSION], [
+    /(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i           // UCBrowser
+    ], [VERSION, [NAME, 'UCBrowser']], [
+    /(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i      // WeChat Desktop for Windows Built-in Browser
+    ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
+    /micromessenger\/([\w\.]+)/i                                        // WeChat
+    ], [VERSION, [NAME, 'WeChat']], [
+    /konqueror\/([\w\.]+)/i                                             // Konqueror
+    ], [VERSION, [NAME, 'Konqueror']], [
+    /trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i                     // IE11
+    ], [VERSION, [NAME, 'IE']], [
+    /yabrowser\/([\w\.]+)/i                                             // Yandex
+    ], [VERSION, [NAME, 'Yandex']], [
+    /(avast|avg)\/([\w\.]+)/i                                           // Avast/AVG Secure Browser
+    ], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [
+    /focus\/([\w\.]+)/i                                                 // Firefox Focus
+    ], [VERSION, [NAME, 'Firefox Focus']], [
+    /opt\/([\w\.]+)/i                                                   // Opera Touch
+    ], [VERSION, [NAME, 'Opera Touch']], [
+    /coc_coc_browser\/([\w\.]+)/i                                       // Coc Coc Browser
+    ], [VERSION, [NAME, 'Coc Coc']], [
+    /dolfin\/([\w\.]+)/i                                                // Dolphin
+    ], [VERSION, [NAME, 'Dolphin']], [
+    /coast\/([\w\.]+)/i                                                 // Opera Coast
+    ], [VERSION, [NAME, 'Opera Coast']],
+    [/xiaomi\/miuibrowser\/([\w\.]+)/i                                  // MIUI Browser
+    ], [VERSION, [NAME, 'MIUI Browser']], [
+    /fxios\/([\w\.-]+)/i                                                // Firefox for iOS
+    ], [VERSION, [NAME, 'Firefox']], [
+    /(qihu|qhbrowser|qihoobrowser|360browser)/i                         // 360
+    ], [[NAME, '360 Browser']], [
+    /(oculus|samsung|sailfish)browser\/([\w\.]+)/i
+    ], [[NAME, /(.+)/, '$1 Browser'], VERSION], [                       // Oculus/Samsung/Sailfish Browser
+    /(comodo_dragon)\/([\w\.]+)/i                                       // Comodo Dragon
+    ], [[NAME, /_/g, ' '], VERSION], [
+    /m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i           // QQBrowser/Baidu App/2345 Browser
+    ], [NAME, VERSION], [
+    /(MetaSr)[\/\s]?([\w\.]+)/i,                                        // SouGouBrowser
+    /(LBBROWSER)/i                                                      // LieBao Browser
+    ], [NAME], [
+
+    // WebView
+    /;fbav\/([\w\.]+);/i                                                // Facebook App for iOS & Android with version
+    ], [VERSION, [NAME, 'Facebook']], [            
+    /FBAN\/FBIOS|FB_IAB\/FB4A/i                                         // Facebook App for iOS & Android without version
+    ], [[NAME, 'Facebook']], [
+    /\s(electron)\/([\w\.]+)\ssafari/i,                                 // Electron-based App
+    /safari\s(line)\/([\w\.]+)/i,                                       // Line App for iOS
+    /\b(line)\/([\w\.]+)\/iab/i                                         // Line App for Android
+    ], [NAME, VERSION], [
+    /\bgsa\/([\w\.]+)\s.*safari\//i                                     // Google Search Appliance on iOS
+    ], [VERSION, [NAME, 'GSA']], [
+
+    /headlesschrome(?:\/([\w\.]+)|\s)/i                                 // Chrome Headless
+    ], [VERSION, [NAME, 'Chrome Headless']], [
+
+    /\swv\).+(chrome)\/([\w\.]+)/i                                      // Chrome WebView
+    ], [[NAME, 'Chrome WebView'], VERSION], [
+
+    /droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i         // Android Browser
+    ], [VERSION, [NAME, 'Android Browser']], [
+
+    /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i      // Chrome/OmniWeb/Arora/Tizen/Nokia
+    ], [NAME, VERSION], [
+
+    /version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i                      // Mobile Safari
+    ], [VERSION, [NAME, 'Mobile Safari']], [
+    /version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i                   // Safari & Safari Mobile
+    ], [VERSION, NAME], [
+    /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i                     // Safari < 3.0
+    ], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [
+
+    /(webkit|khtml)\/([\w\.]+)/i
+    ], [NAME, VERSION], [
+
+    // Gecko based
+    /(navigator|netscape)\/([\w\.-]+)/i                                 // Netscape
+    ], [[NAME, 'Netscape'], VERSION], [
+    /(swiftfox)/i,                                                      // Swiftfox
+    /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
+    // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
+    /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
+    // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
+    /(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i,                       // Other Firefox-based
+    /(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i,                        // Mozilla
+
+    // Other
+    /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
+    // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
+    /(links)\s\(([\w\.]+)/i,                                            // Links
+    /(gobrowser)\/?([\w\.]*)/i,                                         // GoBrowser
+    /(ice\s?browser)\/v?([\w\._]+)/i,                                   // ICE Browser
+    /(mosaic)[\/\s]([\w\.]+)/i                                          // Mosaic
+    ], [NAME, VERSION]
+    ],
+
+    cpu : [[
+
+    /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i                     // AMD64 (x64)
+    ], [[ARCHITECTURE, 'amd64']], [
+
+    /(ia32(?=;))/i                                                      // IA32 (quicktime)
+    ], [[ARCHITECTURE, UserAgentParser_util.lowerize]], [
+
+    /((?:i[346]|x)86)[;\)]/i                                            // IA32 (x86)
+    ], [[ARCHITECTURE, 'ia32']], [
+
+    /\b(aarch64|armv?8e?l?)\b/i                                         // ARM64
+    ], [[ARCHITECTURE, 'arm64']], [
+
+    /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i                                   // ARMHF
+    ], [[ARCHITECTURE, 'armhf']], [
+
+    // PocketPC mistakenly identified as PowerPC
+    /windows\s(ce|mobile);\sppc;/i
+    ], [[ARCHITECTURE, 'arm']], [
+
+    /((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i                           // PowerPC
+    ], [[ARCHITECTURE, /ower/, '', UserAgentParser_util.lowerize]], [
+
+    /(sun4\w)[;\)]/i                                                    // SPARC
+    ], [[ARCHITECTURE, 'sparc']], [
+
+    /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
+    // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
+    ], [[ARCHITECTURE, UserAgentParser_util.lowerize]]
+    ],
+
+    device : [[
+            
+    //////////////////////
+    // MOBILES & TABLETS
+    /////////////////////
+            
+    // Samsung
+    /\b(sch-i[89]0\d|shw-m380s|sm-p(?:605|610|587)|sm-t\w+|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus\s10)/i,
+    ], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [
+    /(s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+)/i,
+    /\ssamsung[\s-]([\w-]+)/i,
+    /sec-(sgh\w+)/i
+    ], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
+
+    // Apple
+    /\((ip(?:hone|od)[\s\w]*);/i                                        // iPod/iPhone
+    ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
+    /\((ipad);[\w\s\),;-]+(apple)/i                                     // iPad
+    ], [MODEL, VENDOR, [TYPE, TABLET]], [
+    /applecoremedia\/[\w\.]+\s\((ipad)/i
+    ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
+
+    // Huawei
+    /d\/huawei([\w\s-]+)[;\)]/i,
+    /\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,
+    /\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i
+    ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
+    /\b(bah2?-a?[lw]\d{2})/i                                            // Huawei MediaPad
+    ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
+
+    // Xiaomi
+    /\b(poco[\s\w]+)(?:\sbuild|\))/i,                                                 // Xiaomi POCO
+    /\b;\s(\w+)\s+build\/hm\1/i,                                        // Xiaomi Hongmi 'numeric' models
+    /\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i,                       // Xiaomi Hongmi
+    /\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i,              // Xiaomi Redmi
+    /\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i  // Xiaomi Mi
+    ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
+    /\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i                  // Mi Pad tablets
+    ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
+
+    // OPPO
+    /;\s(\w+)\sbuild.+\soppo/i,
+    /\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i
+    ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
+
+    // Vivo
+    /\svivo\s(\w+)(?:\sbuild|\))/i,
+    /\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i
+    ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
+            
+    // Realme
+    /\s(rmx[12]\d{3})(?:\sbuild|;)/i
+    ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
+
+    // Motorola
+    /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,
+    /\smot[\s-](\w*)/i,
+    /(moto[\s\w\(\)]+(?=\sbuild|\)))/i,
+    /(xt\d{3,4})\sbuild\//i,
+    /(nexus\s6)/i
+    ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
+    /\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
+    ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
+
+    // LG
+    /((?=lg)?[vl]k\-?\d{3})\s+build|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
+    ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
+    /(nexus\s[45])/i,
+    /lg[e;\s\/-]+((?!browser|netcast)\w+)/i,
+    /\blg(\-?[\d\w]+)\s+build/i
+    ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
+
+    // Lenovo
+    /(ideatab[\w\-\s]+)/i,
+    /lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|[\w-]+)/i        // Lenovo tablets
+    ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
+
+    // Nokia
+    /(?:maemo|nokia).*(n900|lumia\s\d+)/i,
+    /nokia[\s_-]?([\w\.-]*)/i
+    ], [MODEL, [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
+
+    // Google
+    /droid.+;\s(pixel\sc)[\s)]/i                                        // Google Pixel C
+    ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
+    /droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i                    // Google Pixel
+    ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
+
+    // Sony
+    /droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
+    ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
+    /sony\stablet\s[ps]\sbuild\//i,
+    /(?:sony)?sgp\w+(?:\sbuild\/|\))/i
+    ], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
+
+    // OnePlus
+    /\s(kb2005|in20[12]5|be20[12][59])\b/i,
+    /\ba000(1)\s+build/i,                                               // OnePlus
+    /\boneplus\s(a\d{4})[\s)]/i
+    ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
+
+    // Amazon
+    /(alexa)webm/i,
+    /(kf[a-z]+)(\sbuild\/|\)).+silk\//i                                 // Kindle Fire HD
+    ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
+    /(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i                    // Fire Phone
+    ], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
+
+    // BlackBerry
+    /\((playbook);[\w\s\),;-]+(rim)/i                                   // BlackBerry PlayBook
+    ], [MODEL, VENDOR, [TYPE, TABLET]], [
+    /\(bb10;\s(\w+)/i                                                   // BlackBerry 10
+    ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
+            
+    // Asus
+    /\b(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00c)/i
+    ], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [
+    /\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i
+    ], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [
+
+    // HTC
+    /(nexus\s9)/i                                                       // HTC Nexus 9
+    ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
+    /(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i,                    // HTC
+
+    // ZTE
+    /(zte)-(\w*)/i,
+    /(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
+    ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
+
+    // Acer
+    /droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i
+    ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
+
+    // Meizu
+    /droid.+;\s(m[1-5]\snote)\sbuild/i,
+    /\bmz-([\w-]{2,})/i
+    ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
+
+    // MIXED
+    /(blackberry)[\s-]?(\w+)/i,                                         // BlackBerry
+    /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
+    // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
+    /(hp)\s([\w\s]+\w)/i,                                               // HP iPAQ
+    /(asus)-?(\w+)/i,                                                   // Asus
+    /(microsoft);\s(lumia[\s\w]+)/i,                                    // Microsoft Lumia
+    /(lenovo)[_\s-]?([\w-]+)/i,                                         // Lenovo
+    /linux;.+(jolla);/i,                                                // Jolla
+    /droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i                              // OPPO
+    ], [VENDOR, MODEL, [TYPE, MOBILE]], [
+
+    /(archos)\s(gamepad2?)/i,                                           // Archos
+    /(hp).+(touchpad)/i,                                                // HP TouchPad
+    /(hp).+(tablet)/i,                                                  // HP Tablet
+    /(kindle)\/([\w\.]+)/i,                                             // Kindle
+    /\s(nook)[\w\s]+build\/(\w+)/i,                                     // Nook
+    /(dell)\s(strea[kpr\s\d]*[\dko])/i,                                 // Dell Streak
+    /[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i,                   // Le Pan Tablets
+    /[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i,                         // Trinity Tablets
+    /\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i,                             // Gigaset Tablets
+    /\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i                            // Vodafone
+    ], [VENDOR, MODEL, [TYPE, TABLET]], [
+
+    /\s(surface\sduo)\s/i                                               // Surface Duo
+    ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [
+    /\s(u304aa)\sbuild/i                                                // AT&T
+    ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
+    /sie-(\w*)/i                                                        // Siemens
+    ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
+    /[;\/]\s?(rct\w+)\sbuild/i                                          // RCA Tablets
+    ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
+    /[;\/\s](venue[\d\s]{2,7})\sbuild/i                                 // Dell Venue Tablets
+    ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
+    /[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i                                   // Verizon Tablet
+    ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
+    /[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i          // Barnes & Noble Tablet
+    ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
+    /[;\/]\s(tm\d{3}\w+)\sbuild/i
+    ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
+    /;\s(k88)\sbuild/i                                                  // ZTE K Series Tablet
+    ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
+    /;\s(nx\d{3}j)\sbuild/i                                             // ZTE Nubia
+    ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
+    /[;\/]\s?(gen\d{3})\sbuild.*49h/i                                   // Swiss GEN Mobile
+    ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
+    /[;\/]\s?(zur\d{3})\sbuild/i                                        // Swiss ZUR Tablet
+    ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
+    /[;\/]\s?((zeki)?tb.*\b)\sbuild/i                                   // Zeki Tablets
+    ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
+    /[;\/]\s([yr]\d{2})\sbuild/i,
+    /[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i                   // Dragon Touch Tablet
+    ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
+    /[;\/]\s?(ns-?\w{0,9})\sbuild/i                                     // Insignia Tablets
+    ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
+    /[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i                             // NextBook Tablets
+    ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
+    /[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i
+    ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [                    // Voice Xtreme Phones
+    /[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i                                // LvTel Phones
+    ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
+    /;\s(ph-1)\s/i
+    ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [                // Essential PH-1
+    /[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i                    // Envizen Tablets
+    ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
+    /[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i                                 // MachSpeed Tablets
+    ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
+    /[;\/]\s?tu_(1491)\sbuild/i                                         // Rotor Tablets
+    ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
+    /(shield[\w\s]+)\sbuild/i                                           // Nvidia Shield Tablets
+    ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
+    /(sprint)\s(\w+)/i                                                  // Sprint Phones
+    ], [VENDOR, MODEL, [TYPE, MOBILE]], [
+    /(kin\.[onetw]{3})/i                                                // Microsoft Kin
+    ], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
+    /droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i     // Zebra
+    ], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [
+    /droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i
+    ], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [
+
+    ///////////////////
+    // CONSOLES
+    ///////////////////
+
+    /\s(ouya)\s/i,                                                      // Ouya
+    /(nintendo)\s([wids3utch]+)/i                                       // Nintendo
+    ], [VENDOR, MODEL, [TYPE, CONSOLE]], [
+    /droid.+;\s(shield)\sbuild/i                                        // Nvidia
+    ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
+    /(playstation\s[345portablevi]+)/i                                  // Playstation
+    ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
+    /[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i                        // Microsoft Xbox
+    ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [
+
+    ///////////////////
+    // SMARTTVS
+    ///////////////////
+
+    /smart-tv.+(samsung)/i                                              // Samsung
+    ], [VENDOR, [TYPE, SMARTTV], MODEL], [
+    /hbbtv.+maple;(\d+)/i
+    ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
+    /linux;\snetcast.+smarttv/i,                                        // LG SmartTV
+    /lg\snetcast\.tv-201\d/i
+    ], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
+    /(apple)\s?tv/i                                                     // Apple TV
+    ], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [
+    /crkey/i                                                            // Google Chromecast
+    ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
+    /droid.+aft([\w])(\sbuild\/|\))/i                                   // Fire TV
+    ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
+    /\(dtv[\);].+(aquos)/i                                              // Sharp
+    ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
+    /hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i            // HbbTV devices
+    ], [[VENDOR, UserAgentParser_util.trim], [MODEL, UserAgentParser_util.trim], [TYPE, SMARTTV]], [
+    /[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i                 // SmartTV from Unidentified Vendors
+    ], [[TYPE, SMARTTV]], [
+
+    ///////////////////
+    // WEARABLES
+    ///////////////////
+
+    /((pebble))app\/[\d\.]+\s/i                                         // Pebble
+    ], [VENDOR, MODEL, [TYPE, WEARABLE]], [
+    /droid.+;\s(glass)\s\d/i                                            // Google Glass
+    ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
+    /droid\s[\d\.]+;\s(wt63?0{2,3})\)/i
+    ], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [
+
+    ////////////////////
+    // MIXED (GENERIC)
+    ///////////////////
+
+    /droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i    // Android Phones from Unidentified Vendors
+    ], [MODEL, [TYPE, MOBILE]], [
+    /droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i  // Android Tablets from Unidentified Vendors
+    ], [MODEL, [TYPE, TABLET]], [
+    /\s(tablet|tab)[;\/]/i,                                             // Unidentifiable Tablet
+    /\s(mobile)(?:[;\/]|\ssafari)/i                                     // Unidentifiable Mobile
+    ], [[TYPE, UserAgentParser_util.lowerize]], [
+    /(android[\w\.\s\-]{0,9});.+build/i                                 // Generic Android Device
+    ], [MODEL, [VENDOR, 'Generic']], [
+    /(phone)/i
+    ], [[TYPE, MOBILE]]
+    ],
+
+    engine : [[
+
+    /windows.+\sedge\/([\w\.]+)/i                                       // EdgeHTML
+    ], [VERSION, [NAME, 'EdgeHTML']], [
+
+    /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i                         // Blink
+    ], [VERSION, [NAME, 'Blink']], [
+
+    /(presto)\/([\w\.]+)/i,                                             // Presto
+    /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
+    // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
+    /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,                          // KHTML/Tasman/Links
+    /(icab)[\/\s]([23]\.[\d\.]+)/i                                      // iCab
+    ], [NAME, VERSION], [
+
+    /rv\:([\w\.]{1,9})\b.+(gecko)/i                                     // Gecko
+    ], [VERSION, NAME]
+    ],
+
+    os : [[
+
+    // Windows
+    /microsoft\s(windows)\s(vista|xp)/i                                 // Windows (iTunes)
+    ], [NAME, VERSION], [
+    /(windows)\snt\s6\.2;\s(arm)/i,                                     // Windows RT
+    /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i,                   // Windows Phone
+    /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i
+    ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
+    /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
+    ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
+
+    // iOS/macOS
+    /ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i,          // iOS
+    /cfnetwork\/.+darwin/i
+    ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
+    /(mac\sos\sx)\s?([\w\s\.]*)/i,
+    /(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i                         // Mac OS
+    ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
+
+    // Mobile OSes
+    /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,
+    // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
+    /(blackberry)\w*\/([\w\.]*)/i,                                      // Blackberry
+    /(tizen|kaios)[\/\s]([\w\.]+)/i                                     // Tizen/KaiOS
+    ], [NAME, VERSION], [
+    /\(bb(10);/i                                                        // BlackBerry 10
+    ], [VERSION, [NAME, 'BlackBerry']], [
+    /(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i       // Symbian
+    ], [VERSION, [NAME, 'Symbian']], [
+    /\((series40);/i                                                    // Series 40
+    ], [NAME], [
+    /mozilla.+\(mobile;.+gecko.+firefox/i                               // Firefox OS
+    ], [[NAME, 'Firefox OS']], [
+    /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i                              // WebOS
+    ], [VERSION, [NAME, 'webOS']], [
+
+    // Google Chromecast
+    /crkey\/([\d\.]+)/i                                                 // Google Chromecast
+    ], [VERSION, [NAME, 'Chromecast']], [
+
+    // Console
+    /(nintendo|playstation)\s([wids345portablevuch]+)/i,                // Nintendo/Playstation
+    /(xbox);\s+xbox\s([^\);]+)/i,                                       // Microsoft Xbox (360, One, X, S, Series X, Series S)
+
+    // GNU/Linux based
+    /(mint)[\/\s\(\)]?(\w*)/i,                                          // Mint
+    /(mageia|vectorlinux)[;\s]/i,                                       // Mageia/VectorLinux
+    /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,
+    // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
+    // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
+    /(hurd|linux)\s?([\w\.]*)/i,                                        // Hurd/Linux
+    /(gnu)\s?([\w\.]*)/i                                                // GNU
+    ], [NAME, VERSION], [
+
+    /(cros)\s[\w]+\s([\w\.]+\w)/i                                       // Chromium OS
+    ], [[NAME, 'Chromium OS'], VERSION],[
+
+    // Solaris
+    /(sunos)\s?([\w\.\d]*)/i                                            // Solaris
+    ], [[NAME, 'Solaris'], VERSION], [
+
+    // BSD based
+    /\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i                    // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
+    ], [NAME, VERSION],[
+
+    /(haiku)\s(\w+)/i                                                   // Haiku
+    ], [NAME, VERSION],[
+
+    // Other
+    /((?:open)?solaris)[\/\s-]?([\w\.]*)/i,                             // Solaris
+    /(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i,                                // AIX
+    /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
+    // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
+    /(unix)\s?([\w\.]*)/i                                               // UNIX
+    ], [NAME, VERSION]
+    ]
+};
+
+/*Slightly Modified Version of https://github.com/faisalman/ua-parser-js 
+ *(removed all the window code used in browsers, renamed util)
+ *
+ *Constructor for an UserAgentParser to get Information about used device/os/browser
+ *
+ *@param {String} ua                The User Agent part of the http header
+ *
+ *@param {object} extensions        Optional Parameter for your own custom detections. 
+ *                                  Example:
+ *                                  var myOwnListOfBrowsers = [
+ *                                      [/(mybrowser)\/([\w\.]+)/i], [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION]
+ *                                  ];
+ *                                  var UserAgentParser = new UAParser(ua,myOwnListOfBrowsers);
+ *                                  
+ *                                  for further Information look at the git repository
+ **/
+var UAParser = function (ua, extensions) {
+
+    if (typeof ua === 'object') {
+        extensions = ua;
+        ua = undefined;
+    }
+    
+    if (!(this instanceof UAParser)) {
+        return new UAParser(ua, extensions).getResult();
+    }
+    
+    var _ua = ua || EMPTY;
+    var _rgxmap = extensions ? UserAgentParser_util.extend(regexes, extensions) : regexes;
+
+    this.getBrowser = function () {
+        var _browser = {
+            name: undefined, 
+            version: undefined
+        };
+        mapper.rgx.call(_browser, _ua, _rgxmap.browser);
+        _browser.major = UserAgentParser_util.major(_browser.version); // deprecated
+        return _browser;
+    };
+    this.getCPU = function () {
+        var _cpu = {
+            architecture: undefined
+        };
+        mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);
+        return _cpu;
+    };
+    this.getDevice = function () {
+        var _device = {
+            vendor: undefined, 
+            model: undefined, 
+            type: undefined
+        };
+        mapper.rgx.call(_device, _ua, _rgxmap.device);
+        return _device;
+    };
+    this.getEngine = function () {
+        var _engine = {
+            name: undefined, 
+            version: undefined
+        };
+        mapper.rgx.call(_engine, _ua, _rgxmap.engine);
+        return _engine;
+    };
+    this.getOS = function () {
+        var _os = {
+            name: undefined, 
+            version: undefined
+        };
+        mapper.rgx.call(_os, _ua, _rgxmap.os);
+        return _os;
+    };
+    this.getResult = function () {
+        return {
+            ua      : this.getUA(),
+            browser : this.getBrowser(),
+            engine  : this.getEngine(),
+            os      : this.getOS(),
+            device  : this.getDevice(),
+            cpu     : this.getCPU()
+        };
+    };
+    this.getUA = function () {
+        return _ua;
+    };
+    this.setUA = function (ua) {
+        _ua = ua.length > UA_MAX_LENGTH ? UserAgentParser_util.trim(ua, UA_MAX_LENGTH) : ua;
+        return this;
+    };
+    this.setUA(_ua);
+    return this;
+};
+
+
+
+
+
+
diff --git a/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod b/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ffeb39660ea71de1d49bb46a084a7bee4038577c
--- /dev/null
+++ b/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>migrateCommRestrictions_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/migrateCommRestrictions_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/migrateCommRestrictions_serverProcess/process.js b/process/migrateCommRestrictions_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..72a92e98c7c882e4a872c48c73528867143db281
--- /dev/null
+++ b/process/migrateCommRestrictions_serverProcess/process.js
@@ -0,0 +1,88 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.util");
+import("system.logging");
+import("system.db");
+import("Sql_lib");
+
+var loggingLevels = {
+    SILENT: 0,
+    DEFAULT: 1,
+    DEBUG: 2
+};
+var parameters = {
+    startRow: 0,
+    pageSize: 400,
+    deleteCommRestrictions: false,
+    keepOldUids: true,
+    loggingLevel: loggingLevels.DEFAULT
+};
+
+_log("CommRestriction migration to CommunicationSettings started. Configured parameters: \n" + JSON.stringify(parameters, null, "  "));
+
+var commRestrictionCount = Number(newSelect("count(*)").from("COMMRESTRICTION").cell());
+
+_log("CommRestriction count: " + commRestrictionCount);
+
+if (commRestrictionCount > 0)
+{
+    var commRestrictionSql = newSelect(["COMMRESTRICTIONID", "CONTACT_ID", "EMPLOYEE_INVOLVED", "MEDIUM", "REASON", "STARTDATE"])
+        .from("COMMRESTRICTION")
+        .startRow(parameters.startRow)
+        .pageSize(parameters.pageSize)
+
+    var commSettingsBuilder = new SqlBuilder().tableName("COMMUNICATIONSETTINGS");
+    var commLegalBaseBuilder = new SqlBuilder().tableName("COMMUNICATIONLEGALBASE");
+    
+    var currentDate = vars.get("$sys.date");
+
+    commRestrictionSql.forEachPage(function (commRestrictions)
+    {
+        var insertStatements = [];
+        var deleteStatements = [];
+        commRestrictions.forEach(function ([commRestrictionId, contactId, employeeInvolved, medium, reason, startDate])
+        {
+            var communicationSettingsId = parameters.keepOldUids ? commRestrictionId : util.getNewUUID();
+            var commSettingsInsert = commSettingsBuilder.buildInsertStatement({
+                "COMMUNICATIONSETTINGSID": communicationSettingsId,
+                "CONTACT_ID": contactId,
+                "CHANNEL_TYPE": $KeywordRegistry.communicationChannelType$communication(),
+                "CHANNEL_ID": "",
+                "MEDIUM": medium,
+                "STATUS": $KeywordRegistry.communicationSettingStatus$rejected(),
+                "DATE_NEW": currentDate,
+                "USER_NEW": "Admin"
+            });
+
+            var commLegalBaseInsert = commLegalBaseBuilder.buildInsertStatement({
+                "COMMUNICATIONLEGALBASEID": util.getNewUUID(),
+                "COMMUNICATIONSETTINGS_ID": communicationSettingsId,
+                "DATE_NEW": currentDate,
+                "USER_NEW": "Admin",
+                "VERSION": 1,
+                "INFO": reason
+            });
+
+            insertStatements.push(commSettingsInsert, commLegalBaseInsert);
+            
+            if (parameters.deleteCommRestrictions)
+            {
+                var commRestrictionDelete = newWhere("COMMRESTRICTION.COMMRESTRICTIONID").buildDeleteStatement();
+                deleteStatements.push(commRestrictionDelete);
+            }
+        });
+
+        db.inserts(insertStatements);
+        if (deleteStatements.length !== 0)
+            db.deletes(deleteStatements);
+    });
+}
+
+
+function _log (pMessage, pMinLogLevel)
+{
+    if (pMinLogLevel === null || pMinLogLevel === undefined)
+        pMinLogLevel = 1;
+    if (parameters.loggingLevel >= pMinLogLevel)
+        logging.log(pMessage);
+}
\ No newline at end of file
diff --git a/process/migrateKeywordContainers/migrateKeywordContainers.aod b/process/migrateKeywordContainers/migrateKeywordContainers.aod
index f75e9611757d2a319020405c1cce43b848c87471..94eb478fa064c3d010204d5bf657b597053c37e9 100644
--- a/process/migrateKeywordContainers/migrateKeywordContainers.aod
+++ b/process/migrateKeywordContainers/migrateKeywordContainers.aod
@@ -5,7 +5,6 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/migrateKeywordContainers/documentation.adoc</documentation>
   <process>%aditoprj%/process/migrateKeywordContainers/process.js</process>
-  <publishAsWebservice v="true" />
   <alias>Data_alias</alias>
   <variants>
     <element>EXECUTABLE</element>
diff --git a/process/rebuildDuplicates_serverProcess/process.js b/process/rebuildDuplicates_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..14369cff4552605e18c828601491e101ceced696
--- /dev/null
+++ b/process/rebuildDuplicates_serverProcess/process.js
@@ -0,0 +1,74 @@
+import("Sql_lib");
+import("system.db");
+import("system.entities");
+import("system.project");
+import("system.util");
+import("system.logging");
+import("system.notification");
+import("system.translate");
+import("system.vars");
+import("IndexSearch_lib");
+import("DuplicateScanner_lib");
+
+var pFilterName = vars.get("$local.filterName");
+var pTargetEntity = vars.get("$local.targetEntity");
+var pTargetIdField = vars.get("$local.targetIdField");
+var pFilter = JSON.parse(vars.get("$local.filter"));
+
+newWhere("HASDUPLICATE.OBJECT_TYPE", pTargetEntity).deleteData();
+var indexsearchFilter = IndexsearchFilterUtils.fromFilter(pFilter);
+
+var TABLE_NAME = "HASDUPLICATE";
+var COLUMNS = [
+    "HASDUPLICATEID",
+    "OBJECT_TYPE", "OBJECT_ROWID",
+    "DUPLICATECOUNT"
+];
+var COLUMN_TYPES = db.getColumnTypes(TABLE_NAME, COLUMNS);
+
+var batchSize = parseInt(project.getPreferenceValue("custom.duplicates.dataBlockSize", "5000"));
+var batchPos = 0;
+while(true)
+{
+    var inserts = [];
+    
+    var entityFields = indexsearchFilter.getFields();
+    entityFields.add(pTargetIdField);
+    var entityRowsConfig = entities.createConfigForLoadingRows()
+        .entity(pTargetEntity)
+        .fields(Array.from(entityFields))
+        .startrow(batchPos).count(batchSize);
+    var entityRows = entities.getRows(entityRowsConfig);
+    
+    entityRows.forEach(function(entityRow)
+    {
+        var currEntityRowId = entityRow[pTargetIdField];
+        var indexPattern = indexsearchFilter.buildQuery(entityRow);
+        var duplicates = DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, currEntityRowId);
+       
+        if(duplicates.length > 0)
+        {
+            var values = [
+                util.getNewUUID(),
+                pTargetEntity, currEntityRowId,
+                duplicates.length.toFixed(0)
+            ];
+            inserts.push([TABLE_NAME, COLUMNS, COLUMN_TYPES, values]);
+        }
+    });
+    
+    db.inserts(inserts);
+    if(entityRows.length < batchSize)
+    {
+        break;
+    }
+    batchPos += batchSize;
+}
+
+notification.addNotificationWith(notification.createConfig()
+.addUserWithId(vars.get("$sys.user"))
+.notificationType("_____SYSTEM_NOTIFICATION_MESSAGE")
+.caption(translate.text("Duplicaterow rebuild"))
+.description(translate.withArguments("The duplicate row corrosponding to %0 has been rebuild", [pFilterName])));
+
+logging.log(pFilterName + " has been rebuild");
diff --git a/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3a72b0bfc4f0fb92cacba8dbda2b2d68acbd3386
--- /dev/null
+++ b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>rebuildDuplicates_serverProcess</name>
+  <description>ATTENTION!
+This process can only be executed within the client.
+The action (Rebuild selected entries) can be found in the administration context "Duplicate Configuration".</description>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/rebuildDuplicates_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/redirect_rest/process.js b/process/redirect_rest/process.js
index fe542e60083ebae56bacd14f02bff8b8a81a2787..966602c69e89e8fd07b6ad2720051bab9b351240 100644
--- a/process/redirect_rest/process.js
+++ b/process/redirect_rest/process.js
@@ -1,18 +1,28 @@
+import("system.logging");
 import("Workflow_lib");
 import("Util_lib");
 import("system.util");
+import("Bulkmail_lib");
+import("UserAgentParser_lib");
 
 function restget (pRequest)
 {
     var request = JSON.parse(pRequest);
-    var action = WorkflowLinkActions.parseAction(request.query.act);
-    
-    action.run();
+    var linkId = request.query.link;
+    var mailLogId = request.query.log;
+    var ipAddress = BulkMailUtils.getIpAddressFromHeader(request.header);
+    var redirectLink = BulkMailUtils.getRedirectLink(linkId);
+    var UserAgentObject = new UAParser(request.header["User-agent"]).getResult();
+
+    BulkMailUtils.insertClick(mailLogId, ipAddress, linkId, UserAgentObject.browser.name, UserAgentObject.os.name, UserAgentObject.device.type);
+        
+    BulkMailUtils.startBulkmailWorkFlow(mailLogId, linkId);
     
-    if (action.redirectLink)
+    if (redirectLink)
     {
         request.response.httpStatusCode = 302; //found, redirect
-        request.response.header.Location = action.redirectLink;
+        
+        request.response.header.Location = redirectLink;
     }
     else
     {
diff --git a/process/redirect_rest/redirect_rest.aod b/process/redirect_rest/redirect_rest.aod
index bda233f7990cbcde49e43a759006b8fd964fc26d..83abc318c0a0b898ae6e89367bb5979eb934e886 100644
--- a/process/redirect_rest/redirect_rest.aod
+++ b/process/redirect_rest/redirect_rest.aod
@@ -8,6 +8,7 @@
   <loginTypeId>
     <element>internal.none</element>
   </loginTypeId>
+  <alias>Data_alias</alias>
   <variants>
     <element>EXECUTABLE</element>
   </variants>
diff --git a/process/sendBulkMail_serverProcess/process.js b/process/sendBulkMail_serverProcess/process.js
index 7ed237beffbb5978141a82b08c745385a1f21bee..2d1640fa68ab2917ef4214f904130eb54e8405a3 100644
--- a/process/sendBulkMail_serverProcess/process.js
+++ b/process/sendBulkMail_serverProcess/process.js
@@ -1,27 +1,28 @@
-import("system.datetime");
-import("Sql_lib");
-import("system.db");
-import("system.util");
-import("system.translate");
-import("Bulkmail_lib");
-import("system.vars");
-import("system.notification");
-
-var startTime = datetime.date();
-var bulkMailId = vars.get("$local.bulkMailId");
-var user = vars.get("$local.user");
-var testRecipients = JSON.parse(vars.get("$local.testRecipients"));
-var res = BulkMailUtils.sendBulkMail(bulkMailId, testRecipients);
-
-if (user && !testRecipients)
-{
-    var mailName = newSelect("NAME")
-                        .from("BULKMAIL")
-                        .whereIfSet("BULKMAIL.BULKMAILID", bulkMailId)
-                        .cell(true);
-                        
-    var message = translate.withArguments("Bulk mail \"%0\" was sent!", [mailName]);
-    var description = translate.withArguments("%0 mails sent sucessfully, %1 mails failed. Process took %2 s.", 
-        [res.sucessful, res.failed, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]);
-    notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent", null, notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
+import("system.datetime");
+import("Sql_lib");
+import("system.db");
+import("system.util");
+import("system.translate");
+import("Bulkmail_lib");
+import("system.vars");
+import("system.notification");
+
+var startTime = datetime.date();
+var bulkMailId = vars.get("$local.bulkMailId");
+var user = vars.get("$local.user");
+var testRun= vars.get("$local.testRun");
+var res = BulkMailUtils.sendBulkMail(bulkMailId, testRun);
+
+if (user && !testRun)
+{
+    var mailName = newSelect("NAME")
+                        .from("BULKMAIL")
+                        .whereIfSet("BULKMAIL.BULKMAILID", bulkMailId)
+                        .cell(true);
+                        
+    var message = translate.withArguments("Bulk mail \"%0\" was sent!", [mailName]);
+    var description = translate.withArguments("%0 mails sent sucessfully, %1 mails failed. Process took %2 s.", 
+        [res.sucessful, res.failed, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]);
+    notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent",  notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description); 
+
 }
\ No newline at end of file
diff --git a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
index 8357bb2adf8a19f802111fd90d3c734932f8b2e6..1bc41ce6e81cc65bfe988a74c1e7193aceea0c2d 100644
--- a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
+++ b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
@@ -4,6 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/sendBulkMail_serverProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/sendBulkMail_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
   <variants>
     <element>EXECUTABLE</element>
     <element>LIBRARY</element>
diff --git a/process/sendPlannedBulkmails_serverProcess/process.js b/process/sendPlannedBulkmails_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f74ac7a527a49ae1dbe7fc416e40edf21e2aecd
--- /dev/null
+++ b/process/sendPlannedBulkmails_serverProcess/process.js
@@ -0,0 +1,30 @@
+import("system.logging");
+import("Bulkmail_lib");
+import("system.project");
+import("system.datetime");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+import("system.eMath");
+import("system.SQLTYPES");
+
+var dateToSendPassedAfter = project.getInstanceConfigValue("bulkmail.dateToSendPassedAfter" , 24);
+
+//send all Bulkmails which are currently planned and not already missed.
+var bulkMailData = newSelect("BULKMAIL.BULKMAILID")
+    .from("BULKMAIL")
+    .where("BULKMAIL.STATUS",$KeywordRegistry.bulkMailStatus$planned())
+    .and("BULKMAIL.DATE_TO_SEND", datetime.date(), SqlBuilder.LESS_OR_EQUAL())
+    .and("BULKMAIL.DATE_TO_SEND",eMath.subInt(datetime.date(), eMath.mulInt(dateToSendPassedAfter, datetime.ONE_HOUR)), SqlBuilder.GREATER())
+    .arrayColumn();
+for (let i = 0; i < bulkMailData.length; i++)
+{
+     newWhere("BULKMAIL.BULKMAILID", bulkMailData[i])
+        .updateFields({"STATUS" : $KeywordRegistry.bulkMailStatus$beingSent()});
+    
+    BulkMailUtils.sendBulkMailOnServer(bulkMailData[i],null,null);
+}
+
+//set all missed bulkmails to status missed
+newWhere("BULKMAIL.STATUS", $KeywordRegistry.bulkMailStatus$planned())
+    .and("BULKMAIL.DATE_TO_SEND", eMath.subInt(datetime.date(), eMath.mulInt(dateToSendPassedAfter, datetime.ONE_HOUR)), SqlBuilder.LESS_OR_EQUAL())
+    .updateFields({"STATUS": $KeywordRegistry.bulkMailStatus$missed()});
\ No newline at end of file
diff --git a/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod b/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d34bf50903e06d4090817909b7175259f518a660
--- /dev/null
+++ b/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>sendPlannedBulkmails_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/sendPlannedBulkmails_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/role/PROJECT_DSGVO/PROJECT_DSGVO.aod b/role/PROJECT_DSGVO/PROJECT_DSGVO.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e2bdeeae878853c7c2182c82731f5e86ea455d75
--- /dev/null
+++ b/role/PROJECT_DSGVO/PROJECT_DSGVO.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_DSGVO</name>
+  <title>DSGVO</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>