diff --git a/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_UnlinkedMail.xml b/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_UnlinkedMail.xml
index d6ef62d7277175b524ceb33eb21bab4d01259b1f..63d3018343756ec51a4d8843e8d48403c0d2cc9f 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_UnlinkedMail.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_UnlinkedMail.xml
@@ -24,8 +24,13 @@
         <createIndex indexName="IDX_AB_UNLINKEDMAILID_SENTDATE" tableName="AB_UNLINKEDMAIL">
             <column name="SENTDATE" descending="true"/>
         </createIndex>
+        <!--
+        removed index since a index on such a large column cannot be created.
+        the maximum size of a column on mariaDB (nvarchar-column, utf8mb4, innodb-large-prefix=OFF, not nullable) is 190 which is too less for the sender information
+        therefor: do not create the index and leaf the column size the same
         <createIndex indexName="IDX_AB_UNLINKEDMAILID_SENDER" tableName="AB_UNLINKEDMAIL">
             <column name="SENDER"/>
         </createIndex>
+        -->
     </changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.1.4/Attributes/AB_ATTRIBUTEUSAGE.xml b/.liquibase/Data_alias/basic/2019.1.4/Attributes/AB_ATTRIBUTEUSAGE.xml
index f3f612ddd017969474ff83dcfad72790394a0483..b75a9054a156dfb187f75c2bc107f92eb1f624ff 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/Attributes/AB_ATTRIBUTEUSAGE.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/Attributes/AB_ATTRIBUTEUSAGE.xml
@@ -422,16 +422,19 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="cf947eee-dc58-40ad-92b0-f30314a8b2a7"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="81426072-72e5-4a69-945e-754b7fd0bcf7"/>
       <column name="AB_ATTRIBUTE_ID" value="558419b2-6113-4060-b88d-cc6324754765"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="18d77833-d551-405c-8a96-9e99cb4d722d"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -442,7 +445,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="1f2749b3-1402-46fb-892a-e68b9a39065d"/>
       <column name="AB_ATTRIBUTE_ID" value="f11f65d0-4352-4f81-85d0-bfd034275e34"/>
-      <column name="MIN_COUNT" valueNumeric="0"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -453,7 +456,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="140b87a4-4f8e-4ae5-84d5-4bc26fa51901"/>
       <column name="AB_ATTRIBUTE_ID" value="691452ec-3b9f-43dc-91a2-645a97b775b2"/>
-      <column name="MIN_COUNT" valueNumeric="0"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -474,11 +477,13 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="c32d3322-5ff6-400a-82b6-4f8524ec7f6b"/>
       <column name="AB_ATTRIBUTE_ID" value="b78ef891-16a3-4354-bc95-7b70ef5b4e2e"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Product"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="e744c324-27ca-4d91-bf57-c487a904d8d6"/>
       <column name="AB_ATTRIBUTE_ID" value="6819c616-a580-4bd6-ba41-9ba1db569dc4"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Product"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -489,22 +494,26 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="9e9829fe-880d-4b65-b729-34a99b37c5bf"/>
       <column name="AB_ATTRIBUTE_ID" value="c7d28377-8cb1-4f92-a9ac-ed08041a782b"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Person"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="86d385a6-f97f-4868-a65a-9b60940886f0"/>
       <column name="AB_ATTRIBUTE_ID" value="a844a395-e857-447d-b8f8-fa850bbceb82"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Product"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="0766ff88-304d-41a7-8224-642a0aee5587"/>
       <column name="AB_ATTRIBUTE_ID" value="c7d28377-8cb1-4f92-a9ac-ed08041a782b"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="06afbdb4-a9e1-493d-b45e-c14e114a9cc7"/>
       <column name="AB_ATTRIBUTE_ID" value="fd3963bc-8e60-411a-9911-b97eb73e5cf7"/>
       <column name="MIN_COUNT" valueNumeric="1"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -522,6 +531,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="37855ddd-c5cb-4692-86a5-3a94aae7c455"/>
       <column name="AB_ATTRIBUTE_ID" value="7b687991-601c-4d75-b201-00a6cc9c6b93"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Product"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -532,12 +542,14 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="66cac4bb-6dd9-4ddd-b329-14d4542bfd2e"/>
       <column name="AB_ATTRIBUTE_ID" value="c7d28377-8cb1-4f92-a9ac-ed08041a782b"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="05576033-1bee-4547-ab82-fdfcdd039642"/>
       <column name="AB_ATTRIBUTE_ID" value="7e9927a4-41e4-426f-bddd-c3e9ee3b093e"/>
       <column name="MIN_COUNT" valueNumeric="1"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -581,6 +593,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="be7d0f5c-8941-4b3d-b128-bab67e1d609b"/>
       <column name="AB_ATTRIBUTE_ID" value="66271d11-a275-4141-8f84-86ab2ed3fedf"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Product"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -598,11 +611,6 @@
       <column name="AB_ATTRIBUTE_ID" value="dc52ede6-2b79-488c-b7bb-48877bd5d198"/>
       <column name="OBJECT_TYPE" value="Activity"/>
     </insert>
-    <insert tableName="AB_ATTRIBUTEUSAGE">
-      <column name="AB_ATTRIBUTEUSAGEID" value="118a4133-c604-4c91-b1d5-13769d2c2bfb"/>
-      <column name="AB_ATTRIBUTE_ID" value="f310ae37-5ec3-47c6-839b-a92fc8fcd252"/>
-      <column name="OBJECT_TYPE" value="Activity"/>
-    </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="d72e9c6d-ad1d-419c-9794-b044c69f9c22"/>
       <column name="AB_ATTRIBUTE_ID" value="14847ea6-b6fd-43f6-a819-af2b1e53177e"/>
@@ -623,11 +631,6 @@
       <column name="AB_ATTRIBUTE_ID" value="83e627b7-39da-4519-8023-ed384d3a0a42"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
-    <insert tableName="AB_ATTRIBUTEUSAGE">
-      <column name="AB_ATTRIBUTEUSAGEID" value="3ab3fec6-229e-430e-b92c-d4f06be3829d"/>
-      <column name="AB_ATTRIBUTE_ID" value="f310ae37-5ec3-47c6-839b-a92fc8fcd252"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-    </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="5c357e7d-68f7-4408-8b60-36f8a029db28"/>
       <column name="AB_ATTRIBUTE_ID" value="14847ea6-b6fd-43f6-a819-af2b1e53177e"/>
@@ -656,6 +659,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="b0f42fce-45e4-47e7-9534-534d3c762c81"/>
       <column name="AB_ATTRIBUTE_ID" value="f310ae37-5ec3-47c6-839b-a92fc8fcd252"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Person"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -676,26 +680,31 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="4de9d31f-82a4-4598-85ae-de0b8ce5590d"/>
       <column name="AB_ATTRIBUTE_ID" value="3a6e11fc-b00a-4cf3-975a-a5e8b60fc5cb"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="2c1af7b9-f015-4e9e-911a-b975f077f471"/>
       <column name="AB_ATTRIBUTE_ID" value="3a6e11fc-b00a-4cf3-975a-a5e8b60fc5cb"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Person"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="7d936ff2-41d9-47c6-9145-d165c8b70fe7"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="5f0274a2-6425-4258-9f1f-a510ca6b5861"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Person"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="1f269307-9900-44e7-b575-0412f0ac2908"/>
       <column name="AB_ATTRIBUTE_ID" value="e857f9ee-fb27-4507-8381-46ba0a181cef"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Employee"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -713,11 +722,6 @@
       <column name="AB_ATTRIBUTE_ID" value="1d4c071b-237e-4a11-abff-0acaeaf6f8b1"/>
       <column name="OBJECT_TYPE" value="Employee"/>
     </insert>
-    <insert tableName="AB_ATTRIBUTEUSAGE">
-      <column name="AB_ATTRIBUTEUSAGEID" value="926c93ac-7b5e-49dd-bde8-5afe05256584"/>
-      <column name="AB_ATTRIBUTE_ID" value="f310ae37-5ec3-47c6-839b-a92fc8fcd252"/>
-      <column name="OBJECT_TYPE" value="Employee"/>
-    </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="6ee459e7-d251-4434-bd26-aff75f3153ea"/>
       <column name="AB_ATTRIBUTE_ID" value="acaf54c3-9613-4740-aa22-4f6ebd0d6cb0"/>
@@ -736,6 +740,7 @@
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="931958f6-efaf-4da2-89b1-92f844787094"/>
       <column name="AB_ATTRIBUTE_ID" value="28fd7a4b-72d8-40ff-a893-a9479abcf19e"/>
+      <column name="MAX_COUNT" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Employee"/>
     </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
@@ -768,16 +773,6 @@
       <column name="AB_ATTRIBUTE_ID" value="83e627b7-39da-4519-8023-ed384d3a0a42"/>
       <column name="OBJECT_TYPE" value="DocumentTemplate"/>
     </insert>
-    <insert tableName="AB_ATTRIBUTEUSAGE">
-      <column name="AB_ATTRIBUTEUSAGEID" value="cae53196-4987-4f53-a45c-babca1997a48"/>
-      <column name="AB_ATTRIBUTE_ID" value="dc52ede6-2b79-488c-b7bb-48877bd5d198"/>
-      <column name="OBJECT_TYPE" value="DocumentTemplate"/>
-    </insert>
-    <insert tableName="AB_ATTRIBUTEUSAGE">
-      <column name="AB_ATTRIBUTEUSAGEID" value="59d93c4b-e338-497c-9da2-47b4c45444c9"/>
-      <column name="AB_ATTRIBUTE_ID" value="f310ae37-5ec3-47c6-839b-a92fc8fcd252"/>
-      <column name="OBJECT_TYPE" value="DocumentTemplate"/>
-    </insert>
     <insert tableName="AB_ATTRIBUTEUSAGE">
       <column name="AB_ATTRIBUTEUSAGEID" value="0498ae18-bae6-44e4-8944-1e756e9d4a8e"/>
       <column name="AB_ATTRIBUTE_ID" value="14847ea6-b6fd-43f6-a819-af2b1e53177e"/>
@@ -793,5 +788,10 @@
       <column name="AB_ATTRIBUTE_ID" value="7abdc3a7-f46b-4021-b695-7fde6b21c6a4"/>
       <column name="OBJECT_TYPE" value="DocumentTemplate"/>
     </insert>
+    <insert tableName="AB_ATTRIBUTEUSAGE">
+      <column name="AB_ATTRIBUTEUSAGEID" value="f71c56b5-7d5a-45ec-87f0-e9f79620092e"/>
+      <column name="AB_ATTRIBUTE_ID" value="87d4ff5b-0ab6-4534-be26-76c6ef486072"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.1.4/create_salutation.xml b/.liquibase/Data_alias/basic/2019.1.4/create_salutation.xml
index bd03a1284b944ce6b09d0fac8fc996f19a5e4d7d..dfcc9a98e28f704fe18abbe4c7bec610bf691a44 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/create_salutation.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/create_salutation.xml
@@ -46,7 +46,7 @@
         </insert>
         <insert tableName="SALUTATION">
             <column name="HEADLINE"/>
-            <column name="LETTERSALUTATION" value="Sehr geehrte Dameng und Herreng"/>
+            <column name="LETTERSALUTATION" value="Sehr geehrte Damen und Herren"/>
             <column name="SEX"/>
             <column name="TITLE"/>
             <column name="SALUTATION"/>
diff --git a/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml b/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee05b957ba1f5167e0768d8001550468ffff665a
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.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">
+    <changeSet author="s.listl" id="b8a37d10-90db-497a-b2a7-69a25eff27ba">
+        <addColumn tableName="BULKMAILRECIPIENT">
+            <column name="PROBLEM" type="CHAR(36)"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.2.1/alter_attr_relation_idvalue.xml b/.liquibase/Data_alias/basic/2019.2.1/alter_attr_relation_idvalue.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6d6051e058bc9805c45208955fa0fe090b495eb2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2.1/alter_attr_relation_idvalue.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">
+    <!-- Change id_value colum type from char(36) to varchar(63) to support non-standard uid's (for e.g. Employee entity) -->
+    
+    <changeSet dbms="derby" author="j.hoermann" id="fb0e40dc-dced-47a5-88a2-f9b2cbb3598d">
+        <sql>
+            ALTER TABLE AB_ATTRIBUTERELATION ADD COLUMN ID_VALUE_NEW VARCHAR(63);
+            UPDATE AB_ATTRIBUTERELATION SET ID_VALUE_NEW=ID_VALUE where ID_VALUE is not null;
+            ALTER TABLE AB_ATTRIBUTERELATION DROP COLUMN ID_VALUE;
+            RENAME COLUMN AB_ATTRIBUTERELATION.ID_VALUE_NEW TO ID_VALUE;
+        </sql>
+    </changeSet>
+    
+    <changeSet author="j.hoermann" id="12590e32-4d53-4b59-813d-1ebec82c07f0">
+        <preConditions onFail="CONTINUE">
+            <not>
+                <dbms type="derby" />
+            </not>
+        </preConditions>
+
+        <modifyDataType tableName="AB_ATTRIBUTERELATION" columnName="KIND" newDataType="NVARCHAR(63)"/>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.2.1/changelog.xml b/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
index 0afcc44c129b45cd767a841942a0f637e97579f9..6f631428d208824bcdc8d082cb33ff711b64fcaa 100644
--- a/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
+++ b/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
@@ -8,7 +8,10 @@
     <include relativeToChangelogFile="true" file="insert_AttributeType_Theme_keyword.xml"/>
     
     <include relativeToChangelogFile="true" file="alter_Campaign_currency.xml"/>
-    
+
+    <include relativeToChangelogFile="true" file="alter_BulkMailRecipient_problem.xml"/>
+    <include relativeToChangelogFile="true" file="insert_BulkMailProblem_keyword.xml"/>
+
     <include relativeToChangelogFile="true" file="Duplicates/create_duplicateClusters.xml"/>
     <include relativeToChangelogFile="true" file="Duplicates/create_duplicateScanner.xml"/>
     <include relativeToChangelogFile="true" file="Duplicates/create_duplicateScannerPrefilterConfig.xml"/>
diff --git a/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml b/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bce88c20a30f80ec5eb516254e46836ae1b70474
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.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="s.listl" id="8f2b7dca-9035-4f0c-a83f-1d16b5e57e81">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="a18e7a37-c5f6-4f7b-8db6-3018dedbd43f"/>
+            <column name="KEYID" value="MAILADDRESSDOESNOTEXIST             "/>
+            <column name="TITLE" value="Email address does not exist"/>
+            <column name="CONTAINER" value="BulkMailProblem"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="9f11c52f-4c79-4027-877a-0f6eb828fa22"/>
+            <column name="KEYID" value="MAILBLOCKED                         "/>
+            <column name="TITLE" value="Email blocked"/>
+            <column name="CONTAINER" value="BulkMailProblem"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.3.0/alter_Bulkmail_use_template_attachments.xml b/.liquibase/Data_alias/basic/2019.3.0/alter_Bulkmail_use_template_attachments.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9136da3445f3a147dccd5290a464622e1164c85
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/alter_Bulkmail_use_template_attachments.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">
+    <changeSet author="j.hoermann" id="eb370821-3068-49da-9812-494880dabc68">
+        <addColumn tableName="BULKMAIL">
+            <column name="USE_TEMPLATE_ATTACHMENTS" type="TINYINT"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.3.0/alter_DocumentTemplate_addReplacementName.xml b/.liquibase/Data_alias/basic/2019.3.0/alter_DocumentTemplate_addReplacementName.xml
new file mode 100644
index 0000000000000000000000000000000000000000..485e063e7588fbf822a067d4fba539ea4fff5d47
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/alter_DocumentTemplate_addReplacementName.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">
+    <changeSet author="j.hoermann" id="2d219d03-2822-4d61-804f-c060d56fcb9f">
+        <addColumn tableName="DOCUMENTTEMPLATE">
+            <column name="REPLACEMENTNAME" type="NVARCHAR(50)"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.3.0/changelog.xml b/.liquibase/Data_alias/basic/2019.3.0/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8cf9c5368ea1f4b7e3522946b4f4accbfe595a93
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/changelog.xml
@@ -0,0 +1,11 @@
+<?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="update_assistance_attributes.xml"/>
+
+    <include relativeToChangelogFile="true" file="alter_DocumentTemplate_addReplacementName.xml"/>
+    <include relativeToChangelogFile="true" file="insert_DocumentTemplateCategory_templates.xml"/>
+    <include relativeToChangelogFile="true" file="alter_Bulkmail_use_template_attachments.xml"/>
+    
+    <include relativeToChangelogFile="true" file="increase_salesproject_name_to_150_chars.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.3.0/increase_salesproject_name_to_150_chars.xml b/.liquibase/Data_alias/basic/2019.3.0/increase_salesproject_name_to_150_chars.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e927d6edb87a023a4620b9ac9d451d2c770a3a9e
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/increase_salesproject_name_to_150_chars.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">
+    <changeSet author="j.hoermann" id="fd473c7f-df53-4621-aa20-4b92a349a57a">
+        <modifyDataType tableName="SALESPROJECT" columnName="PROJECTTITLE" newDataType="NVARCHAR(150)"/>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.3.0/insert_DocumentTemplateCategory_templates.xml b/.liquibase/Data_alias/basic/2019.3.0/insert_DocumentTemplateCategory_templates.xml
new file mode 100644
index 0000000000000000000000000000000000000000..55a562d70a7efa9b256480dd7aebf537ea89b953
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/insert_DocumentTemplateCategory_templates.xml
@@ -0,0 +1,28 @@
+<?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="j.hoermann" id="1dd1c707-1ae3-4df3-9b94-84601e835ab1">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="0d30ed22-bb79-450a-a027-6786e7bb6028"/>
+            <column name="KEYID" value="7                                   "/>
+            <column name="TITLE" value="HTML template - Only for .html"/>
+            <column name="CONTAINER" value="DocumentTemplateTypeCategory"/>
+            <column name="SORTING" valueNumeric="7"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="1abf63c6-82fb-4eae-9006-2caf467a6c5b"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="5ff35897-8e2e-4b6f-adbe-2f62b4120f00"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14c2d515-a42f-4618-b534-7a23369d2004"/>
+            <column name="BOOL_VALUE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="27ff2187-3013-42c0-91b3-3356f81f3731"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="0d30ed22-bb79-450a-a027-6786e7bb6028"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14c2d515-a42f-4618-b534-7a23369d2004"/>
+            <column name="BOOL_VALUE" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.3.0/update_assistance_attributes.xml b/.liquibase/Data_alias/basic/2019.3.0/update_assistance_attributes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5dda62f5ec1bd6b99773ce88965c6249b9c7cd1e
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.3.0/update_assistance_attributes.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="j.hoermann" id="14cb7c3c-9355-4376-b40c-d7a2963569b6">
+        <update tableName="AB_ATTRIBUTE">
+            <column name="ATTRIBUTE_TYPE" value="OBJECTSELECTION                     " />
+            <column name="DROPDOWNDEFINITION" value="Employee_entity" />
+            <where>AB_ATTRIBUTEID in (?, ?, ?, ?)</where>
+            <whereParams>
+                <param value="3e5736c4-93ff-4471-96f5-48bb34ab53d2" />
+                <param value="3f119858-9d69-4903-a572-d286be151f73" />
+                <param value="d637fc6c-9452-4498-8379-ec71d946cbab" />
+                <param value="ff84c147-27c7-4698-83ff-0e25b1d33851" />
+            </whereParams>
+        </update>
+        
+        <update tableName="AB_ATTRIBUTE">
+            <column name="ATTRIBUTE_NAME" value="Vacation approval by" />
+            <where>AB_ATTRIBUTEID = ?</where>
+            <whereParams>
+                <param value="3e5736c4-93ff-4471-96f5-48bb34ab53d2" />
+            </whereParams>
+        </update>
+        
+        <update tableName="AB_ATTRIBUTE">
+            <column name="ATTRIBUTE_NAME" value="Vacation examination by" />
+            <where>AB_ATTRIBUTEID = ?</where>
+            <whereParams>
+                <param value="3f119858-9d69-4903-a572-d286be151f73" />
+            </whereParams>
+        </update>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml
index 272312eb6df688b304e58dca580d3275e85076fd..d1ab2aa5dddc623968f16f29713a46fd5aeb1530 100644
--- a/.liquibase/Data_alias/basic/_demoData/changelog.xml
+++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml
@@ -1,27 +1,39 @@
 <?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">
-    <include relativeToChangelogFile="true" file="generatedData/AB_ATTRIBUTERELATION.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/AB_OBJECTRELATION.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/ACTIVITY.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/ACTIVITYLINK.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/ADDRESS.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/COMMUNICATION.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/CONTACT.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/CONTRACT.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/DOCUMENTTEMPLATE.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/OFFER.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/OFFERITEM.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/ORGANISATION.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/PERSON.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/PRODUCT.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/PRODUCTPRICE.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/SALESORDER.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/SALESORDERITEM.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/SALESPROJECT.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/FORECAST.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/OBJECTMEMBER.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/SALESPROJECT_MILESTONE.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/SALESPROJECT_SOURCE.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/TASK.xml"/>
-    <include relativeToChangelogFile="true" file="generatedData/TASKLINK.xml"/>
+  <include file="generatedData/AB_ATTRIBUTERELATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/AB_LOGHISTORY.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/AB_OBJECTRELATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/AB_OBJECTRELATIONTYPE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/ACTIVITY.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/ACTIVITYLINK.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/ADDRESS.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CAMPAIGN.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CAMPAIGNCOST.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CAMPAIGNPARTICIPANT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CAMPAIGNPARTICIPANTLOG.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CAMPAIGNSTEP.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CLASSIFICATIONSCORE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CLASSIFICATIONTYPE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/COMMUNICATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CONTACT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/CONTRACT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/DESCRIPTIONTRANSLATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/DOCUMENTTEMPLATE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/FORECAST.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/OBJECTMEMBER.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/OFFER.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/OFFERITEM.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/ORGANISATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/PERSON.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/PRODUCT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/PRODUCTPRICE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALESORDER.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALESORDERITEM.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALESPROJECT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALESPROJECT_MILESTONE.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALESPROJECT_TOUCHPOINT.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/SALUTATION.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/TASK.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/TASKLINK.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/TICKET.xml" relativeToChangelogFile="true"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_ATTRIBUTERELATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_ATTRIBUTERELATION.xml
index 9d80e8dd303474b1b81414c68618eb7be8740da3..d3837a2647acf9e1113315e357797d1653abc304 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_ATTRIBUTERELATION.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_ATTRIBUTERELATION.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="a2f47e80-5bcb-4e8d-8899-9b5f6189ba36">
+  <changeSet author="autogenerated" id="e6eb245c24303f230d7a96a287001ef8">
+    <delete tableName="AB_ATTRIBUTERELATION"/>
     <insert tableName="AB_ATTRIBUTERELATION">
       <column name="AB_ATTRIBUTERELATIONID" value="d4a3c8a0-2050-4147-abad-43a1f35ccbf0"/>
       <column name="AB_ATTRIBUTE_ID" value="7e9927a4-41e4-426f-bddd-c3e9ee3b093e"/>
@@ -41,7 +42,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="7a7736db-8b68-4865-a212-bd603af51370"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:28:49"/>
-      <column name="ID_VALUE" value="SALPROJPOLLOW"/>
+      <column name="ID_VALUE" value="SALPROJPOLLOW                       "/>
       <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -59,7 +60,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="76967a63-8322-484b-b603-d3cb5ce27d6d"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:41:53"/>
-      <column name="ID_VALUE" value="SALPROJPOLLOW"/>
+      <column name="ID_VALUE" value="SALPROJPOLLOW                       "/>
       <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -68,7 +69,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="7a291363-9a75-4dd5-aa64-34a1801aeb92"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:41:53"/>
-      <column name="ID_VALUE" value="PAYTERM30"/>
+      <column name="ID_VALUE" value="PAYTERM30                           "/>
       <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -166,7 +167,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="f7824359-7f2c-4942-b959-465bf776ef7e"/>
       <column name="AB_ATTRIBUTE_ID" value="558419b2-6113-4060-b88d-cc6324754765"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:40:12"/>
-      <column name="ID_VALUE" value="SALPROJSTPRICEPOL"/>
+      <column name="ID_VALUE" value="SALPROJSTPRICEPOL                   "/>
       <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -184,7 +185,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="44bd5ab6-0b4f-4655-a276-ed172240643b"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:43:59"/>
-      <column name="ID_VALUE" value="PAYTERM30"/>
+      <column name="ID_VALUE" value="PAYTERM30                           "/>
       <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -193,7 +194,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="2261ef33-50af-445a-bc19-27367cc6ff7a"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:44:08"/>
-      <column name="ID_VALUE" value="SALPROJWEAKMARKET"/>
+      <column name="ID_VALUE" value="SALPROJWEAKMARKET                   "/>
       <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -202,7 +203,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="7abc6537-b254-4a36-8315-2e44a5b10fad"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:44:47"/>
-      <column name="ID_VALUE" value="SALPROJPOLABO"/>
+      <column name="ID_VALUE" value="SALPROJPOLABO                       "/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -211,7 +212,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="edddb76a-348d-497b-9665-21acbe0bed0b"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:44:55"/>
-      <column name="ID_VALUE" value="SALPROJWEAKMARKET"/>
+      <column name="ID_VALUE" value="SALPROJWEAKMARKET                   "/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -220,7 +221,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="086ff454-e407-433a-9124-496de7fef1cb"/>
       <column name="AB_ATTRIBUTE_ID" value="97b449a5-d9b4-42ff-b9b0-4f8b27b8a9ec"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:45:09"/>
-      <column name="ID_VALUE" value="PRICELISTSPECIAL"/>
+      <column name="ID_VALUE" value="PRICELISTSPECIAL                    "/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -238,7 +239,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="0563ec4f-6f85-469d-89a1-5fc807f4dc9f"/>
       <column name="AB_ATTRIBUTE_ID" value="3a6e11fc-b00a-4cf3-975a-a5e8b60fc5cb"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:45:34"/>
-      <column name="ID_VALUE" value="DELIVERCIF"/>
+      <column name="ID_VALUE" value="DELIVERCIF                          "/>
       <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -247,7 +248,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="fedc492c-cc5d-48cb-a7ee-0cef061facec"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:45:57"/>
-      <column name="ID_VALUE" value="PAYTERM30"/>
+      <column name="ID_VALUE" value="PAYTERM30                           "/>
       <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -265,7 +266,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="ce75da6e-b946-4a8c-a9dc-fb76cc20f0a1"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:46:30"/>
-      <column name="ID_VALUE" value="PAYTERM30"/>
+      <column name="ID_VALUE" value="PAYTERM30                           "/>
       <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -274,7 +275,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="924e8914-6275-45d4-a36a-94f3b70a35b4"/>
       <column name="AB_ATTRIBUTE_ID" value="558419b2-6113-4060-b88d-cc6324754765"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:46:41"/>
-      <column name="ID_VALUE" value="SALPROJSTPERSAPP"/>
+      <column name="ID_VALUE" value="SALPROJSTPERSAPP                    "/>
       <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -292,7 +293,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="67f36d84-1997-4801-a4f6-94c9b8318e95"/>
       <column name="AB_ATTRIBUTE_ID" value="558419b2-6113-4060-b88d-cc6324754765"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:47:08"/>
-      <column name="ID_VALUE" value="SALPROJSTPRICEPOL"/>
+      <column name="ID_VALUE" value="SALPROJSTPRICEPOL                   "/>
       <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -301,7 +302,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="2d80654e-3bd5-46bb-af0b-f18f812d11e0"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:47:37"/>
-      <column name="ID_VALUE" value="SALPROJWEAKMARKET"/>
+      <column name="ID_VALUE" value="SALPROJWEAKMARKET                   "/>
       <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -310,7 +311,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="25dac52d-de7e-47e1-b60c-22d252dae4c2"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:47:46"/>
-      <column name="ID_VALUE" value="PAYTERM7"/>
+      <column name="ID_VALUE" value="PAYTERM7                            "/>
       <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -328,7 +329,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="d5cb44f7-6500-47ca-9dac-784b07d0b5f5"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:48:10"/>
-      <column name="ID_VALUE" value="SALPROJWEAKLIQUIDITY"/>
+      <column name="ID_VALUE" value="SALPROJWEAKLIQUIDITY                "/>
       <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -337,7 +338,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="7f0bccf2-bf10-4a64-8ae7-236bebc2505f"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:48:18"/>
-      <column name="ID_VALUE" value="PAYTERM30"/>
+      <column name="ID_VALUE" value="PAYTERM30                           "/>
       <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -355,7 +356,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="97429450-9cb5-4f8a-bd0f-c6c63c9afee9"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:48:40"/>
-      <column name="ID_VALUE" value="SALPROJWEAKMARKET"/>
+      <column name="ID_VALUE" value="SALPROJWEAKMARKET                   "/>
       <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -364,7 +365,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="6907f00d-011d-4592-8f0e-26e52449658f"/>
       <column name="AB_ATTRIBUTE_ID" value="97b449a5-d9b4-42ff-b9b0-4f8b27b8a9ec"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:48:46"/>
-      <column name="ID_VALUE" value="PRICELISTDEFAULT"/>
+      <column name="ID_VALUE" value="PRICELISTDEFAULT                    "/>
       <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -373,7 +374,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="f7a60ce6-39c5-43b6-a14d-24b838f541b9"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:49:02"/>
-      <column name="ID_VALUE" value="SALPROJPOLLOW"/>
+      <column name="ID_VALUE" value="SALPROJPOLLOW                       "/>
       <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -382,7 +383,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="6e8b96f9-de86-4dc1-b0c9-d5b99867d29c"/>
       <column name="AB_ATTRIBUTE_ID" value="292fae38-6557-466d-8843-3b1b4a1f6599"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:49:10"/>
-      <column name="ID_VALUE" value="PAYTERMDISCOUNT"/>
+      <column name="ID_VALUE" value="PAYTERMDISCOUNT                     "/>
       <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -391,7 +392,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="f1f8c53a-46e9-40a9-8be2-8f0775cafa64"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:49:31"/>
-      <column name="ID_VALUE" value="SALPROJPOLLOW"/>
+      <column name="ID_VALUE" value="SALPROJPOLLOW                       "/>
       <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -400,7 +401,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="255571a4-2fda-49ec-baed-ea7b374895f1"/>
       <column name="AB_ATTRIBUTE_ID" value="97b449a5-d9b4-42ff-b9b0-4f8b27b8a9ec"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:49:39"/>
-      <column name="ID_VALUE" value="PRICELISTSPECIAL"/>
+      <column name="ID_VALUE" value="PRICELISTSPECIAL                    "/>
       <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -409,7 +410,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="b2bb8ab7-0e64-49fc-8e18-372ec0a03822"/>
       <column name="AB_ATTRIBUTE_ID" value="558419b2-6113-4060-b88d-cc6324754765"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:49:54"/>
-      <column name="ID_VALUE" value="SALPROJSTPERSAPP"/>
+      <column name="ID_VALUE" value="SALPROJSTPERSAPP                    "/>
       <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -436,7 +437,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="1505bacf-c29a-48a7-8da5-5e969252309f"/>
       <column name="AB_ATTRIBUTE_ID" value="71226196-2812-4d70-b90f-c3e2c14fd4d1"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:51:07"/>
-      <column name="ID_VALUE" value="SALPROJWEAKLIQUIDITY"/>
+      <column name="ID_VALUE" value="SALPROJWEAKLIQUIDITY                "/>
       <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -445,7 +446,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="a433931c-412c-4a42-9a86-e5ca1e671a04"/>
       <column name="AB_ATTRIBUTE_ID" value="3a6e11fc-b00a-4cf3-975a-a5e8b60fc5cb"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:51:25"/>
-      <column name="ID_VALUE" value="DELIVEREX"/>
+      <column name="ID_VALUE" value="DELIVEREX                           "/>
       <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -481,7 +482,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="7b38959d-d0b7-434a-9316-58d4894982d2"/>
       <column name="AB_ATTRIBUTE_ID" value="8af37871-d407-4414-98ad-e64dbaa5794a"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:52:18"/>
-      <column name="ID_VALUE" value="SALPROJPOLABO"/>
+      <column name="ID_VALUE" value="SALPROJPOLABO                       "/>
       <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -490,7 +491,7 @@
       <column name="AB_ATTRIBUTERELATIONID" value="25a53e28-d8a1-43d3-9af0-b34ce9c0bc06"/>
       <column name="AB_ATTRIBUTE_ID" value="97b449a5-d9b4-42ff-b9b0-4f8b27b8a9ec"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:52:25"/>
-      <column name="ID_VALUE" value="PRICELISTSPECIAL"/>
+      <column name="ID_VALUE" value="PRICELISTSPECIAL                    "/>
       <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
@@ -567,5 +568,50 @@
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
+    <insert tableName="AB_ATTRIBUTERELATION">
+      <column name="AB_ATTRIBUTERELATIONID" value="af83222e-56e3-4fc8-ab0b-d936227dcde0"/>
+      <column name="AB_ATTRIBUTE_ID" value="0b6d18e3-f6c8-488f-80e0-267364e444da"/>
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="ID_VALUE" value="0385b6e3-00cc-4018-847f-152364c3c11e"/>
+      <column name="OBJECT_ROWID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="OBJECT_TYPE" value="Ticket"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_ATTRIBUTERELATION">
+      <column name="AB_ATTRIBUTERELATIONID" value="9953ea99-685d-4fbb-afe7-eeeca76fb758"/>
+      <column name="AB_ATTRIBUTE_ID" value="1881ffcd-bbf1-443c-b379-a08f7bb92b88"/>
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="ID_VALUE" value="6d0cce07-4767-477b-af51-e9782ebdbe25"/>
+      <column name="OBJECT_ROWID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="OBJECT_TYPE" value="Ticket"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_ATTRIBUTERELATION">
+      <column name="AB_ATTRIBUTERELATIONID" value="88420b13-3678-4743-bcf2-fa3c0b5166c9"/>
+      <column name="AB_ATTRIBUTE_ID" value="92dde095-1b3a-4e90-9a90-1947d3e5d734"/>
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="ID_VALUE" value="72bcad07-6f26-48c0-84b0-1e6ab46d88a9"/>
+      <column name="OBJECT_ROWID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="OBJECT_TYPE" value="Ticket"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_ATTRIBUTERELATION">
+      <column name="AB_ATTRIBUTERELATIONID" value="41760794-1b3e-418d-9dd0-233ddbdfedce"/>
+      <column name="AB_ATTRIBUTE_ID" value="a4c2bcc5-5a3d-4a70-b936-9a330329c63a"/>
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="INT_VALUE" valueNumeric="0"/>
+      <column name="OBJECT_ROWID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="OBJECT_TYPE" value="Ticket"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_ATTRIBUTERELATION">
+      <column name="AB_ATTRIBUTERELATIONID" value="6d919048-7873-449a-9378-8f72bddee5de"/>
+      <column name="AB_ATTRIBUTE_ID" value="af312508-8a9b-4b8f-88f3-6b98005c749e"/>
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="ID_VALUE" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/>
+      <column name="OBJECT_ROWID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="OBJECT_TYPE" value="Ticket"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_LOGHISTORY.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_LOGHISTORY.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16c520f3315b05840fb0ce9007e27d8cdcb4537f
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_LOGHISTORY.xml
@@ -0,0 +1,174 @@
+<?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="autogenerated" id="ae2b12f9ced0c8f6d5df6966c0821b98">
+    <delete tableName="AB_LOGHISTORY"/>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-02T01:58:02"/>
+      <column name="DESCRIPTION" value="Kopftext: &quot;Gerne bieten wir Ihnen wie folgt an:&quot;,&#10;Verknüpfung: &quot;Herr Markus Altinger | Industrial Steel AG&quot;,&#10;Datum: &quot;11.09.2018&quot;,&#10;Belegnummer: &quot;1015&quot;,&#10;Vers.-Nr.: &quot;1&quot;,&#10;Währung: &quot;EUR                                 &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="SALESORDER"/>
+      <column name="TABLENAMEID" value="50c64e0f-6a21-4842-ab41-b27c70d0939a"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-02T01:58:03"/>
+      <column name="DESCRIPTION" value="Betrag netto: &quot;0&quot;,&#10;UmsSt.: &quot;0&quot; geändert."/>
+      <column name="LOGTYPE" value="U"/>
+      <column name="TABLENAME" value="SALESORDER"/>
+      <column name="TABLENAMEID" value="50c64e0f-6a21-4842-ab41-b27c70d0939a"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T05:58:58"/>
+      <column name="DESCRIPTION" value="Entry date: &quot;04.09.2019&quot;,&#10;Betreff: &quot;Hier liegt die Kampagne für die Hannovermesse&quot;,&#10;Verantwortlich: &quot;c7ddf982-0e58-4152-b82b-8f5673b0b729&quot;,&#10;Beschreibung: &quot;&lt;p&gt;Bitte pr&amp;uuml;fen ob alle Angaben passen und wir das so best&amp;auml;tigen k&amp;ouml;nnen.&lt;/p&gt;&#10;&quot;,&#10;Kategorie: &quot;MAIL                                &quot;,&#10;Richtung: &quot;x                                   &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="22924044-c41d-4130-b9c2-de51e3c9e928"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T05:58:58"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;22924044-c41d-4130-b9c2-de51e3c9e928&quot;,&#10;Objekt: &quot;a10eaf09-7230-4889-a601-776de71cb71b&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="4d12c3fe-358a-440b-9008-33c58b235502"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T06:00:16"/>
+      <column name="DESCRIPTION" value="Entry date: &quot;04.09.2019&quot;,&#10;Betreff: &quot;Kickoff Meeting am 1. Oktober&quot;,&#10;Verantwortlich: &quot;c7ddf982-0e58-4152-b82b-8f5673b0b729&quot;,&#10;Beschreibung: &quot;&lt;p&gt;Alle Teilnehmer werden zum Termin anwesend sein, werden den Ablauf und das Standpersonal besprechen.&lt;/p&gt;&#10;&quot;,&#10;Richtung: &quot;x                                   &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="38a20ed1-f75e-439d-957a-53cbb815a9fe"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T06:00:16"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;38a20ed1-f75e-439d-957a-53cbb815a9fe&quot;,&#10;Objekt: &quot;a10eaf09-7230-4889-a601-776de71cb71b&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="557a8ef1-209f-4d0b-9ca9-b779ccf6ce8c"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:16:41"/>
+      <column name="DESCRIPTION" value="Entry date: &quot;04.09.2019&quot;,&#10;Betreff: &quot;Wichtige Teilnehmer einladen&quot;,&#10;Verantwortlich: &quot;c7ddf982-0e58-4152-b82b-8f5673b0b729&quot;,&#10;Beschreibung: &quot;&lt;p&gt;Hallo Zusammen,&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;bitte ladet alle eure A Kontakte ein f&amp;uuml;r das Event.&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;br /&gt;&#10;Euer Markteting;&lt;/p&gt;&#10;&quot;,&#10;Richtung: &quot;x                                   &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="be9c6fd3-a401-4696-9382-442a20da6266"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:16:41"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;be9c6fd3-a401-4696-9382-442a20da6266&quot;,&#10;Objekt: &quot;996b8af6-13f4-4606-a303-69f941cf6f13&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="bd8df5fe-5aec-4f85-a12b-36a1225955da"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:17:36"/>
+      <column name="DESCRIPTION" value="Entry date: &quot;04.09.2019&quot;,&#10;Betreff: &quot;Einladungen gehen 18.09 raus&quot;,&#10;Verantwortlich: &quot;c7ddf982-0e58-4152-b82b-8f5673b0b729&quot;,&#10;Beschreibung: &quot;&lt;p&gt;Erinnerung das heute die Einladungen versandt werden!&lt;/p&gt;&#10;&quot;,&#10;Richtung: &quot;x                                   &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="c42c23ef-3921-4a10-bb9a-040178f28bd2"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:17:36"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;c42c23ef-3921-4a10-bb9a-040178f28bd2&quot;,&#10;Objekt: &quot;996b8af6-13f4-4606-a303-69f941cf6f13&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="62db9cd0-b240-4009-822e-a40cb81b671f"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:17:53"/>
+      <column name="DESCRIPTION" value="Beschreibung: &quot;&lt;p&gt;Erinnerung das am 18.09 die Einladungen versandt werden!&lt;/p&gt;&#10;&quot; geändert."/>
+      <column name="LOGTYPE" value="U"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="c42c23ef-3921-4a10-bb9a-040178f28bd2"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:20:53"/>
+      <column name="DESCRIPTION" value="Entry date: &quot;27.08.2019&quot;,&#10;Betreff: &quot;Erste Planung für die Kampagne gelaufen&quot;,&#10;Verantwortlich: &quot;c7ddf982-0e58-4152-b82b-8f5673b0b729&quot;,&#10;Beschreibung: &quot;&lt;p&gt;Hallo zusammen,&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;wir sind sehr froh euch mitteilen zu d&amp;uuml;rfen das wir die ersten Vorbereitungen f&amp;uuml;r die Messe geplant haben.&lt;/p&gt;&#10;&#10;&lt;p&gt;Weitere Infos werden euch zum passenden Zeitpunkt zugespielt.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;br /&gt;&#10;Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Das Marketing&lt;/p&gt;&#10;&quot;,&#10;Richtung: &quot;x                                   &quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITY"/>
+      <column name="TABLENAMEID" value="0eec5c89-272c-4675-b8a3-3a17e5cc2907"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:20:53"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;0eec5c89-272c-4675-b8a3-3a17e5cc2907&quot;,&#10;Objekt: &quot;996b8af6-13f4-4606-a303-69f941cf6f13&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="3d6a37b4-33bb-4641-a62a-daed1216f43a"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:23:40"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;0eec5c89-272c-4675-b8a3-3a17e5cc2907&quot;,&#10;Objekt: &quot;680de39f-7f1c-4dca-8c67-9c16c3395c3f&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="25a8fe8a-f75e-4696-970b-660b11540967"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:23:56"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;be9c6fd3-a401-4696-9382-442a20da6266&quot;,&#10;Objekt: &quot;680de39f-7f1c-4dca-8c67-9c16c3395c3f&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="e763809c-f612-4879-be39-6c3f08339093"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-04T09:24:17"/>
+      <column name="DESCRIPTION" value="Activity Id: &quot;c42c23ef-3921-4a10-bb9a-040178f28bd2&quot;,&#10;Objekt: &quot;680de39f-7f1c-4dca-8c67-9c16c3395c3f&quot;,&#10;Art: &quot;Campaign&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="ACTIVITYLINK"/>
+      <column name="TABLENAMEID" value="8d91fe31-c2de-433a-b8ab-691a8970f7e6"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="DESCRIPTION" value="Anforderer: &quot;Herr Tim Admin | meine Firma&quot;,&#10;Status: &quot;zugewiesen&quot;,&#10;Bearbeiter: &quot;Herr Harold Smith | meine Firma&quot;,&#10;Beginn: &quot;05.09.2019&quot;,&#10;Fortschritt: &quot;0%&quot;,&#10;Beschreibung: &quot;Die Funktionalitäten des Tools erfüllen nicht die geforderten Funktionalitäten.&#10;Im Detail:  Die Zeiterfassung kann nicht zu Tickets erfasst werden.&#10;&quot;,&#10;Fällig: &quot;12.09.2019&quot;,&#10;Priorität: &quot;niedrig&quot;,&#10;Betreff: &quot;Projektplanung fehlerhaft&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="TASK"/>
+      <column name="TABLENAMEID" value="998d95e6-3d3b-448b-a634-5516c0e392a5"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="DESCRIPTION" value="Eigenschaft Ticket / Support / Cause: &quot;Anwenderfehler&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="AB_ATTRIBUTERELATION"/>
+      <column name="TABLENAMEID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="DESCRIPTION" value="Eigenschaft Ticket / Support / Modul group: &quot;Produkt&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="AB_ATTRIBUTERELATION"/>
+      <column name="TABLENAMEID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="DESCRIPTION" value="Eigenschaft Ticket / Support / Type: &quot;Fehler&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="AB_ATTRIBUTERELATION"/>
+      <column name="TABLENAMEID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="AB_LOGHISTORY">
+      <column name="DATE_NEW" valueDate="2019-09-05T01:45:19"/>
+      <column name="DESCRIPTION" value="Eigenschaft Ticket / Support / Billable: &quot;Nein&quot; eingefügt."/>
+      <column name="LOGTYPE" value="I"/>
+      <column name="TABLENAME" value="AB_ATTRIBUTERELATION"/>
+      <column name="TABLENAMEID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATION.xml
index 3e9351ef4262234335e9b8e5af9548b2c2bc958e..f6e8f18d6e6d1b31b0769a78724ecb4ac91345a9 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATION.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATION.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="66131cd5-2545-4116-8e29-2a226aaea231">
+  <changeSet author="autogenerated" id="fb09fea0206f1e87c2dee9b007d36cb1">
+    <delete tableName="AB_OBJECTRELATION"/>
     <insert tableName="AB_OBJECTRELATION">
       <column name="AB_OBJECTRELATIONID" value="63ecd05d-f2e5-4957-a496-96a87451a78f"/>
       <column name="AB_OBJECTRELATIONTYPE1" value="47a9e611-79b6-46b6-b767-3a0dfed9d010"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATIONTYPE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATIONTYPE.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bec38eae8f7851100fcb9e4890566fe58f638b7c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/AB_OBJECTRELATIONTYPE.xml
@@ -0,0 +1,159 @@
+<?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="autogenerated" id="0b9dca90e8ab2af14af00eb748fb188a">
+    <delete tableName="AB_OBJECTRELATIONTYPE"/>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="c9b7ce6b-1100-46f6-8498-2da6ac24189e"/>
+      <column name="HIERARCHY" valueNumeric="1"/>
+      <column name="ICON" value="VAADIN:OFFICE"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="parent company"/>
+      <column name="RELATION_TYPE" value="a054875d-b9a2-499d-877b-ccec31358324"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="259babbd-7827-44d4-b9ec-8245d27b5f70"/>
+      <column name="HIERARCHY" valueNumeric="1"/>
+      <column name="ICON" value="VAADIN:OFFICE"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="subsidiary"/>
+      <column name="RELATION_TYPE" value="a054875d-b9a2-499d-877b-ccec31358324"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="c74ad02c-1db9-4f47-8691-aba349dbe316"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:FAMILY"/>
+      <column name="OBJECT_TYPE" value="PrivatePerson"/>
+      <column name="RELATION_TITLE" value="parent of"/>
+      <column name="RELATION_TYPE" value="52f3ec58-71d5-469f-85e4-37ef2eeeb3e0"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="b3b85332-1c86-4cd8-a3b9-34c49c51f01a"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:FAMILY"/>
+      <column name="OBJECT_TYPE" value="PrivatePerson"/>
+      <column name="RELATION_TITLE" value="child of"/>
+      <column name="RELATION_TYPE" value="52f3ec58-71d5-469f-85e4-37ef2eeeb3e0"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="3d2808bf-397b-4220-a563-36b066b5c9a9"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:INFO_CIRCLE"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="supports"/>
+      <column name="RELATION_TYPE" value="5ab4d256-4220-4c28-88d6-1db01e2f4667"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="a51e23c0-d44a-4e39-a79b-7a357fb79cc2"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:INFO_CIRCLE"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="supported by"/>
+      <column name="RELATION_TYPE" value="5ab4d256-4220-4c28-88d6-1db01e2f4667"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="b96a36ff-bc43-4159-a6e7-3d53cba67189"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:USERS"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="supervisor of"/>
+      <column name="RELATION_TYPE" value="4df4160d-6efc-43b3-9b02-710ab3d0228c"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="0a47c346-9b6f-4cdd-8c38-77800d7012f5"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:USERS"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="reports to"/>
+      <column name="RELATION_TYPE" value="4df4160d-6efc-43b3-9b02-710ab3d0228c"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="9d4739ba-33b0-4e87-b281-561e2cbdd277"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:MEGAFONE"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="solicits"/>
+      <column name="RELATION_TYPE" value="ddad6aa3-267b-4784-afbb-98242218fcf5"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="e397b595-38ae-4365-908e-75ee388838eb"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:MEGAFONE"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="promotion target of"/>
+      <column name="RELATION_TYPE" value="ddad6aa3-267b-4784-afbb-98242218fcf5"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="0795a3cd-295b-421b-aed1-decc09b05362"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:USER"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="competitor"/>
+      <column name="RELATION_TYPE" value="032ebe0a-7204-4eec-82a2-cb13b65850d7"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="3cee0474-504f-43cc-844a-715f1a0db271"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:INSTITUTION"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="society"/>
+      <column name="RELATION_TYPE" value="9f65f915-2767-40c4-9e7b-e818e915648f"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="fa879afd-b2c5-4eee-9799-d63c6764b348"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:INSTITUTION"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="member"/>
+      <column name="RELATION_TYPE" value="9f65f915-2767-40c4-9e7b-e818e915648f"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="090f6adc-c2b8-44b7-8c61-39dbb5660aa0"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:USER_CHECK"/>
+      <column name="OBJECT_TYPE" value="Person"/>
+      <column name="RELATION_TITLE" value="acquainted with"/>
+      <column name="RELATION_TYPE" value="84120fad-e7a2-4961-8c29-d00da41efe48"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="47a9e611-79b6-46b6-b767-3a0dfed9d010"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:HANDSHAKE"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+      <column name="RELATION_TITLE" value="collaboration with"/>
+      <column name="RELATION_TYPE" value="091d866f-67e8-4fd6-afdc-e40d0f2be224"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="39e73949-c8d9-46a2-a0b5-18be95e7ba11"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:FAMILY"/>
+      <column name="OBJECT_TYPE" value="PrivatePerson"/>
+      <column name="RELATION_TITLE" value="grandparents of"/>
+      <column name="RELATION_TYPE" value="f36c69c2-6d03-45ef-81a0-f9118ce3f4c6"/>
+      <column name="SIDE" valueNumeric="1"/>
+    </insert>
+    <insert tableName="AB_OBJECTRELATIONTYPE">
+      <column name="AB_OBJECTRELATIONTYPEID" value="a2296f93-2371-4ab8-9f29-ef0795d1e9b2"/>
+      <column name="HIERARCHY" valueNumeric="0"/>
+      <column name="ICON" value="VAADIN:FAMILY"/>
+      <column name="OBJECT_TYPE" value="PrivatePerson"/>
+      <column name="RELATION_TITLE" value="ankle of"/>
+      <column name="RELATION_TYPE" value="f36c69c2-6d03-45ef-81a0-f9118ce3f4c6"/>
+      <column name="SIDE" valueNumeric="2"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY.xml
index b1d262706df9bf12edf9bcce0040c7a6f4a550f1..8942a8c6dbb0d68d6b40ca35dd7f03fbf1aef67a 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY.xml
@@ -1,12 +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-3.6.xsd">
-  <changeSet author="autogenerated" id="f0f5bb59-9d56-4b3c-ad63-9d848f30d08a">
+  <changeSet author="autogenerated" id="8ff343868cb070928b488acb55dbd123">
+    <delete tableName="ACTIVITY"/>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="91f7f3c5-8f36-44a7-ba0b-503a05c81d3b"/>
-      <column name="CATEGORY" value="ONLINE-MEETING"/>
+      <column name="CATEGORY" value="ONLINE-MEETING                      "/>
       <column name="DATE_EDIT" valueDate="2019-05-15T03:48:22"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:46:08"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-04T03:46:00"/>
       <column name="INFO" value="&lt;p&gt;Erste Pr&amp;auml;sentation mit dem Interessenten. Der Verkaufsleiter scheint von unseren Produkten sehr angetan zu sein.&lt;/p&gt;&#10;&#10;&lt;p&gt;Wollte weitere Informationen zu unseren Produkten und ein erstes Angebot.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Erstkontakt mit dem Interessenten"/>
@@ -15,10 +16,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="d608cae4-7b54-4a12-95f3-5b9eac3d04ef"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_EDIT" valueDate="2019-05-15T03:58:00"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:52:31"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-14T03:52:00"/>
       <column name="INFO" value="&lt;p&gt;Hatte ersten Kontakt mit dem Projektzust&amp;auml;ndigen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Erster Kontakt"/>
@@ -27,10 +28,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="e3be48af-e679-4b3a-972f-ad17239e3bb4"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-05T04:04:05"/>
       <column name="DATE_NEW" valueDate="2019-05-15T04:57:48"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-14T04:57:00"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrter Herr Altinger,&lt;/p&gt;&#10;&#10;&lt;p&gt;wie soeben telefonisch vereinbart, erhalten Sie im Anhang die gew&amp;uuml;nschten Informationen.&lt;/p&gt;&#10;&#10;&lt;p&gt;Beste Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Information Produkt A"/>
@@ -39,10 +40,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="a867b04c-b2be-48ec-8108-1144a978f54a"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T10:54:05"/>
       <column name="DATE_NEW" valueDate="2019-05-15T04:59:21"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-25T04:59:00"/>
       <column name="INFO" value="&lt;p&gt;Kunde hatte die erste Produktpr&amp;auml;sentation zu unseren Produkten&amp;nbsp;A und B.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Produktpräsentation"/>
@@ -51,9 +52,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="86bd08ed-38ca-42bb-af5b-2bcfb9d3ee1b"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:01:56"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-11T05:01:00"/>
       <column name="INFO" value="&lt;p&gt;Der potentielle K&amp;auml;ufer hat Produkte unseres Segments gekauft.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Produkt gekauft"/>
@@ -61,10 +62,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="810346d8-ab0e-4f1a-ae78-9f55efcadbe6"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:04:33"/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:05:47"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-04-08T05:05:00"/>
       <column name="INFO" value="&lt;p&gt;Folgende Sonderkondtionen wurden vereinbart:&lt;/p&gt;&#10;&#10;&lt;p&gt;- 10 % Rabatt auf die Produkte&lt;/p&gt;&#10;&#10;&lt;p&gt;- Sonderzahlungs- recht von 30 Tagen netto&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Konditionen und Preise verhandelt"/>
@@ -73,10 +74,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="e2d3cde4-e214-4cef-ae5a-d52da5633094"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:06:09"/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:13:38"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-05-15T05:13:38"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrter Herr Tannenbaum,&lt;/p&gt;&#10;&#10;&lt;p&gt;anbei erhalten Sie unser erneutes Angebot f&amp;uuml;r das gew&amp;uuml;nschte Produkt A.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Wir freuen uns auf die Best&amp;auml;tigung des Angebots und stehen Ihnen bei R&amp;uuml;ckfragen jederzeit zur Verf&amp;uuml;gung.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Beste Gr&amp;uuml;&amp;szlig;e&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Angebot an Interessenten versandt"/>
@@ -87,7 +88,7 @@
       <column name="ACTIVITYID" value="21852330-9c66-42a3-9d25-d053833f146d"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T10:49:59"/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:21:44"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-19T05:21:00"/>
       <column name="INFO" value="&lt;p&gt;Die ersten Informationen zur derzeitigen Situation beim Interessenten gekl&amp;auml;rt.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Austausch zur aktuellen Situation "/>
@@ -96,10 +97,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="52462c82-d05f-4a73-9bac-4d9929d07436"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:09:30"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:49:57"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-26T07:49:00"/>
       <column name="INFO" value="&lt;p&gt;Hallo Herr Altinger,&lt;/p&gt;&#10;&#10;&lt;p&gt;anbei erhalten Sie wie gew&amp;uuml;nscht und vereinbart unser Angebot zu dem Produkten A und B.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Bei Fragen zum Angebot erreichen Sie uns jederzeit unter den bekannten Kontaktdaten.&lt;/p&gt;&#10;&#10;&lt;p&gt;Wir freuen uns auf die Best&amp;auml;tigung des Angebots und auf die bevorstehende Zusammenarbeit.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Mit freundlichen Gr&amp;uuml;&amp;szlig;en&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Unser Angebot"/>
@@ -108,10 +109,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="a42f7cff-53e5-4515-aca2-49c5b4c46f69"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:41:30"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:55:08"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-14T07:55:00"/>
       <column name="INFO" value="&lt;p&gt;Kurzes Gespr&amp;auml;ch gef&amp;uuml;hrt mit Herr Altinger. Haben die ersten Fragen gekl&amp;auml;rt.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Telefonat"/>
@@ -120,10 +121,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="84136771-b2ea-4ad6-a6f7-a08ed228581e"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T10:46:31"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:56:02"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-28T07:56:00"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrte Damen und Herren,&lt;/p&gt;&#10;&#10;&lt;p&gt;es freut uns Ihnen mitteilen zu k&amp;ouml;nnen, dass wir gerne mit Ihnen in die engere Auswahl gehen m&amp;ouml;chten.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Die n&amp;auml;chsten Schritte sind weitere Gespr&amp;auml;che sowie eine Pr&amp;auml;sentation Ihrer Produkte.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Viele Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Markus Altinger&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Auswahlprozess"/>
@@ -132,9 +133,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="2e2e733b-0d88-41aa-80c3-04dab338011a"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:57:15"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-04T07:57:00"/>
       <column name="INFO" value="&lt;p&gt;Der Interessent hat uns auf der Messe besucht. Hatten ein informatives Gespr&amp;auml;ch, konnten Fragestellungen kl&amp;auml;ren.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Besuch auf der Messe"/>
@@ -143,7 +144,7 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="dcf266be-505d-4344-b091-6d9b01007a72"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:59:28"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-13T07:59:00"/>
       <column name="INFO" value="&lt;p&gt;Kunde m&amp;ouml;chte mit uns in die n&amp;auml;chste Runde gehen.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Geheimhaltungsvereinbarung unterzeichnen"/>
@@ -151,10 +152,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="5fcb8c51-22da-49ec-83c4-d47c296c77a7"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:33:47"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:08:29"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-18T08:08:00"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrter Herr von Matterhorn,&lt;/p&gt;&#10;&#10;&lt;p&gt;gerne lassen ich Ihnen ein paar unserer Referenzen aus Ihrer Branche zukommen.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Sollten Sie Interesse an einem Referenzgespr&amp;auml;ch haben, k&amp;ouml;nnen Sie mir gerne Bescheid geben. Ich werde dann die Abstimmung mit einem passenden Kunden f&amp;uuml;r Sie in die Wege leiten.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Herzliche Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Referenzen - Zu unserem Produkt"/>
@@ -163,10 +164,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="8034de5b-48e7-4ca6-bfbf-db86395a4c59"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_EDIT" valueDate="2019-05-28T08:07:03"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:12:04"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-01T08:12:00"/>
       <column name="INFO" value="&lt;p&gt;Konnten Vor-Ort Termin mit den Ansprechpartnern ausmachen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Vor Ort Termin"/>
@@ -176,7 +177,7 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="7c89c987-2751-4d87-8d42-1ebbd7bdba7f"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:15:11"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-13T08:15:00"/>
       <column name="INFO" value="&lt;p&gt;Die Pr&amp;auml;sentation fand in einer sehr konstruktiven und entspannten Atmosph&amp;auml;re statt.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Präsentation"/>
@@ -184,10 +185,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="dd74c12b-44c5-4c58-a363-48333edd5538"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:37:38"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:16:32"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-29T08:16:00"/>
       <column name="INFO" value="&lt;p&gt;Hallo Herr von Matterhorn,&lt;/p&gt;&#10;&#10;&lt;p&gt;wie soeben telefonisch angek&amp;uuml;ndigt freue ich mich, Ihnen im Anhang dieser Nachricht nun die ausgearbeitete Stellungnahme sowie unser Angebot zukommen zu lassen.&lt;/p&gt;&#10;&#10;&lt;p&gt;Bei Fragen k&amp;ouml;nnen Sie mich jederzeit erreichen.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Viele Gr&amp;uuml;&amp;szlig;e,&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Stellungnahme"/>
@@ -196,10 +197,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="107a18dd-94f1-4df4-8775-6016262951ef"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:35:58"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:17:47"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-28T08:17:00"/>
       <column name="INFO" value="&lt;p&gt;Prim&amp;auml;r die Fragen gem&amp;auml;&amp;szlig; Agenda besprochen - Unterlagen befinden sich auf dem Filerverzeichnis.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Technischer Workshop bzgl. Produktanforderungen"/>
@@ -209,7 +210,7 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="6fe97d41-b44a-42b8-b19d-3ed9ce1cc393"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:47:30"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-14T08:47:00"/>
       <column name="INFO" value="&lt;p&gt;Haben weitere Informationen zu unseren Produkten runtergeladen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Informationen von der Webseite runtergeladen"/>
@@ -219,7 +220,7 @@
       <column name="ACTIVITYID" value="8c88dd83-20cb-4601-b1e0-098f1aef8963"/>
       <column name="DATE_EDIT" valueDate="2019-05-17T08:59:45"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:56:11"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-21T08:56:00"/>
       <column name="INFO" value="&lt;p&gt;Sind auf dem Stand gewesen. Haben&amp;nbsp;unsere Fragen gestellt, Unternehmen kurz vorgestellt. War ein angenehmes Gespr&amp;auml;ch.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Messebesuch"/>
@@ -230,7 +231,7 @@
       <column name="ACTIVITYID" value="325d38fe-e0e8-44b7-b67c-279fcba6a7bd"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:12:52"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:57:17"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-29T08:57:00"/>
       <column name="INFO" value="&lt;p&gt;15.02.2019: Definition einer Long list auf Basis einer umfassenden Marktstudie &amp;uuml;ber gew&amp;uuml;nschte Produkte&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;22.02.2019:&amp;nbsp;&lt;br /&gt;&#10;Information an potentielle Anbieter / Hersteller&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Produkt-Terminplanung"/>
@@ -241,7 +242,7 @@
       <column name="ACTIVITYID" value="a416d1f7-553a-43b6-a084-021ad1f92dd9"/>
       <column name="DATE_EDIT" valueDate="2019-05-17T10:48:04"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:46:27"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-05-01T10:46:00"/>
       <column name="INFO" value="&lt;p&gt;Besuchte Seiten:&lt;/p&gt;&#10;&#10;&lt;p&gt;http://www..&amp;nbsp; &amp;nbsp; &amp;nbsp;/ Besuchsdauer&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Lead über Webseite identifiziert"/>
@@ -252,7 +253,7 @@
       <column name="ACTIVITYID" value="36ec539c-a451-4166-b64d-fb98f1b73481"/>
       <column name="DATE_EDIT" valueDate="2019-05-17T10:49:17"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:48:15"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-05-10T10:48:00"/>
       <column name="INFO" value="&lt;p&gt;Anrede:&lt;/p&gt;&#10;&#10;&lt;p&gt;Name:&lt;/p&gt;&#10;&#10;&lt;p&gt;Vorname:&lt;/p&gt;&#10;&#10;&lt;p&gt;Position:&lt;/p&gt;&#10;&#10;&lt;p&gt;Kontaktaufnahme gew&amp;uuml;nscht: ja&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Kontaktformular Webseite"/>
@@ -261,10 +262,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="a01f1cc6-e588-451d-b22a-6dfe314fda51"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-05-23T10:41:06"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:51:27"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-05-17T10:51:27"/>
       <column name="INFO" value="&lt;p&gt;Hallo Herr Peterson,&lt;/p&gt;&#10;&#10;&lt;p&gt;anbei finden sie unser Informationsmaterial.&lt;/p&gt;&#10;&#10;&lt;p&gt;Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Frau Sommer&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Informationsmaterial"/>
@@ -275,7 +276,7 @@
       <column name="ACTIVITYID" value="7a058394-b360-41e0-aaea-6a3ca625f0d3"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T04:06:35"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:52:54"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-01T08:52:00"/>
       <column name="INFO" value="&lt;p&gt;Infobrosch&amp;uuml;re zu Produkt A runtergeladen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Infobrochüre runtergeladen"/>
@@ -286,7 +287,7 @@
       <column name="ACTIVITYID" value="0e62c5cf-7562-4c03-ae11-e6163acada9f"/>
       <column name="DATE_EDIT" valueDate="2019-05-19T08:57:49"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:55:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-12-26T08:55:00"/>
       <column name="INFO" value="&lt;p&gt;Anrede: Herr&lt;/p&gt;&#10;&#10;&lt;p&gt;Vorname:Markus&lt;/p&gt;&#10;&#10;&lt;p&gt;Nachname:Altinger&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail:maltinger@industrial-steel.de&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Kontaktaufnahme über Kontaktformular"/>
@@ -296,7 +297,7 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="5e95209e-0c7d-4c45-a5de-0d3ccdbc5f08"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:40:13"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-09T05:40:00"/>
       <column name="INFO" value="&lt;p&gt;Frau Decker hat unsere Webseite nach Referenzen und Produkten durchsucht.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="War auf unserer Webseite - Website Tracking"/>
@@ -306,7 +307,7 @@
       <column name="ACTIVITYID" value="0cf02b72-a46a-4cd2-975f-15556618ea90"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T05:43:23"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:42:24"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-01-15T05:42:00"/>
       <column name="INFO" value="&lt;p&gt;Produktinformationen zu Produkt 1 runtergeladen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Produktinformationen runtergeladen."/>
@@ -317,7 +318,7 @@
       <column name="ACTIVITYID" value="dc0d01bc-6a8e-48cc-8ce0-58fc9d83af01"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T04:12:42"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:44:17"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-18T05:44:00"/>
       <column name="INFO" value="&lt;p&gt;Neuer Kontakt hat Informationen von der Seite runtergeleaden.&lt;/p&gt;&#10;&#10;&lt;p&gt;Nachfassen und Potential abfragen.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Nachgefasst - Laut Leadmanagement"/>
@@ -328,7 +329,7 @@
       <column name="ACTIVITYID" value="d6038dc6-a28f-42ad-b17b-094adc98fd8a"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T05:47:10"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:45:42"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-01-22T05:45:00"/>
       <column name="INFO" value="&lt;p&gt;Erstkontakt mit dem Au&amp;szlig;endienst vereinbart. Besonderes Interesse an Produkt 1 und 3&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Telefonat mit Frau Decker für den Außendienst vereinbart."/>
@@ -339,7 +340,7 @@
       <column name="ACTIVITYID" value="e303e7e9-6d16-40cd-a7a9-7196d219d1de"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:36:40"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:47:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-02-08T05:47:00"/>
       <column name="INFO" value="&lt;p&gt;Hatte zusammen mit Frau Decker das erste Gespr&amp;auml;ch zu Produkten 1 und 3.&lt;/p&gt;&#10;&#10;&lt;p&gt;Konnten alle ersten Fragen kl&amp;auml;ren.&lt;/p&gt;&#10;&#10;&lt;p&gt;N&amp;auml;chster Schritt ist ein Termin vor Ort.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Gespräch mit Frau Decker"/>
@@ -350,7 +351,7 @@
       <column name="ACTIVITYID" value="62486e9e-52c6-476f-b1e3-5d62e3f6384e"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:37:07"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:53:02"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-05T05:53:00"/>
       <column name="INFO" value="&lt;p&gt;Termin vor Ort bei Transatlantik Logistics.&lt;/p&gt;&#10;&#10;&lt;p&gt;War ein guter Termin, scheinen von den Produkten sehr angetan zu sein.&lt;/p&gt;&#10;&#10;&lt;p&gt;Weiteres Vorgehen wird n&amp;auml;chste Woche abgestimmt.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Termin vor Ort"/>
@@ -359,10 +360,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="ccbb8eef-5caa-4f6b-ad1e-dbb8ba171650"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:38:39"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:56:06"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-11T05:56:00"/>
       <column name="INFO" value="&lt;p&gt;Herr Morgenstern ist der verantwortliche Vertriebsleiter bei Transatlantik Logistics.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="2. Ansprechpartner kennengelernt"/>
@@ -372,7 +373,7 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="f38f8b69-7c10-4991-af8c-40dda43376f9"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:57:18"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-14T05:57:00"/>
       <column name="INFO" value="&lt;p&gt;Herr Morgenstern hat differenziert von Frau Decker nochmal Fragen zu Produkt 1 und 3.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Telefonat bzgl. offener Fragen"/>
@@ -380,10 +381,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="d6ee3c57-1a49-45d2-8d09-d1480ad3e159"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T09:04:33"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:55:01"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-12T08:55:00"/>
       <column name="INFO" value="&lt;p&gt;Weiteres Telefonat mit Herrn Altinger gef&amp;uuml;hrt.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Hr. Altinger ist sehr begeistert von den M&amp;ouml;glichkeiten des Produktes.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Telefonat mit Interessent"/>
@@ -392,10 +393,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="ed70c795-2a72-40e4-bce7-13aca09da578"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:01:11"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:56:50"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-22T08:56:00"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrter Frau Sommer,&lt;/p&gt;&#10;&#10;&lt;p&gt;wie bereits telefonisch angek&amp;uuml;ndigt, bitten wir um ein Angebot f&amp;uuml;r die Produkte A und B.&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Viele Gr&amp;uuml;&amp;szlig;e&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Markus Altinger&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Industrial Steel AG&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Interessent möchte Angebot zu dem Produkt"/>
@@ -404,10 +405,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="b660824c-4336-4119-b5d3-5d0459764d86"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:01:47"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:06:25"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-22T09:06:00"/>
       <column name="INFO" value="&lt;p&gt;Hr. Altinger hat ein Angebot f&amp;uuml;r die Produkte A und B angefordert. Schickt dazu auch noch eine E-Mail.&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Angebot erstellen"/>
@@ -418,7 +419,7 @@
       <column name="ACTIVITYID" value="26c4ccf9-a59d-483d-83a8-264b5fac219a"/>
       <column name="DATE_EDIT" valueDate="2019-05-23T09:30:46"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:27:23"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-03-22T09:27:00"/>
       <column name="INFO" value="&lt;p&gt;Produktinformationen an Frau Linder weitergegeben.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Informationen an Frau Lindner weitergegeben."/>
@@ -429,7 +430,7 @@
       <column name="ACTIVITYID" value="a586aba1-0880-4705-9d2a-46b19cbdb954"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T10:55:24"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:29:25"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-03-20T09:29:00"/>
       <column name="INFO" value="&lt;p&gt;&amp;Uuml;ber die Landingpage von Produkt C&amp;nbsp;auf uns gekommen.&lt;/p&gt;&#10;&#10;&lt;p&gt;Es&amp;nbsp;besteht weiterhin Interesse an den Produkten&amp;nbsp;A und B.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Über Online-Werbung auf uns aufmerksam geworden."/>
@@ -438,10 +439,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="e2068edd-75cf-4b8a-8ff2-96a3c63956c2"/>
-      <column name="CATEGORY" value="ONLINE-MEETING"/>
+      <column name="CATEGORY" value="ONLINE-MEETING                      "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:19:12"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:48:08"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-04-08T10:48:00"/>
       <column name="INFO" value="&lt;p&gt;Gemeinsamer Termin mit allen Beteiligten der Produkteinf&amp;uuml;hrung:&lt;/p&gt;&#10;&#10;&lt;p&gt;- Definition Herausforderungen&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;- Definition weiterer Terminablauf zur Produkteinf&amp;uuml;hrung&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Erste Phase der Produkt-Planung gestartet"/>
@@ -452,7 +453,7 @@
       <column name="ACTIVITYID" value="7fa61c35-0b88-4e01-aadf-73101245a2e8"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:26:41"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:49:26"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-04-25T10:49:00"/>
       <column name="INFO" value="&lt;p&gt;Erste Phase der Planung&amp;nbsp;erfolgreich abgeschlossen.&lt;/p&gt;&#10;&#10;&lt;p&gt;Produktkonfiguration fertig gestellt.&lt;/p&gt;&#10;&#10;&lt;p&gt;Individuelles Produkt geht in die Produktion.&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Erste Phase der Produkt-Planung abgeschlossen"/>
@@ -461,10 +462,10 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="aaf320cd-b849-4062-a3b4-e6636230c114"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_EDIT" valueDate="2019-06-11T02:27:26"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:50:46"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2019-05-23T10:50:46"/>
       <column name="INFO" value="&lt;p&gt;Sehr geehrte Damen und Herren,&lt;/p&gt;&#10;&#10;&lt;p&gt;die Produktion des Produktes startet. &amp;Uuml;ber den Verlauf und den aktuellen Stand der Produktion k&amp;ouml;nnen Sie sich in unserem Kundenportal informieren.&lt;/p&gt;&#10;&#10;&lt;p&gt;Viele Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Lisa Sommer&lt;/p&gt;&#10;&#10;&lt;p&gt;meine Firma&lt;/p&gt;&#10;&#10;&lt;p&gt;Wilhelm-Str. 2&lt;/p&gt;&#10;&#10;&lt;p&gt;80807 M&amp;uuml;nchen&lt;/p&gt;&#10;&#10;&lt;p&gt;Fon: +49 8763 1333&lt;/p&gt;&#10;&#10;&lt;p&gt;E-Mail: lsommer@meine-firma.de&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="2. Phase der Produkt-Planung startet"/>
@@ -474,16 +475,16 @@
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="81b4d02f-be0b-4437-b51d-d5c833adede4"/>
       <column name="DATE_NEW" valueDate="2019-06-11T02:30:16"/>
-      <column name="DIRECTION" value="inx"/>
+      <column name="DIRECTION" value="inx                                 "/>
       <column name="ENTRYDATE" valueDate="2019-06-11T02:30:16"/>
       <column name="SUBJECT" value="Rahmenvertrag"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="502167d7-8946-41bb-9353-8bafde8c7b09"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_NEW" valueDate="2019-06-11T02:38:27"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2019-04-17T02:38:00"/>
       <column name="INFO" value="&lt;p&gt;Hr. von Matterhorn hatte die erfreuliche Nachricht, dass sie sich f&amp;uuml;r unser Produkt entschieden haben;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Vertrag kann nun fertig gemacht und zugesandt werden&amp;nbsp;&lt;/p&gt;&#10;"/>
       <column name="SUBJECT" value="Rückmeldung zum Angebot "/>
@@ -491,9 +492,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="de110a33-bcab-407e-9d60-7a65f028159b"/>
-      <column name="CATEGORY" value="ONLINE-MEETING"/>
+      <column name="CATEGORY" value="ONLINE-MEETING                      "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2017-04-13T02:41:22"/>
       <column name="INFO" value="Informationen sind zu seiner Zufriedenheit gewesen, sendet eine Email mit einer konkreten Anfrage."/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -502,9 +503,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="de110a35-aaab-407e-9d60-7a65f028159b"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-02-22T03:41:22"/>
       <column name="INFO" value="erworben von Roboterabteilung"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -513,9 +514,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="de110a35-bcab-407e-9d60-7a65f028159b"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-06-03T02:41:22"/>
       <column name="INFO" value="Spezifikation ausgefüllt und abgeschickt"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -524,9 +525,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="aa110a35-bcab-407e-9d60-7a65f028159b"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-06-03T02:41:22"/>
       <column name="INFO" value="Angebot nachfassen, wir liegen vor Wettbewerb"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -535,20 +536,20 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="661a7b87-68ae-4d52-bc22-6bf96184e6fe"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-03T02:02:52"/>
-      <column name="INFO" valueClobFile="ACTIVITY/INFO/clobFiles/908b219b-83e6-4148-84a8-84db75fe8683.txt"/>
+      <column name="INFO" valueClobFile="ACTIVITY/INFO/clobFiles/efe9f361ec5970ad019a0dd191e88d1e.txt"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Webinar: Transparentes Kampagnen- und Veranstaltungsmanagement"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="9dda39bf-966c-4560-be03-5ddbbc1da84a"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-07-31T02:02:52"/>
       <column name="INFO" value="Aufzeichnungen zum Thema &quot;Transparentes Kampagnen- und Veranstaltungsmanagement&quot; verschickt."/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -557,9 +558,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="94365b81-cddd-4f56-8379-7ba0a98840a4"/>
-      <column name="CATEGORY" value="ONLINE-MEETING"/>
+      <column name="CATEGORY" value="ONLINE-MEETING                      "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-03T02:02:52"/>
       <column name="INFO" value="Hat uns Zusatzinfos geschickt - diese wurden an allen entsprechenden Stellen hinterlegt und final eingepflegt"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -568,9 +569,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="6397161c-afed-40cf-a1bd-12e657054ce4"/>
-      <column name="CATEGORY" value="ONLINE-MEETING"/>
+      <column name="CATEGORY" value="ONLINE-MEETING                      "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-06T02:02:52"/>
       <column name="INFO" value="Abgleich der Bestandsdaten wurde gemacht."/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -579,9 +580,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="b378876d-dba5-4e41-865f-9ac056bffa60"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-04T02:02:52"/>
       <column name="INFO" value="Vertragsgrundlagen besprochen. Wird in den nächsten Tagen definiert"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -590,9 +591,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="beda92e0-bbd6-423a-8b49-78da30064e84"/>
-      <column name="CATEGORY" value="PHONE"/>
+      <column name="CATEGORY" value="PHONE                               "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-09T02:02:52"/>
       <column name="INFO" value="Ein Standortwechsel steht an und die neuen Daten wurden erfasst."/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -601,9 +602,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="56c78f3d-e126-4e36-8031-d5eef9877243"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-04T02:02:52"/>
       <column name="INFO" value="Messeeinladung und besondere Eintrittkarten zukommen lassen. Hat sich sehr gefreut"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -612,9 +613,9 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="9f498736-c523-4c63-8c53-28e49324b52b"/>
-      <column name="CATEGORY" value="MAIL"/>
+      <column name="CATEGORY" value="MAIL                                "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="i"/>
+      <column name="DIRECTION" value="i                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-12T02:02:52"/>
       <column name="INFO" value="Terminvorschlag gesendet. Aufgabe gestellt"/>
       <column name="RESPONSIBLE" value="Admin"/>
@@ -623,14 +624,67 @@
     </insert>
     <insert tableName="ACTIVITY">
       <column name="ACTIVITYID" value="1c711078-8324-4fcf-93ec-2c8aa29c0cc6"/>
-      <column name="CATEGORY" value="VISIT"/>
+      <column name="CATEGORY" value="VISIT                               "/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="DIRECTION" value="o"/>
+      <column name="DIRECTION" value="o                                   "/>
       <column name="ENTRYDATE" valueDate="2018-08-11T02:02:52"/>
       <column name="INFO" value="Einladung von Kunden, Interessenten und Zulieferern zu einer internen Veranstaltung in unserem Haus"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Einladung zum GfK-Abend"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
+    <insert tableName="ACTIVITY">
+      <column name="ACTIVITYID" value="22924044-c41d-4130-b9c2-de51e3c9e928"/>
+      <column name="CATEGORY" value="MAIL                                "/>
+      <column name="DATE_NEW" valueDate="2019-09-04T05:57:51"/>
+      <column name="DIRECTION" value="x                                   "/>
+      <column name="ENTRYDATE" valueDate="2019-09-04T05:57:51"/>
+      <column name="INFO" value="&lt;p&gt;Bitte pr&amp;uuml;fen ob alle Angaben passen und wir das so best&amp;auml;tigen k&amp;ouml;nnen.&lt;/p&gt;&#10;"/>
+      <column name="RESPONSIBLE" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="SUBJECT" value="Hier liegt die Kampagne für die Hannovermesse"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITY">
+      <column name="ACTIVITYID" value="38a20ed1-f75e-439d-957a-53cbb815a9fe"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T05:59:27"/>
+      <column name="DIRECTION" value="x                                   "/>
+      <column name="ENTRYDATE" valueDate="2019-09-04T05:59:27"/>
+      <column name="INFO" value="&lt;p&gt;Alle Teilnehmer werden zum Termin anwesend sein, werden den Ablauf und das Standpersonal besprechen.&lt;/p&gt;&#10;"/>
+      <column name="RESPONSIBLE" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="SUBJECT" value="Kickoff Meeting am 1. Oktober"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITY">
+      <column name="ACTIVITYID" value="be9c6fd3-a401-4696-9382-442a20da6266"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:15:52"/>
+      <column name="DIRECTION" value="x                                   "/>
+      <column name="ENTRYDATE" valueDate="2019-09-04T09:15:52"/>
+      <column name="INFO" value="&lt;p&gt;Hallo Zusammen,&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;bitte ladet alle eure A Kontakte ein f&amp;uuml;r das Event.&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;br /&gt;&#10;Euer Markteting;&lt;/p&gt;&#10;"/>
+      <column name="RESPONSIBLE" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="SUBJECT" value="Wichtige Teilnehmer einladen"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITY">
+      <column name="ACTIVITYID" value="c42c23ef-3921-4a10-bb9a-040178f28bd2"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04T09:17:42"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:16:51"/>
+      <column name="DIRECTION" value="x                                   "/>
+      <column name="ENTRYDATE" valueDate="2019-09-04T09:16:00"/>
+      <column name="INFO" value="&lt;p&gt;Erinnerung das am 18.09 die Einladungen versandt werden!&lt;/p&gt;&#10;"/>
+      <column name="RESPONSIBLE" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="SUBJECT" value="Einladungen gehen 18.09 raus"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITY">
+      <column name="ACTIVITYID" value="0eec5c89-272c-4675-b8a3-3a17e5cc2907"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:19:40"/>
+      <column name="DIRECTION" value="x                                   "/>
+      <column name="ENTRYDATE" valueDate="2019-08-27T09:19:00"/>
+      <column name="INFO" value="&lt;p&gt;Hallo zusammen,&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#10;&#10;&lt;p&gt;wir sind sehr froh euch mitteilen zu d&amp;uuml;rfen das wir die ersten Vorbereitungen f&amp;uuml;r die Messe geplant haben.&lt;/p&gt;&#10;&#10;&lt;p&gt;Weitere Infos werden euch zum passenden Zeitpunkt zugespielt.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;br /&gt;&#10;Gr&amp;uuml;&amp;szlig;e&lt;/p&gt;&#10;&#10;&lt;p&gt;Das Marketing&lt;/p&gt;&#10;"/>
+      <column name="RESPONSIBLE" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="SUBJECT" value="Erste Planung für die Kampagne gelaufen"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY/INFO/clobFiles/908b219b-83e6-4148-84a8-84db75fe8683.txt b/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY/INFO/clobFiles/efe9f361ec5970ad019a0dd191e88d1e.txt
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY/INFO/clobFiles/908b219b-83e6-4148-84a8-84db75fe8683.txt
rename to .liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITY/INFO/clobFiles/efe9f361ec5970ad019a0dd191e88d1e.txt
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITYLINK.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITYLINK.xml
index 85e8b25f4d1c81f92d9572ddd3e7b7fbae7c8a21..6141916990b2fd738f057cb723fc8ec4e23fcc33 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITYLINK.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/ACTIVITYLINK.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="72e2f2ed-ecc0-41e5-87d2-426d989a024d">
+  <changeSet author="autogenerated" id="a8abb1d207bdad327f9978a4db4858bd">
+    <delete tableName="ACTIVITYLINK"/>
     <insert tableName="ACTIVITYLINK">
       <column name="ACTIVITYLINKID" value="7f9cbd45-7ff0-4d7d-9412-58db6245f400"/>
       <column name="ACTIVITY_ID" value="91f7f3c5-8f36-44a7-ba0b-503a05c81d3b"/>
@@ -1115,5 +1116,69 @@
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="4d12c3fe-358a-440b-9008-33c58b235502"/>
+      <column name="ACTIVITY_ID" value="22924044-c41d-4130-b9c2-de51e3c9e928"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T05:58:58"/>
+      <column name="OBJECT_ROWID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="557a8ef1-209f-4d0b-9ca9-b779ccf6ce8c"/>
+      <column name="ACTIVITY_ID" value="38a20ed1-f75e-439d-957a-53cbb815a9fe"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T06:00:16"/>
+      <column name="OBJECT_ROWID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="bd8df5fe-5aec-4f85-a12b-36a1225955da"/>
+      <column name="ACTIVITY_ID" value="be9c6fd3-a401-4696-9382-442a20da6266"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:16:41"/>
+      <column name="OBJECT_ROWID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="62db9cd0-b240-4009-822e-a40cb81b671f"/>
+      <column name="ACTIVITY_ID" value="c42c23ef-3921-4a10-bb9a-040178f28bd2"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:17:36"/>
+      <column name="OBJECT_ROWID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="3d6a37b4-33bb-4641-a62a-daed1216f43a"/>
+      <column name="ACTIVITY_ID" value="0eec5c89-272c-4675-b8a3-3a17e5cc2907"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:20:53"/>
+      <column name="OBJECT_ROWID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="25a8fe8a-f75e-4696-970b-660b11540967"/>
+      <column name="ACTIVITY_ID" value="0eec5c89-272c-4675-b8a3-3a17e5cc2907"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:23:40"/>
+      <column name="OBJECT_ROWID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="e763809c-f612-4879-be39-6c3f08339093"/>
+      <column name="ACTIVITY_ID" value="be9c6fd3-a401-4696-9382-442a20da6266"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:23:56"/>
+      <column name="OBJECT_ROWID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ACTIVITYLINK">
+      <column name="ACTIVITYLINKID" value="8d91fe31-c2de-433a-b8ab-691a8970f7e6"/>
+      <column name="ACTIVITY_ID" value="c42c23ef-3921-4a10-bb9a-040178f28bd2"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:24:17"/>
+      <column name="OBJECT_ROWID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ADDRESS.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ADDRESS.xml
index 3992ba1838939e8cff2f170498463e6ca9c8a300..65ea102ceb36cc0cd7f8877d02e2dbbdd03b1e75 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/ADDRESS.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/ADDRESS.xml
@@ -1,10 +1,11 @@
 <?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="autogenerated" id="d2e11022-b07b-4bc2-a6b3-0c2dc922f6e6">
+  <changeSet author="autogenerated" id="32ba36cd8182bb8ea3c3affd5cbd4247">
+    <delete tableName="ADDRESS"/>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Spresstrasse"/>
       <column name="ADDRESSID" value="f00966ec-693b-4bb5-8c66-26a40f18394f"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="67"/>
       <column name="CITY" value="Bielefeld Babenhausen"/>
       <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
@@ -18,7 +19,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Kurfürstendamm"/>
       <column name="ADDRESSID" value="85bc81b9-5553-42a8-a643-eb47e1ed3c42"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="95"/>
       <column name="CITY" value="Rostock"/>
       <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
@@ -32,7 +33,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Stahlstraße"/>
       <column name="ADDRESSID" value="4eb7039a-1515-4545-86b4-85426a67fcd5"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="24"/>
       <column name="CITY" value="Hamburg"/>
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
@@ -45,7 +46,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Hafenstraße"/>
       <column name="ADDRESSID" value="7d116e5e-0c6b-475b-91e7-7cae94b65321"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="12"/>
       <column name="CITY" value="Friedrichshafen"/>
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
@@ -58,7 +59,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Baustraße"/>
       <column name="ADDRESSID" value="35e93f95-d723-46d6-955f-9192e41e3d83"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="64"/>
       <column name="CITY" value="Stuttgart"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
@@ -71,7 +72,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Kronenstraße"/>
       <column name="ADDRESSID" value="8923fff3-4294-4892-b3f3-8470ae89555e"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="45"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
@@ -84,7 +85,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Grassstraße"/>
       <column name="ADDRESSID" value="2a03d8cb-ffb7-4d04-b8b2-e55354380fb7"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="32"/>
       <column name="CITY" value="Geisenhausen"/>
       <column name="CONTACT_ID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
@@ -97,7 +98,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Leasingstrasse"/>
       <column name="ADDRESSID" value="36723051-8a5f-47d3-8185-71c82d463eb3"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="78"/>
       <column name="CITY" value="Berlin"/>
       <column name="CONTACT_ID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
@@ -110,7 +111,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Eichenallee"/>
       <column name="ADDRESSID" value="1a20347c-ab56-41cb-a7dc-bd61de7e2106"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="45"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
@@ -123,7 +124,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Steinstraße"/>
       <column name="ADDRESSID" value="85ab4644-98f1-41ae-8678-67e76dd03706"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="35"/>
       <column name="CITY" value="Regensburg"/>
       <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
@@ -136,7 +137,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Dotterblumenstrasse"/>
       <column name="ADDRESSID" value="25360df5-104e-4903-8440-f848d025a24b"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="CITY" value="Ingolstadt"/>
       <column name="CONTACT_ID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
       <column name="COUNTRY" value="DE"/>
@@ -148,7 +149,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Birkenstrasse"/>
       <column name="ADDRESSID" value="e1aef1b7-569b-46be-bc50-f02332a42ef1"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="78"/>
       <column name="CITY" value="Augsburg"/>
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
@@ -161,7 +162,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Bogenallee"/>
       <column name="ADDRESSID" value="e0a93855-d573-405b-8ee2-3b3927762d21"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="6"/>
       <column name="CITY" value="Bremen"/>
       <column name="CONTACT_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
@@ -174,7 +175,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Grabweg"/>
       <column name="ADDRESSID" value="ea50cb02-7d4d-433d-9cd3-c262d5a0bb27"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="17a"/>
       <column name="CITY" value="Neumünster"/>
       <column name="CONTACT_ID" value="449080f6-b714-4189-a261-37439d0d4010"/>
@@ -190,7 +191,7 @@
       <column name="ADDRESS" value="Wilhelm-Straße"/>
       <column name="ADDRESSID" value="14d03432-985b-4efe-a634-da71ae482907"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="2"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
@@ -205,82 +206,82 @@
       <column name="ADDRESS" value="Laufertorgraben"/>
       <column name="ADDRESSID" value="14d01332-985b-4efe-a634-da71ae482907"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="25"/>
       <column name="CITY" value="Nürnberg"/>
       <column name="CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DISTRICT" value="Nürnberg"/>
-      <column name="REGION" value="Mittelfranken"/>
       <column name="PROVINCE" value="Bayern"/>
+      <column name="REGION" value="Mittelfranken"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="90419"/>
     </insert>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Neustadt"/>
       <column name="ADDRESSID" value="11d01332-985b-4efe-a634-da71ae482907"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="12"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DISTRICT" value="Niederbayern"/>
-      <column name="REGION" value="Niederbayern"/>
       <column name="PROVINCE" value="Bayern"/>
+      <column name="REGION" value="Niederbayern"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Neustadt"/>
       <column name="ADDRESSID" value="ce990566-3b86-48fe-bd0c-1167142e584b"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="12"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DISTRICT" value="Niederbayern"/>
-      <column name="REGION" value="Niederbayern"/>
       <column name="PROVINCE" value="Bayern"/>
+      <column name="REGION" value="Niederbayern"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Neustadt"/>
       <column name="ADDRESSID" value="43b8aea1-2444-448f-87c5-f12fe1ef4ca0"/>
-      <column name="ADDR_TYPE" value="DELIVERADDR"/>
+      <column name="ADDR_TYPE" value="DELIVERADDR                         "/>
       <column name="BUILDINGNO" value="13"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DISTRICT" value="Niederbayern"/>
-      <column name="REGION" value="Niederbayern"/>
       <column name="PROVINCE" value="Bayern"/>
+      <column name="REGION" value="Niederbayern"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Hauptstraße"/>
       <column name="ADDRESSID" value="89cbad0e-9901-42e2-ae40-a5a20c7ed5c8"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="110"/>
       <column name="CITY" value="Windach"/>
       <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DISTRICT" value="Oberbayern"/>
-      <column name="REGION" value="Landsberg am Lech"/>
       <column name="PROVINCE" value="Bayern"/>
+      <column name="REGION" value="Landsberg am Lech"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="86949"/>
     </insert>
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Rudolstaedter Strasse"/>
       <column name="ADDRESSID" value="0e6d2504-adda-453a-bb36-981e6d0f06c7"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="77"/>
       <column name="CITY" value="Heinrichsthal"/>
       <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
@@ -295,7 +296,7 @@
       <column name="ADDRESS" value="Muster-Straße"/>
       <column name="ADDRESSID" value="6a3f6232-7a66-4a72-8d2d-66a3a9f1b9ea"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="3"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
@@ -310,7 +311,7 @@
       <column name="ADDRESS" value="Lützowplatz"/>
       <column name="ADDRESSID" value="f54606ee-ecdd-4859-ad7d-aa096c5e9596"/>
       <column name="ADDRIDENTIFIER" value="Tor 4"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="35"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
@@ -327,7 +328,7 @@
       <column name="ADDRESS" value="Hildburghausen"/>
       <column name="ADDRESSID" value="92a244c5-6065-458c-abc7-57d0dc955011"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="48"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
@@ -344,7 +345,7 @@
       <column name="ADDRESS" value="Rudower Strasse"/>
       <column name="ADDRESSID" value="90726b19-f23c-42dd-847a-7eacf4c71d18"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="6"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
@@ -358,7 +359,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Büsingstrasse"/>
       <column name="ADDRESSID" value="5773392d-cc7a-4170-8ffe-867807634c3c"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="32"/>
       <column name="CITY" value="Bergkirchen"/>
       <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
@@ -372,7 +373,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Landsberger Allee"/>
       <column name="ADDRESSID" value="8f6da43d-adc5-410e-8bc5-14adca88ebfe"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="83"/>
       <column name="CITY" value="München"/>
       <column name="CONTACT_ID" value="73d731a2-e7f5-11e8-9f32-f2801f1b9fd1"/>
@@ -386,7 +387,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Grosse Praesidenten Str."/>
       <column name="ADDRESSID" value="84e040be-5a5f-48e7-be2c-769d4a169390"/>
-      <column name="ADDR_TYPE" value="HOMEADDR"/>
+      <column name="ADDR_TYPE" value="HOMEADDR                            "/>
       <column name="BUILDINGNO" value="48"/>
       <column name="CITY" value="Niederkirchen"/>
       <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
@@ -400,7 +401,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Lagerstraße"/>
       <column name="ADDRESSID" value="dd1a1831-b05a-41a7-a4e9-d73be9d77934"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="2"/>
       <column name="CITY" value="Augsburg"/>
       <column name="CONTACT_ID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
@@ -413,7 +414,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Großstraße"/>
       <column name="ADDRESSID" value="da05619e-47c6-4144-a698-f0f830d9f755"/>
-      <column name="ADDR_TYPE" value="DELIVERADDR"/>
+      <column name="ADDR_TYPE" value="DELIVERADDR                         "/>
       <column name="BUILDINGNO" value="6"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
@@ -426,7 +427,7 @@
     <insert tableName="ADDRESS">
       <column name="ADDRESS" value="Augsburger Straße"/>
       <column name="ADDRESSID" value="8ac42a08-6e71-4bc4-a46d-5cf17e4a941c"/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="6"/>
       <column name="CITY" value="Augsburg"/>
       <column name="CONTACT_ID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
@@ -440,14 +441,14 @@
       <column name="ADDRESS" value="Hildburghausen"/>
       <column name="ADDRESSID" value="2825d85f-879a-4899-a1bb-a6750ad2aee9"/>
       <column name="ADDRIDENTIFIER" value="Tor 1 "/>
-      <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="ADDR_TYPE" value="OFFICEADDR                          "/>
       <column name="BUILDINGNO" value="48"/>
       <column name="CITY" value="Landshut"/>
       <column name="CONTACT_ID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-06-07T02:45:53"/>
-      <column name="REGION" value="Niederbayern "/>
       <column name="PROVINCE" value="Bayern "/>
+      <column name="REGION" value="Niederbayern "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="84034"/>
     </insert>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGN.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGN.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0f76d8eb2423580c49fe7e0e32d0bec59c8993f2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGN.xml
@@ -0,0 +1,48 @@
+<?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="autogenerated" id="93b8e9dd752227425ca64165c97e7b3b">
+    <delete tableName="CAMPAIGN"/>
+    <insert tableName="CAMPAIGN">
+      <column name="CAMPAIGNID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-02"/>
+      <column name="DESCRIPTION" value="Prüfung unserer Software durch Teilnehmer"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="NAME" value="CRM-Scan"/>
+      <column name="STATUS" value="PLANNING                            "/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGN">
+      <column name="CAMPAIGNID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DESCRIPTION" value="Messe um neue Kontakte zu akquirieren."/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="NAME" value="Vertriebsmesse"/>
+      <column name="STATUS" value="PLANNING                            "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGN">
+      <column name="CAMPAIGNID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DESCRIPTION" value="Zweijährige Messe."/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="NAME" value="Hannovermesse"/>
+      <column name="STATUS" value="PLANNING                            "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGN">
+      <column name="CAMPAIGNID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DESCRIPTION" value="An unsererem  Kundentag können sich bestehende Kunden und Interessenten  austauschen."/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="NAME" value="Interner Kundentag"/>
+      <column name="STATUS" value="PLANNING                            "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNCOST.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNCOST.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a3d681ec8fca1190ad32384b82b698a8b8d22ba
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNCOST.xml
@@ -0,0 +1,82 @@
+<?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="autogenerated" id="3711362686cd2356de66411028f25858">
+    <delete tableName="CAMPAIGNCOST"/>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="ebbc4865-1646-4c61-afc5-2f0af305f9e2"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CATEGORY" value="SHIPCOST                            "/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="NET" valueNumeric="150.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="7b8fd98d-f947-46d8-ad6b-271378aca137"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CATEGORY" value="PRINTCOST                           "/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="NET" valueNumeric="250.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="ea5d6362-b629-4026-96fd-adbb89641428"/>
+      <column name="CAMPAIGNSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CATEGORY" value="PRINTCOST                           "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="100.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="09e7f86f-983d-4e68-bf19-54018fa9b230"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CATEGORY" value="SHIPCOST                            "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="250.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="1d9bc85b-48a6-423b-b59f-dbc32b27c917"/>
+      <column name="CAMPAIGNSTEP_ID" value="fd5d676b-94a3-441e-9b55-eceffc2a0b49"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CATEGORY" value="LAYOUTCOST                          "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="250.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="293f7a24-191a-4ccd-83c2-4adf976d8dcd"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CATEGORY" value="LAYOUTCOST                          "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="1000.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="c2a145a2-3e12-4a1c-825a-d5555256062a"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CATEGORY" value="PRINTCOST                           "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="500.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="2af457dd-d4ef-4faa-8d33-dca3346dfd10"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CATEGORY" value="LAYOUTCOST                          "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="500.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNCOST">
+      <column name="CAMPAIGNCOSTID" value="bb77c632-a0a1-4bfb-89de-8a80dc00d8ff"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CATEGORY" value="LAYOUTCOST                          "/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="NET" valueNumeric="1000.00"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANT.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANT.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8fb5da369f417d2853738a4dd927b41ace9ed5ef
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANT.xml
@@ -0,0 +1,496 @@
+<?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="autogenerated" id="a4a69337d2a69b349cc68b5a23057634">
+    <delete tableName="CAMPAIGNPARTICIPANT"/>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="f0ece45a-0132-449f-a2bc-63511f481670"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="1c330b1d-f122-4dfc-8450-255141f0c55c"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="3918a273-298d-4e76-a2bb-fe69a1fde114"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="73d731a2-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="f7ba637f-8361-4f04-a503-2654879887c5"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d542bbe2-6f42-488b-926e-fcf1ff3b5d3c"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="47f8b7ce-e9fc-483a-a66c-c8aa412afdf1"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="05ba3507-4fc8-4cec-9a45-77773d87984a"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="68ea57cd-3132-4606-830c-4f7d7154d443"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="6e667085-bb97-4039-8dfe-2230002985e0"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="f34bb261-3b50-439e-bfeb-53067993434b"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="d3ec3869-b710-44d9-b20f-50f0724631ac"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="685468f6-16d8-429c-8d0d-87d16cb95c18"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="0047c8e1-9057-4a4f-9947-940f38b7d8b1"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="6c612f91-0160-4f09-9103-dccee7f7a6b7"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="182044a9-a2a5-4362-bf00-0f7be031cb1c"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="2e151173-a299-4321-841c-74925273a6b2"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="d8c1e4c9-35b4-45c8-bf4c-eb55137cd25c"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="50c49ea7-18aa-4a7b-8a11-c022bb833d1b"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="ffa48b3f-5566-48e4-843c-4b0542d27597"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="19c6bf30-cd8b-40df-980c-ce71c92c194c"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="92eb3bbe-6030-494b-a802-c7b52e193da1"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="29271db0-4253-46c9-b7c2-5e25376b9d19"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="3713db33-4ab3-415e-b4a0-a5856faadbf5"/>
+      <column name="CAMPAIGNSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="1868bd3a-05af-4b7f-a633-e3aec50ac45c"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="b7d53313-3ca1-47f8-aabe-a2d53ef5ff73"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="78f36ab2-5ea6-4126-9049-caf0dfe61b14"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="47f88082-377a-4e97-beb9-0200a416b715"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="e416fde5-f569-4a18-94a5-8c115af28dfa"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="45635aca-7971-43df-a683-c80c86cb58cc"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="ab2746b9-b687-42be-8643-b1f4e191947e"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="2c427e51-0434-40b3-ad00-3a9076067e03"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="8d5eb011-faca-460a-bf33-6f5b76c4aca0"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="3ac53b27-450d-4a2a-9160-bb223b8deef8"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d83bee3d-bbb3-475b-848d-75e37f94b7b3"/>
+      <column name="CAMPAIGNSTEP_ID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="7f42aa41-c91a-43e6-8875-d5645b6177ca"/>
+      <column name="CAMPAIGNSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="e49b0fa7-dbd5-43d2-997b-322a1efa4580"/>
+      <column name="CAMPAIGNSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="98ca7aae-5352-49f1-9365-5fbebe0f24fc"/>
+      <column name="CAMPAIGNSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="5f7c3fa5-72f6-4842-82aa-7bb7a7625d21"/>
+      <column name="CAMPAIGNSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="73b14dcd-7005-4379-919c-4ce00fb7f314"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="e152db82-5600-46ed-be22-bd9af66e50d4"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="73d731a2-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d8e9d060-2307-4966-998e-99b44b555faf"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d77a2d30-7982-4190-bad5-37bae77c1aeb"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="75ce2f86-dcc2-422d-b110-e57ed2125d8b"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="b3217cc7-ffa5-474b-a77a-b87438360f54"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d57b5b8c-17ac-46ed-beda-e0d8f327a1f4"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="fe3bbdb5-63ce-4e25-b55e-eaa03066b190"/>
+      <column name="CAMPAIGNSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="4efd91e9-25a5-4033-a48c-dcaca8b64f23"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="6e667085-bb97-4039-8dfe-2230002985e0"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="8d7effb5-a0ab-409a-bfa4-9576aadc60fc"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="1868bd3a-05af-4b7f-a633-e3aec50ac45c"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="848c2ae9-021a-4c70-bdc6-6e8215ec12d5"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="f6b57495-4fdc-44d3-ab08-524c85965493"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="11bd8015-2a0a-4205-8bd1-400c9f7fbafd"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="29271db0-4253-46c9-b7c2-5e25376b9d19"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="28dba2e2-2650-4c2d-a019-87a0df11afb7"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="5f399c51-6d82-440b-9fc0-aeada3782cb7"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="8f32f702-837e-4332-801e-e5daec1bade3"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="73d731a2-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="fccb6945-6a16-4c63-862c-8bb2e7b2f246"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="6c612f91-0160-4f09-9103-dccee7f7a6b7"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="2a3411ce-ec3c-4d41-8337-bcabf173f580"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="97e5d00f-fa77-4fc4-866c-450597f86974"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="d8c1e4c9-35b4-45c8-bf4c-eb55137cd25c"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="b9337d42-9a31-49b4-b961-38d2db4c87ae"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="7b1dd5e1-1cc5-4859-aa6f-823bbd368cc9"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="3ac53b27-450d-4a2a-9160-bb223b8deef8"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="3e2bfe4d-67d6-4ce3-bbd1-277ef02d1ea2"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="19c6bf30-cd8b-40df-980c-ce71c92c194c"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="2d40c1c0-975c-4d40-b480-481576d5deb2"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="be9dfe30-14a1-44ea-999c-0934fffa55ad"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="41db6815-b3e0-48f2-8aa7-76374bfbe25f"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="45635aca-7971-43df-a683-c80c86cb58cc"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="2f961bb2-5800-44af-8579-02bb6c937b67"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
+      <column name="DATE_EDIT" valueDate="2019-09-04"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="8ba9bb82-9310-4ef2-bfb0-775e7f374298"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="d3ec3869-b710-44d9-b20f-50f0724631ac"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="8b76598e-2ebb-4b07-91b3-a3e1dad583fb"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="5a9ddff5-27e0-4de5-bda9-792679edfe82"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="d18242c8-3620-4fbc-be7c-50345f5bbdff"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="2c427e51-0434-40b3-ad00-3a9076067e03"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="b54989b2-b67b-46d6-9c4f-3e0acdd6cd58"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANT">
+      <column name="CAMPAIGNPARTICIPANTID" value="c65fa845-7868-42b5-a744-4fe4b378cab7"/>
+      <column name="CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANTLOG.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANTLOG.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d341c062abb844b71bdd1bd902836405d78008b
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNPARTICIPANTLOG.xml
@@ -0,0 +1,51 @@
+<?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="autogenerated" id="ceabd563288d756d0169f384838acafd">
+    <delete tableName="CAMPAIGNPARTICIPANTLOG"/>
+    <insert tableName="CAMPAIGNPARTICIPANTLOG">
+      <column name="CAMPAIGNPARTICIPANTLOGID" value="655e9fde-aa16-4d9d-968b-23567c023232"/>
+      <column name="CAMPAIGNPARTICIPANT_ID" value="11bd8015-2a0a-4205-8bd1-400c9f7fbafd"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:13:56"/>
+      <column name="PREVIOUS_CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANTLOG">
+      <column name="CAMPAIGNPARTICIPANTLOGID" value="98ff5478-5f88-4711-9223-3b7637c7b72a"/>
+      <column name="CAMPAIGNPARTICIPANT_ID" value="28dba2e2-2650-4c2d-a019-87a0df11afb7"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:13:56"/>
+      <column name="PREVIOUS_CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANTLOG">
+      <column name="CAMPAIGNPARTICIPANTLOGID" value="8257e0ed-d762-42b3-9ddd-b3acd59c955f"/>
+      <column name="CAMPAIGNPARTICIPANT_ID" value="2a3411ce-ec3c-4d41-8337-bcabf173f580"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:13:56"/>
+      <column name="PREVIOUS_CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANTLOG">
+      <column name="CAMPAIGNPARTICIPANTLOGID" value="ac8b9ecf-197c-4917-84a2-89ed05b6f2b2"/>
+      <column name="CAMPAIGNPARTICIPANT_ID" value="2d40c1c0-975c-4d40-b480-481576d5deb2"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:13:56"/>
+      <column name="PREVIOUS_CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNPARTICIPANTLOG">
+      <column name="CAMPAIGNPARTICIPANTLOGID" value="f2a7688a-0def-4f8c-b7dd-7f00e7d5f2a3"/>
+      <column name="CAMPAIGNPARTICIPANT_ID" value="2f961bb2-5800-44af-8579-02bb6c937b67"/>
+      <column name="CAMPAIGNSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_NEW" valueDate="2019-09-04T09:13:56"/>
+      <column name="PREVIOUS_CAMPAIGNSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNSTEP.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNSTEP.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1afcd9cd66daec9987cdb02892bf4231c5c6afd0
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CAMPAIGNSTEP.xml
@@ -0,0 +1,193 @@
+<?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="autogenerated" id="5bfe49b2432fa2922b99272881b04b92">
+    <delete tableName="CAMPAIGNSTEP"/>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="DATE_END" valueDate="2019-09-23"/>
+      <column name="DATE_NEW" valueDate="2019-09-02"/>
+      <column name="DATE_START" valueDate="2019-09-02"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Hinzugefügt"/>
+      <column name="SORTING" valueNumeric="1"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="07609efc-170a-451e-907a-6f6b236e0a3c"/>
+      <column name="CAMPAIGN_ID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="DATE_END" valueDate="2019-09-30"/>
+      <column name="DATE_NEW" valueDate="2019-09-03"/>
+      <column name="DATE_START" valueDate="2019-09-23"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Telefonische Kontaktaufnahme"/>
+      <column name="PREDECESSORSTEP_ID" value="96793400-415d-42a6-b4d1-a52d1b2c5baa"/>
+      <column name="SORTING" valueNumeric="2"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNPHONE                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="DATE_END" valueDate="2019-09-25"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-04"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Hinzugefügt"/>
+      <column name="SORTING" valueNumeric="1"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="963dc8b8-55e4-4e22-8162-a706dbeefa94"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="DATE_END" valueDate="2019-10-09"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-25"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Telefonisch Nachfassen"/>
+      <column name="PREDECESSORSTEP_ID" value="161e57aa-3ea6-46bc-a3eb-5a577b858c20"/>
+      <column name="SORTING" valueNumeric="2"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNPHONE                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="a91a8a7c-1547-4707-a7aa-cc0ce7056ebe"/>
+      <column name="CAMPAIGN_ID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="DATE_END" valueDate="2019-10-17"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-10-10"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="15"/>
+      <column name="NAME" value="Bestätigung zugesandt"/>
+      <column name="PREDECESSORSTEP_ID" value="963dc8b8-55e4-4e22-8162-a706dbeefa94"/>
+      <column name="SORTING" valueNumeric="3"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNEMAIL                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="DATE_END" valueDate="2019-09-25"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-04"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Hinzugefügt"/>
+      <column name="SORTING" valueNumeric="1"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="fd5d676b-94a3-441e-9b55-eceffc2a0b49"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="DATE_END" valueDate="2019-10-02"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-25"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="50"/>
+      <column name="NAME" value="E-Mail Einladung aussenden"/>
+      <column name="PREDECESSORSTEP_ID" value="72bc62eb-41b1-49e5-93b7-28afd8b59416"/>
+      <column name="SORTING" valueNumeric="2"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNEMAIL                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="2d89fd53-76e4-4dfa-8941-d0a80b040849"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="DATE_END" valueDate="2019-10-17"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-10-03"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="35"/>
+      <column name="NAME" value="Nachfassen"/>
+      <column name="PREDECESSORSTEP_ID" value="fd5d676b-94a3-441e-9b55-eceffc2a0b49"/>
+      <column name="SORTING" valueNumeric="3"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNPHONE                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="72ea7e64-d5bf-44eb-a523-3f2da411fe6d"/>
+      <column name="CAMPAIGN_ID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="DATE_END" valueDate="2019-10-28"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-10-18"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="35"/>
+      <column name="NAME" value="Teilnahme bestätigt"/>
+      <column name="PREDECESSORSTEP_ID" value="2d89fd53-76e4-4dfa-8941-d0a80b040849"/>
+      <column name="SORTING" valueNumeric="4"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNPHONE                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_END" valueDate="2019-09-25"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-04"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="100"/>
+      <column name="NAME" value="Hinzugefügt"/>
+      <column name="SORTING" valueNumeric="1"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_END" valueDate="2019-10-02"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-09-26"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="50"/>
+      <column name="NAME" value="Einladung versandt"/>
+      <column name="PREDECESSORSTEP_ID" value="caf3aad7-9f9a-44de-abd1-129cd00363cf"/>
+      <column name="SORTING" valueNumeric="2"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNEMAIL                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="76295722-96f0-4992-a2d4-8defe962bf9a"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_END" valueDate="2019-10-16"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-10-10"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="50"/>
+      <column name="NAME" value="Teilnahme bestätigt"/>
+      <column name="PREDECESSORSTEP_ID" value="67178f4b-600b-4b56-ae79-5c39ecba5593"/>
+      <column name="SORTING" valueNumeric="3"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNEMAIL                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="CAMPAIGNSTEP">
+      <column name="CAMPAIGNSTEPID" value="fbfcf9a2-66b3-404f-a5e6-beef285ceb83"/>
+      <column name="CAMPAIGN_ID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="DATE_END" valueDate="2019-10-22"/>
+      <column name="DATE_NEW" valueDate="2019-09-04"/>
+      <column name="DATE_START" valueDate="2019-10-20"/>
+      <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="MAXPARTICIPANTS" valueNumeric="50"/>
+      <column name="NAME" value="Teilgenommen"/>
+      <column name="PREDECESSORSTEP_ID" value="76295722-96f0-4992-a2d4-8defe962bf9a"/>
+      <column name="SORTING" valueNumeric="4"/>
+      <column name="STATUS" value="OPEN                                "/>
+      <column name="STEPMEDIUM" value="CAMPAIGNEMAIL                       "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONSCORE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONSCORE.xml
new file mode 100644
index 0000000000000000000000000000000000000000..75ceb88130825787f5fc33567322c49c18c84f88
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONSCORE.xml
@@ -0,0 +1,419 @@
+<?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="autogenerated" id="eee103dec7019b9b95283c5d64d72502">
+    <delete tableName="CLASSIFICATIONSCORE"/>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="01840c9d-2856-4882-a12a-303e58fd9d30"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="50"/>
+      <column name="TITLE" value="Purchasing"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="0803779b-73d8-47b3-9705-f5771c01e6a3"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="140"/>
+      <column name="TITLE" value="Automotive"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="10419ecc-335b-43c3-a1e3-8ecfbeda6f2b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="60"/>
+      <column name="TITLE" value="Project management"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="11418754-1667-437b-816b-adec4b9291f3"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="No project planned"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="1bc2b2aa-2582-4b0c-a2f8-04125b82ba33"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="Service"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="1f924d71-c500-4cdd-bc52-4718a6b88e45"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="70"/>
+      <column name="TITLE" value="Consultation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="2a516661-537d-473e-864a-c2f721b96a42"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="180"/>
+      <column name="TITLE" value="Service"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="2f3b6088-d78f-4fba-998d-b18a6b981485"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="170"/>
+      <column name="TITLE" value="Environment"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="50"/>
+      <column name="TITLE" value="0 to 49T"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Germany"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="3035e36e-ee6a-45d1-9d68-920cd3666362"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="70"/>
+      <column name="TITLE" value="Student/Internship"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="35d8ae15-8993-4ab2-99f6-e57c2ebf0bb3"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="80"/>
+      <column name="TITLE" value="Food"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="39547328-ccc6-47ad-b31a-d6a149081c44"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="50"/>
+      <column name="TITLE" value="0 to 49"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORE" valueNumeric="30.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="251 to 1,000"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="SCORE" valueNumeric="25.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Yes"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="SCORE" valueNumeric="12.50"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Standard"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="50.00"/>
+      <column name="SORT" valueNumeric="190"/>
+      <column name="TITLE" value="Public"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="41300a6c-8dc7-4b5a-9fb1-cecd3d5cbb8c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="160"/>
+      <column name="TITLE" value="Electric"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="41d43723-7d19-4a7e-936a-df9013db7dfb"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="50.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="Logistics"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="7.50"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Sales"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="56a56ec0-34c1-419f-81c2-1c1310d685d2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="120"/>
+      <column name="TITLE" value="Education"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="5ca391a5-9de8-41e6-9792-17cf8deaa7e7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="90"/>
+      <column name="TITLE" value="Energy"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="61fe4e4f-e64d-4195-87b5-658f36ce1736"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="SCORE" valueNumeric="25.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Individual"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="636af750-fcd3-4480-bfe7-ead42bf85280"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="SCORE" valueNumeric="30.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Choice"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="6bd19de4-691b-4e78-84dc-cf6f41231978"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Management/Sales Manager"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="6d6653ae-024e-444c-aeae-561874d55569"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORE" valueNumeric="10.00"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="50 to 99T"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="77a0088c-a665-4feb-9f60-99c1eb710015"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="50"/>
+      <column name="TITLE" value="Lifesience"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="7d6f716a-97c7-417b-a8c0-3cb71e403dde"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="SCORE" valueNumeric="0.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="Other"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="7e569319-5885-452e-9331-a507f3365236"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="10.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Overarching"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="90361317-d80e-4466-a45b-3021bf02e2f9"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="101 to 250"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="9a3183db-8a38-4cf1-a234-3e2cf20a4f77"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="IT"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="SCORE" valueNumeric="10.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="OnPremise"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="a0fcd2e2-40c8-40b8-8a5b-e591154c248a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="110"/>
+      <column name="TITLE" value="Lottery"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="a177b155-4665-4af1-b50e-0b59e8ac2752"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="SCORE" valueNumeric="7.50"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="Switzerland"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="a61e3451-296b-4812-a7b2-425963176f80"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Cloud"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="a7e70abc-4d98-467d-a475-66bbd101de1d"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Head of IT"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="b1c55bcd-16c6-4b2f-8f73-e16397b40e93"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORE" valueNumeric="30.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="from 1,000"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="SCORE" valueNumeric="30.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Within 6 months"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORE" valueNumeric="30.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="200 to 349T"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="bf44ae05-a4c4-4ee9-ad6e-7d64474afeff"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="16.60"/>
+      <column name="SORT" valueNumeric="60"/>
+      <column name="TITLE" value="Finance"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="15.00"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="Service Manager"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="SCORE" valueNumeric="10.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="No date yet"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="c6300eeb-0494-4eba-89b1-23afdbb397e9"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="150"/>
+      <column name="TITLE" value="Publishing house"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="c9d4e28d-7935-42c5-9da5-5ce0b51b425a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="CRM Manager"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="d032f425-5739-4f0c-8103-e102fe0d3ccf"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="15.00"/>
+      <column name="SORT" valueNumeric="50"/>
+      <column name="TITLE" value="Skilled workers"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="SCORE" valueNumeric="15.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Rate"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="d7d807a2-8a97-4a0e-9d1c-fb8c7a703599"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORE" valueNumeric="10.00"/>
+      <column name="SORT" valueNumeric="40"/>
+      <column name="TITLE" value="50 to 100"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="e6ab210e-6a26-4a12-9d50-ff8bd392c590"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="Search"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="e70a23b4-f2a9-4438-8ba6-742c6c17e5cc"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="SCORE" valueNumeric="12.50"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="No"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="e824d7e3-dfbe-4f34-a5c7-8f2226aade7e"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="100 to 199T"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="e8741cb0-9ada-48dd-89d1-f00a1a755c38"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="60"/>
+      <column name="TITLE" value="Counsellor"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="ec51d975-bda6-415e-9b91-32f0e981ecd8"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="50.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Building and construction suppliers"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="ecf421ef-66b2-4f9f-98c6-ee8a73e753da"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Austria"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="ed6a38f7-97bf-4e3d-a34c-4a1e636fa6a7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORE" valueNumeric="50.00"/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="from 350T"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="efec90bd-c99f-49d9-bd52-df0ae6f938a3"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="50.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Machinery and equipment"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="f1534026-34cc-4898-8711-41cbe4accb60"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORE" valueNumeric="5.00"/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="Marketing"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="f678b3e0-72c4-4b48-90c0-054bf3612dc2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="130"/>
+      <column name="TITLE" value="Trade"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="fae1ef0a-5d07-4725-907f-4b2ac5814328"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORE" valueNumeric="33.30"/>
+      <column name="SORT" valueNumeric="100"/>
+      <column name="TITLE" value="Industry"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSCORE">
+      <column name="CLASSIFICATIONSCOREID" value="fb8cb769-d95b-468a-ac64-7ee0cefd46a7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="SCORE" valueNumeric="20.00"/>
+      <column name="SORT" valueNumeric="20"/>
+      <column name="TITLE" value="Within 12 months"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONTYPE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONTYPE.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef48b51ca0a6d3c306368895a40c540ead6f4452
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CLASSIFICATIONTYPE.xml
@@ -0,0 +1,72 @@
+<?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="autogenerated" id="b23f5b874676177814de7639bc4d865e">
+    <delete tableName="CLASSIFICATIONTYPE"/>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="SCORETYPE" value="ScoreBased"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="SCORETYPE" value="ScoreBranch"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="SCORETYPE" value="ScoreUsers"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="SCORETYPE" value="ScoreBudget"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="SCORETYPE" value="ScoreCustomizing"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="SCORETYPE" value="ScoreStandard"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="SCORETYPE" value="ScoreCloud"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="SCORETYPE" value="ScoreDepartment"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="SCORETYPE" value="ScoreDecisionPhase"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="SCORETYPE" value="ScorePosition"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONTYPE">
+      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONTYPE" value="SALESPROJ                           "/>
+      <column name="CLASSIFICATIONTYPEID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="SCORETYPE" value="ScoreProjectStart"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/COMMUNICATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/COMMUNICATION.xml
index 940310cc150071e6aa0c743a976e17d5772a09b8..9d8c537d4f92c2696a742a305bcab44d927521e6 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/COMMUNICATION.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/COMMUNICATION.xml
@@ -1,14 +1,15 @@
 <?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="autogenerated" id="c65e668b-1ab5-4166-88f4-d65e0f36325e">
+  <changeSet author="autogenerated" id="8182c6c81b6dc6cfd4626c85d3feb6e4">
+    <delete tableName="COMMUNICATION"/>
     <insert tableName="COMMUNICATION">
       <column name="ADDR" value="tadmin@meine-firma.de"/>
       <column name="COMMUNICATIONID" value="3ccc54d5-dfb0-4da9-a0a0-472025f65994"/>
       <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:48:55"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:38"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -18,8 +19,8 @@
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:46:11"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:21:35"/>
-      <column name="MEDIUM_ID" value="COMMINTERNET"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMINTERNET                        "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -29,8 +30,8 @@
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="DATE_EDIT" valueDate="2019-06-06T02:50:34"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:28:49"/>
-      <column name="MEDIUM_ID" value="COMMINTERNET"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMINTERNET                        "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -39,8 +40,8 @@
       <column name="COMMUNICATIONID" value="417ce25b-8d42-47b2-b7df-1dfcc28075be"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:41:53"/>
-      <column name="MEDIUM_ID" value="COMMINTERNET"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMINTERNET                        "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -49,8 +50,8 @@
       <column name="CONTACT_ID" value="6e667085-bb97-4039-8dfe-2230002985e0"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:36:32"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:56:26"/>
-      <column name="MEDIUM_ID" value="COMMMOBIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMMOBIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -59,8 +60,8 @@
       <column name="COMMUNICATIONID" value="e076075c-1d67-4a9d-aed8-1a66bb1adfb2"/>
       <column name="CONTACT_ID" value="45635aca-7971-43df-a683-c80c86cb58cc"/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:10:34"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -68,8 +69,8 @@
       <column name="COMMUNICATIONID" value="674a8118-31ef-492c-83c6-6ecfcebc9c9a"/>
       <column name="CONTACT_ID" value="d3ec3869-b710-44d9-b20f-50f0724631ac"/>
       <column name="DATE_NEW" valueDate="2019-05-15T05:13:19"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -77,8 +78,8 @@
       <column name="COMMUNICATIONID" value="ea561d25-863a-4666-bc57-00a414fa1bf2"/>
       <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:24:26"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -87,8 +88,8 @@
       <column name="CONTACT_ID" value="2c427e51-0434-40b3-ad00-3a9076067e03"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:41:37"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:26:03"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -98,8 +99,8 @@
       <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:32:33"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:03:15"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -109,8 +110,8 @@
       <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T08:26:27"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:04:03"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -120,8 +121,8 @@
       <column name="CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:50:57"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:06:21"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -131,8 +132,8 @@
       <column name="CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:59:10"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:06:21"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -141,8 +142,8 @@
       <column name="COMMUNICATIONID" value="76a59a85-c04a-4f37-b276-d022c568e071"/>
       <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:10:21"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -151,8 +152,8 @@
       <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:57:27"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:10:21"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -161,8 +162,8 @@
       <column name="COMMUNICATIONID" value="d5a90157-2c05-474c-aeda-0ab08d26075a"/>
       <column name="CONTACT_ID" value="73d73404-e7f5-11e8-9f32-f2801f1b9fd1"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:11:20"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -170,8 +171,8 @@
       <column name="COMMUNICATIONID" value="56e9d5fe-b77d-4321-938c-d331cd5b3e1e"/>
       <column name="CONTACT_ID" value="73d731a2-e7f5-11e8-9f32-f2801f1b9fd1"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:13:02"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -180,8 +181,8 @@
       <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:35:59"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:14:38"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -191,8 +192,8 @@
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:39:42"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -202,8 +203,8 @@
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T10:41:56"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -212,8 +213,8 @@
       <column name="COMMUNICATIONID" value="00d07819-985b-4efe-a634-da71ae482907"/>
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMINTERNET"/>
       <column name="ISSTANDARD" valueNumeric="0"/>
+      <column name="MEDIUM_ID" value="COMMINTERNET                        "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -222,8 +223,8 @@
       <column name="CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:48:25"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -233,8 +234,8 @@
       <column name="CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:38:02"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -244,8 +245,8 @@
       <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:49:15"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -255,8 +256,8 @@
       <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:41:47"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -265,8 +266,8 @@
       <column name="COMMUNICATIONID" value="529cadf7-7e9c-4828-9497-6ce6effb1624"/>
       <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:14:38"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -275,8 +276,8 @@
       <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:36:21"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:16:40"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -285,8 +286,8 @@
       <column name="COMMUNICATIONID" value="bde2ff44-c2f1-421e-919f-6e7194c951ec"/>
       <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:16:40"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -295,8 +296,8 @@
       <column name="CONTACT_ID" value="19c6bf30-cd8b-40df-980c-ce71c92c194c"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:59:17"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:20:04"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -306,8 +307,8 @@
       <column name="CONTACT_ID" value="19c6bf30-cd8b-40df-980c-ce71c92c194c"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:50:35"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:20:04"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -317,8 +318,8 @@
       <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:57:36"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:22:23"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -327,8 +328,8 @@
       <column name="COMMUNICATIONID" value="c7d84edf-1a48-45fd-8364-e29f45ac1739"/>
       <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:22:24"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -336,8 +337,8 @@
       <column name="COMMUNICATIONID" value="de32eb0c-672b-4ce5-a80e-63a8ac976599"/>
       <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:23:58"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -346,8 +347,8 @@
       <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:37:07"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:23:58"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -357,8 +358,8 @@
       <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:37:23"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:26:54"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -367,8 +368,8 @@
       <column name="COMMUNICATIONID" value="e21bc8d9-f546-4f97-9c4c-4e4de67512a7"/>
       <column name="CONTACT_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:26:54"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -377,8 +378,8 @@
       <column name="CONTACT_ID" value="3ac53b27-450d-4a2a-9160-bb223b8deef8"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:57:45"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:30:47"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -387,8 +388,8 @@
       <column name="COMMUNICATIONID" value="cc2f1e5f-9cd9-4bbb-87d4-a98d883ebbc1"/>
       <column name="CONTACT_ID" value="3ac53b27-450d-4a2a-9160-bb223b8deef8"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:30:48"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -397,8 +398,8 @@
       <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:41:28"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:31:51"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -407,8 +408,8 @@
       <column name="COMMUNICATIONID" value="4602f1f8-7a40-4c0d-bb92-649935d11bd6"/>
       <column name="CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:31:51"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -416,8 +417,8 @@
       <column name="COMMUNICATIONID" value="b3be54f7-884c-4a88-8c4b-b52a4595d547"/>
       <column name="CONTACT_ID" value="2c427e51-0434-40b3-ad00-3a9076067e03"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:32:30"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -426,8 +427,8 @@
       <column name="CONTACT_ID" value="29271db0-4253-46c9-b7c2-5e25376b9d19"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:59:36"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:35:38"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -436,8 +437,8 @@
       <column name="COMMUNICATIONID" value="82584c83-5a7d-4923-8907-2953240fb8e5"/>
       <column name="CONTACT_ID" value="29271db0-4253-46c9-b7c2-5e25376b9d19"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:35:38"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -446,8 +447,8 @@
       <column name="CONTACT_ID" value="6c612f91-0160-4f09-9103-dccee7f7a6b7"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:57:53"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:39:25"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -457,8 +458,8 @@
       <column name="CONTACT_ID" value="6c612f91-0160-4f09-9103-dccee7f7a6b7"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:51:51"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:39:25"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -468,8 +469,8 @@
       <column name="CONTACT_ID" value="1868bd3a-05af-4b7f-a633-e3aec50ac45c"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:59:26"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:41:21"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -478,8 +479,8 @@
       <column name="COMMUNICATIONID" value="38d42eff-c782-4ffa-80d7-db812cf1c6db"/>
       <column name="CONTACT_ID" value="1868bd3a-05af-4b7f-a633-e3aec50ac45c"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:41:21"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -488,8 +489,8 @@
       <column name="CONTACT_ID" value="d8c1e4c9-35b4-45c8-bf4c-eb55137cd25c"/>
       <column name="DATE_EDIT" valueDate="2019-06-05T03:52:13"/>
       <column name="DATE_NEW" valueDate="2019-05-19T08:42:07"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -498,8 +499,8 @@
       <column name="COMMUNICATIONID" value="954a729a-dd11-4760-86a8-dc09e9c11d1a"/>
       <column name="CONTACT_ID" value="449080f6-b714-4189-a261-37439d0d4010"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:09:20"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -507,8 +508,8 @@
       <column name="COMMUNICATIONID" value="ab6da5e4-bea2-4a66-b818-b8ad5c57a167"/>
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:10:07"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -516,8 +517,8 @@
       <column name="COMMUNICATIONID" value="786bdaba-c36d-4107-9c6f-abc15ebb4e25"/>
       <column name="CONTACT_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:10:46"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -525,8 +526,8 @@
       <column name="COMMUNICATIONID" value="2f571583-f8d2-47ad-b183-8d9cab3b3c19"/>
       <column name="CONTACT_ID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:11:18"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -534,8 +535,8 @@
       <column name="COMMUNICATIONID" value="5ea00579-3eb5-4c1f-9396-63a15b134f60"/>
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:19:53"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -543,8 +544,8 @@
       <column name="COMMUNICATIONID" value="86784334-c997-4305-8526-35db5047ce93"/>
       <column name="CONTACT_ID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:20:31"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -553,8 +554,8 @@
       <column name="CONTACT_ID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:44:07"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:21:42"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -563,8 +564,8 @@
       <column name="COMMUNICATIONID" value="69c70cb5-276d-4983-9607-a5fd55196573"/>
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:22:21"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -573,8 +574,8 @@
       <column name="CONTACT_ID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:43:55"/>
       <column name="DATE_NEW" valueDate="2019-05-21T09:24:31"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -583,8 +584,8 @@
       <column name="COMMUNICATIONID" value="a0ba95f9-c872-4bfc-9591-868aaa3b2ac3"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:27:25"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -592,8 +593,8 @@
       <column name="COMMUNICATIONID" value="f2f8499d-2d00-485f-9d2f-381fd5e8f7ce"/>
       <column name="CONTACT_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:27:48"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -601,8 +602,8 @@
       <column name="COMMUNICATIONID" value="5f9aaf24-69d7-4089-a31d-e15d6d55dc92"/>
       <column name="CONTACT_ID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:30:12"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -611,8 +612,8 @@
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:41:44"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:31:52"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -621,8 +622,8 @@
       <column name="COMMUNICATIONID" value="4f3230c0-41e4-4861-880f-14ad0fcc5a35"/>
       <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:32:15"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -631,8 +632,8 @@
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:41:08"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:32:54"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -642,8 +643,8 @@
       <column name="CONTACT_ID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:40:05"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:33:16"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -653,8 +654,8 @@
       <column name="CONTACT_ID" value="449080f6-b714-4189-a261-37439d0d4010"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:43:26"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:34:41"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -664,8 +665,8 @@
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:43:37"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:45:42"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -675,8 +676,8 @@
       <column name="CONTACT_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:43:48"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:46:23"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -686,8 +687,8 @@
       <column name="CONTACT_ID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:43:59"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:46:57"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -697,8 +698,8 @@
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="DATE_EDIT" valueDate="2019-05-23T11:23:53"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:48:09"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -708,8 +709,8 @@
       <column name="CONTACT_ID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:44:31"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:48:35"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -719,8 +720,8 @@
       <column name="CONTACT_ID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:44:43"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:49:12"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -730,8 +731,8 @@
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:44:52"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:49:30"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -741,8 +742,8 @@
       <column name="CONTACT_ID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:45:02"/>
       <column name="DATE_NEW" valueDate="2019-05-22T03:49:52"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -752,8 +753,8 @@
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:45:29"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:29:24"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -763,8 +764,8 @@
       <column name="CONTACT_ID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:45:57"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:30:33"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -774,8 +775,8 @@
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:57:16"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:31:22"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -785,8 +786,8 @@
       <column name="CONTACT_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:45:46"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:32:03"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -796,8 +797,8 @@
       <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:46:14"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:32:40"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -807,8 +808,8 @@
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:58:59"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:36:18"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -818,8 +819,8 @@
       <column name="CONTACT_ID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:46:49"/>
       <column name="DATE_NEW" valueDate="2019-05-22T05:36:39"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -828,8 +829,8 @@
       <column name="COMMUNICATIONID" value="dead3100-379c-4ca3-958f-006ba17a78ad"/>
       <column name="CONTACT_ID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:42:41"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -838,8 +839,8 @@
       <column name="CONTACT_ID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
       <column name="DATE_EDIT" valueDate="2019-05-28T07:45:37"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:42:51"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -848,8 +849,8 @@
       <column name="COMMUNICATIONID" value="a8dca1e8-f787-446b-b065-8089322b0402"/>
       <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
       <column name="DATE_NEW" valueDate="2019-05-23T11:42:52"/>
-      <column name="MEDIUM_ID" value="COMMXING"/>
       <column name="ISSTANDARD" valueNumeric="0"/>
+      <column name="MEDIUM_ID" value="COMMXING                            "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -857,8 +858,8 @@
       <column name="COMMUNICATIONID" value="886854ab-635e-40e5-9427-c90a6642b964"/>
       <column name="CONTACT_ID" value="6e667085-bb97-4039-8dfe-2230002985e0"/>
       <column name="DATE_NEW" valueDate="2019-06-05T03:52:59"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -866,8 +867,8 @@
       <column name="COMMUNICATIONID" value="c68be666-221e-46b4-8fad-d49bb1117c3a"/>
       <column name="CONTACT_ID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
       <column name="DATE_NEW" valueDate="2019-06-07T02:39:32"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -875,8 +876,8 @@
       <column name="COMMUNICATIONID" value="b9b0499c-ea37-4a41-9a0b-8ed570d91683"/>
       <column name="CONTACT_ID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
       <column name="DATE_NEW" valueDate="2019-06-07T02:39:32"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -884,8 +885,8 @@
       <column name="COMMUNICATIONID" value="5136702b-2898-4db3-98d2-436772febc35"/>
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
       <column name="DATE_NEW" valueDate="2019-06-07T02:47:29"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -893,8 +894,8 @@
       <column name="COMMUNICATIONID" value="b9773f8a-97bf-4071-9b1e-32b5e89e526a"/>
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
       <column name="DATE_NEW" valueDate="2019-06-07T02:47:29"/>
-      <column name="MEDIUM_ID" value="COMMEMAIL"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMEMAIL                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -902,8 +903,8 @@
       <column name="COMMUNICATIONID" value="2561b25b-1af2-4512-a77f-97d542c578b7"/>
       <column name="CONTACT_ID" value="d3ec3869-b710-44d9-b20f-50f0724631ac"/>
       <column name="DATE_NEW" valueDate="2019-06-11T08:26:11"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -911,8 +912,8 @@
       <column name="COMMUNICATIONID" value="9a440c7f-5f00-43f0-9c0b-fb1b8a35721e"/>
       <column name="CONTACT_ID" value="45635aca-7971-43df-a683-c80c86cb58cc"/>
       <column name="DATE_NEW" valueDate="2019-06-11T08:26:49"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="COMMUNICATION">
@@ -920,8 +921,8 @@
       <column name="COMMUNICATIONID" value="e2fcaf67-b1fd-4d2e-9848-ba45677cf494"/>
       <column name="CONTACT_ID" value="d8c1e4c9-35b4-45c8-bf4c-eb55137cd25c"/>
       <column name="DATE_NEW" valueDate="2019-06-11T11:58:07"/>
-      <column name="MEDIUM_ID" value="COMMPHONE"/>
       <column name="ISSTANDARD" valueNumeric="1"/>
+      <column name="MEDIUM_ID" value="COMMPHONE                           "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CONTACT.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CONTACT.xml
index 8414b8a100e16f5734b0e1f0e9691749cb9e0548..a354c568f5d68177e026dad2ee80e5767ce095d1 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/CONTACT.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CONTACT.xml
@@ -1,13 +1,23 @@
 <?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="autogenerated" id="d1193964-e9b4-4f15-bbde-1512168c57a6">
+  <changeSet author="autogenerated" id="3782731b47751aaf2c4e221ddbdc8de1">
+    <delete tableName="CONTACT"/>
+    <insert tableName="CONTACT">
+      <column name="ADDRESS_ID" value="0                                   "/>
+      <column name="CONTACTID" value="0                                   "/>
+      <column name="DATE_NEW" valueDate="2019-08-29T02:43:16"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="ORGANISATION_ID" value="0                                   "/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
     <insert tableName="CONTACT">
       <column name="ADDRESS_ID" value="14d03432-985b-4efe-a634-da71ae482907"/>
       <column name="CONTACTID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -16,7 +26,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -25,7 +35,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -34,7 +44,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -43,7 +53,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -54,7 +64,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -65,7 +75,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -76,7 +86,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -87,7 +97,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -98,7 +108,7 @@
       <column name="ORGANISATION_ID" value="0                                   "/>
       <column name="PERSON_ID" value="4a55726c-4ca6-43cb-9d3f-8e55d97b7aaf"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -109,7 +119,7 @@
       <column name="ORGANISATION_ID" value="0                                   "/>
       <column name="PERSON_ID" value="7c1efe4c-cc73-4e95-bdf0-208a3ff699b5"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -120,7 +130,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -131,7 +141,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -142,7 +152,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -153,7 +163,7 @@
       <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="PERSON_ID" value="b16282bd-254e-4569-a56e-675449821467"/>
       <column name="RELATIONSHIP" valueNumeric="1"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -162,7 +172,7 @@
       <column name="DATE_NEW" valueDate="2019-05-15T03:16:58"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -171,7 +181,7 @@
       <column name="DATE_NEW" valueDate="2019-05-15T03:23:13"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -180,7 +190,7 @@
       <column name="DATE_NEW" valueDate="2019-05-15T03:33:57"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -193,7 +203,7 @@
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="PERSON_ID" value="08c36adc-cd2b-4ce9-a51b-944667084f7f"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -206,7 +216,7 @@
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="PERSON_ID" value="b4c37f47-b4b8-4fe4-812a-9043530cce84"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -219,20 +229,20 @@
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="PERSON_ID" value="c4e24800-e9f3-4226-afd7-cfd5dd670d93"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
       <column name="ADDRESS_ID" value="4eb7039a-1515-4545-86b4-85426a67fcd5"/>
       <column name="CONTACTID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
+      <column name="CONTACTPOSITION" value="Produktionsleiter"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:23:15"/>
       <column name="DEPARTMENT" value="Produktion"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="PERSON_ID" value="0a611832-9476-481e-bde5-af3c3a98f1b4"/>
-      <column name="CONTACTPOSITION" value="Produktionsleiter"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -245,7 +255,7 @@
       <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="PERSON_ID" value="e35de858-6eca-4328-9efb-dc705ca6792c"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -257,7 +267,7 @@
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="PERSON_ID" value="528d7307-295c-4829-a2e4-9b59e43cf3bb"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -270,7 +280,7 @@
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="PERSON_ID" value="9874de9b-d517-42f2-81b9-b5f3f0b0dae3"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -283,7 +293,7 @@
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="PERSON_ID" value="3660abd7-73de-4825-83a1-e1992469cf56"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -296,7 +306,7 @@
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="PERSON_ID" value="57ec6707-e4a4-4702-9356-ee43dd4c5b00"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -308,7 +318,7 @@
       <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="PERSON_ID" value="44c5d7db-b96e-4f67-a00f-c206cd3f7e1b"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -321,7 +331,7 @@
       <column name="ORGANISATION_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="PERSON_ID" value="9f4528ce-3d83-4292-ae23-d9b314271f69"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -334,7 +344,7 @@
       <column name="ORGANISATION_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="PERSON_ID" value="c41afea2-c4b5-45dd-a4a7-05826b9dd38c"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -345,7 +355,7 @@
       <column name="ORGANISATION_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="PERSON_ID" value="22a497cb-39c3-4e72-9f88-423d7630c7e1"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -356,7 +366,7 @@
       <column name="ORGANISATION_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="PERSON_ID" value="09514fe1-a0d6-465e-883b-6cc93cc758a2"/>
       <column name="RELATIONSHIP" valueNumeric="2"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -365,7 +375,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:39:15"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -374,7 +384,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:40:51"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -383,7 +393,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:42:16"/>
       <column name="ISOLANGUAGE" value="eng"/>
       <column name="ORGANISATION_ID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -392,7 +402,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:44:27"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -401,7 +411,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:46:35"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -410,7 +420,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:47:59"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -419,7 +429,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:49:58"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -428,7 +438,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T10:00:09"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -437,7 +447,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T10:03:12"/>
       <column name="ISOLANGUAGE" value="eng"/>
       <column name="ORGANISATION_ID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -446,7 +456,7 @@
       <column name="DATE_NEW" valueDate="2019-05-23T08:38:50"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -455,7 +465,7 @@
       <column name="DATE_NEW" valueDate="2019-05-23T10:53:07"/>
       <column name="ISOLANGUAGE" value="eng"/>
       <column name="ORGANISATION_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="CONTACT">
@@ -464,7 +474,7 @@
       <column name="DATE_NEW" valueDate="2019-05-23T10:54:17"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="ORGANISATION_ID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-      <column name="STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/CONTRACT.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/CONTRACT.xml
index 6201aa0873d9be0b803df612347e27157d8d1dae..bcfd77b7cfe4f351e5dd01e23dce0f4e38028289 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/CONTRACT.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/CONTRACT.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="e80a27d2-2ebf-470c-a0a3-ac41eb9bf30f">
+  <changeSet author="autogenerated" id="1058677159ca4a99e9ea2bfd538fe0ef">
+    <delete tableName="CONTRACT"/>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
       <column name="CONTRACTCODE" value="1000"/>
@@ -8,9 +9,9 @@
       <column name="CONTRACTEND" valueDate="2019-09-30T02:00:00"/>
       <column name="CONTRACTID" value="384c9d31-9923-4e6a-8a7f-2d2890470b70"/>
       <column name="CONTRACTSTART" valueDate="2018-10-01T02:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYQUARTER"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYQUARTER                  "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
@@ -19,9 +20,9 @@
       <column name="CONTRACTEND" valueDate="2018-09-15T02:00:00"/>
       <column name="CONTRACTID" value="8b95a074-086e-44c8-bd45-fb8e33803da3"/>
       <column name="CONTRACTSTART" valueDate="2017-05-01T02:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYQUARTER"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYQUARTER                  "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
@@ -30,9 +31,9 @@
       <column name="CONTRACTEND" valueDate="2020-09-15T02:00:00"/>
       <column name="CONTRACTID" value="eb182167-1e33-4290-a160-a86d09685cba"/>
       <column name="CONTRACTSTART" valueDate="2015-03-20T01:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYQUARTER"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYQUARTER                  "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
@@ -41,9 +42,9 @@
       <column name="CONTRACTEND" valueDate="2021-09-15T02:00:00"/>
       <column name="CONTRACTID" value="6fc9483c-fcfc-48fb-b48f-18e6b11f31fc"/>
       <column name="CONTRACTSTART" valueDate="2015-03-20T01:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYQUARTER"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYQUARTER                  "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
@@ -52,9 +53,9 @@
       <column name="CONTRACTEND" valueDate="2022-09-15T02:00:00"/>
       <column name="CONTRACTID" value="a944b07c-aaed-4bcf-820c-9e6031bc3d6c"/>
       <column name="CONTRACTSTART" valueDate="2015-03-20T01:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYQUARTER"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYQUARTER                  "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
@@ -63,9 +64,9 @@
       <column name="CONTRACTEND" valueDate="2021-02-11T01:00:00"/>
       <column name="CONTRACTID" value="af3dcbe7-c76f-47a2-8441-891fec6877b5"/>
       <column name="CONTRACTSTART" valueDate="2019-05-16T02:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL               "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
@@ -73,9 +74,9 @@
       <column name="CONTRACTDUE" valueDate="2020-06-01T02:00:00"/>
       <column name="CONTRACTID" value="b2c211a7-6dcf-450b-b420-9f04d790de7a"/>
       <column name="CONTRACTSTART" valueDate="2019-05-17T02:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYANNUAL"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYANNUAL                   "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
@@ -83,9 +84,9 @@
       <column name="CONTRACTEND" valueDate="2025-03-11T01:00:00"/>
       <column name="CONTRACTID" value="28234066-ad12-451d-9cd2-fbc9f8ee0412"/>
       <column name="CONTRACTSTART" valueDate="2019-03-11T01:00:00"/>
-      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEMAIN"/>
-      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL"/>
+      <column name="CONTRACTSTATUS" value="CONTRACTSTATVALIDLI                 "/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEMAIN                    "/>
+      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL               "/>
     </insert>
     <insert tableName="CONTRACT">
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
@@ -94,8 +95,8 @@
       <column name="CONTRACTEND" valueDate="2022-05-17T02:00:00"/>
       <column name="CONTRACTID" value="5fcfa9a9-2f3d-43f0-8be0-21241a5f2ec3"/>
       <column name="CONTRACTSTART" valueDate="2019-05-17T02:00:00"/>
-      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME"/>
-      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL"/>
+      <column name="CONTRACTTYPE" value="CONTRACTTYPEFRAME                   "/>
+      <column name="PAYMENT" value="CONTRACTPAYSEMIANNUAL               "/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/DESCRIPTIONTRANSLATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/DESCRIPTIONTRANSLATION.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9117b3b85d46c61b1a5584103c5da513ab5c6b7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/DESCRIPTIONTRANSLATION.xml
@@ -0,0 +1,27 @@
+<?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="autogenerated" id="c2ae89fb26b77c5ee03331d1ef9d684a">
+    <delete tableName="DESCRIPTIONTRANSLATION"/>
+    <insert tableName="DESCRIPTIONTRANSLATION">
+      <column name="DESCRIPTION" value="Standard Stahlträger mit den Maßen 5m x 0,3m x 0,3m."/>
+      <column name="DESCRIPTIONTRANSLATIONID" value="70108db9-2c27-438d-9dff-d01c8b54c8c7"/>
+      <column name="LANG" value="deu                                 "/>
+      <column name="OBJECT_ROWID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
+      <column name="OBJECT_TYPE" value="Product"/>
+    </insert>
+    <insert tableName="DESCRIPTIONTRANSLATION">
+      <column name="DESCRIPTION" value="4 Zonen Klimaanlage für Mittelklasse Wagen"/>
+      <column name="DESCRIPTIONTRANSLATIONID" value="91f7d8e8-136c-46de-8d01-ba231ebb49e3"/>
+      <column name="LANG" value="deu                                 "/>
+      <column name="OBJECT_ROWID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
+      <column name="OBJECT_TYPE" value="Product"/>
+    </insert>
+    <insert tableName="DESCRIPTIONTRANSLATION">
+      <column name="DESCRIPTION" value="2 Zonen Klimaanlage für Klein- und Kompaktwagen"/>
+      <column name="DESCRIPTIONTRANSLATIONID" value="020ca255-eae8-4771-a4a3-e62d6702f9f0"/>
+      <column name="LANG" value="deu                                 "/>
+      <column name="OBJECT_ROWID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/>
+      <column name="OBJECT_TYPE" value="Product"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/DOCUMENTTEMPLATE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/DOCUMENTTEMPLATE.xml
index ad2cfa2445e950d478f0b1f5b3aa18b7f05a2170..b16c8ae63ecfca6937eeb29f121800a12bba8e15 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/DOCUMENTTEMPLATE.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/DOCUMENTTEMPLATE.xml
@@ -1,21 +1,22 @@
 <?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="autogenerated" id="6bbd2406-6a0d-4181-a3af-a0bf75eced39">
+  <changeSet author="autogenerated" id="557f1089dc90b95622f9a0d9c2e30029">
+    <delete tableName="DOCUMENTTEMPLATE"/>
     <insert tableName="DOCUMENTTEMPLATE">
-      <column name="DATE_NEW" valueDate="2019-05-29T00:00:00"/>
+      <column name="DATE_NEW" valueDate="2019-05-29T12:00:00"/>
       <column name="DOCUMENTTEMPLATEID" value="f032c593-f108-47dd-9fc2-357c14757a9d"/>
       <column name="ISOLANGUAGE" value="deu"/>
-      <column name="NAME" value="Erstkontakt "/>
       <column name="KIND" value="MAI                                 "/>
+      <column name="NAME" value="Erstkontakt "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="DOCUMENTTEMPLATE">
-      <column name="DATE_NEW" valueDate="2019-05-29T00:00:00"/>
+      <column name="DATE_NEW" valueDate="2019-05-29T12:00:00"/>
       <column name="DESCRIPTION" value="Rahmenvertrag"/>
       <column name="DOCUMENTTEMPLATEID" value="1269c31d-4173-434f-b2db-9154fa651a25"/>
       <column name="ISOLANGUAGE" value="deu"/>
-      <column name="NAME" value="Rahmenvertrag "/>
       <column name="KIND" value="ATT                                 "/>
+      <column name="NAME" value="Rahmenvertrag "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/FORECAST.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/FORECAST.xml
index 2e8147844f8d7ae49d8b7e4d943c6cde52e074a5..d17a25d9a50a726625876e5ded44980c4434b82f 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/FORECAST.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/FORECAST.xml
@@ -1,78 +1,77 @@
 <?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="autogenerated" id="4dd98257-1230-490f-bbe3-5122bd40ace4">
+<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="autogenerated" id="de35d4818d6cd63d2716c383c25ff437">
+    <delete tableName="FORECAST"/>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-05-17T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="2ba9de60-4c59-4441-96d8-2bee798b80fb"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="75000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-09-23T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="6e36057c-1cf3-442a-ab7c-d608195c4290"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="80000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-12-23T01:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP2"/>
       <column name="FORECASTID" value="02f21967-1303-4a82-b4f7-3959097dca9c"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP2                       "/>
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="25000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2017-10-03T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="fbddbffb-dca1-4a83-95ea-0c518ed63363"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="150000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-10-17T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="b17a9912-07d3-46b7-90e3-cc912f3d85d8"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="25000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-05-22T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP1"/>
       <column name="FORECASTID" value="3379d40c-a21c-42ba-a9db-29eef26fcb35"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP1                       "/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="100000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2018-04-17T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="5470f7bb-5917-4c11-8c24-b6c91cf4bd29"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="250000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2016-05-02T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTGROUP3"/>
       <column name="FORECASTID" value="b161df55-a04b-484f-b337-5e83bf4f38d3"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTGROUP3                       "/>
       <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="100000"/>
     </insert>
     <insert tableName="FORECAST">
       <column name="DATE_START" valueDate="2019-05-23T02:00:00"/>
-      <column name="GROUPCODE" value="PRODUCTSERVICE"/>
       <column name="FORECASTID" value="a537b090-4292-446f-bdec-db491023a6bf"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="GROUPCODE" value="PRODUCTSERVICE                      "/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="VOLUME" valueNumeric="100000"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/OBJECTMEMBER.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/OBJECTMEMBER.xml
index 75dc704dff44f5141eb98e6d0681d114b5c61027..86c4f5902b3e76f4d361d9e1d47e0820ef6d2974 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/OBJECTMEMBER.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/OBJECTMEMBER.xml
@@ -1,63 +1,133 @@
 <?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="autogenerated" id="9830be31-7d74-46f8-a006-06d25b8229eb">
+<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="autogenerated" id="2e6dac444cd5a0a5879f029fccdc0953">
+    <delete tableName="OBJECTMEMBER"/>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEPROJMANAG                    "/>
       <column name="OBJECTMEMBERID" value="336e8c10-376c-422e-afd9-1faef77c6f0c"/>
-      <column name="MEMBERROLE" value="MEMROLEPROJMANAG"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEPROJASSIST                   "/>
       <column name="OBJECTMEMBERID" value="c3b8a835-e9b2-40d1-aa4d-83838c5714ba"/>
-      <column name="MEMBERROLE" value="MEMROLEPROJASSIST"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="OBJECTMEMBERID" value="8d69dc7e-ae24-46e8-b0a0-3217b208c564"/>
+      <column name="DECIDER" valueNumeric="0"/>
       <column name="MEMBERROLE" value="70cbad1b-eac6-4369-ba50-4946e0fbcb3a"/>
+      <column name="OBJECTMEMBERID" value="8d69dc7e-ae24-46e8-b0a0-3217b208c564"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="d3ec3869-b710-44d9-b20f-50f0724631ac"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEPROJMANAG                    "/>
       <column name="OBJECTMEMBERID" value="685666f6-6545-4a51-8340-d98115b3d710"/>
-      <column name="MEMBERROLE" value="MEMROLEPROJMANAG"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEADVISE                       "/>
       <column name="OBJECTMEMBERID" value="3bd6db09-063c-43a5-828d-9fe6e958d142"/>
-      <column name="MEMBERROLE" value="MEMROLEADVISE"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-      <column name="OBJECTMEMBERID" value="100e2d29-2d34-4a5d-adc9-c09f9949d136"/>
+      <column name="DECIDER" valueNumeric="0"/>
       <column name="MEMBERROLE" value="70cbad1b-eac6-4369-ba50-4946e0fbcb3a"/>
+      <column name="OBJECTMEMBERID" value="100e2d29-2d34-4a5d-adc9-c09f9949d136"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="19c6bf30-cd8b-40df-980c-ce71c92c194c"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEADVISE                       "/>
       <column name="OBJECTMEMBERID" value="094fa52f-28ee-4988-9169-c4fcf0fd58e7"/>
-      <column name="MEMBERROLE" value="MEMROLEADVISE"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="OBJECTMEMBER">
       <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="MEMBERROLE" value="MEMROLEEXSALEMANAG                  "/>
       <column name="OBJECTMEMBERID" value="b91e741e-6e23-4a0a-a3de-06b9be398ed6"/>
-      <column name="MEMBERROLE" value="MEMROLEEXSALEMANAG"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
+      <column name="DECIDER" valueNumeric="1"/>
+      <column name="OBJECTMEMBERID" value="b576c100-af39-43b2-ba64-d2ce05c62a9b"/>
+      <column name="OBJECT_ROWID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="cd84d91a-f8fc-413b-8649-f53a7f8f3b88"/>
+      <column name="OBJECT_ROWID" value="680de39f-7f1c-4dca-8c67-9c16c3395c3f"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DECIDER" valueNumeric="1"/>
+      <column name="OBJECTMEMBERID" value="e8a497ce-e0d4-4a5d-9c36-618c36343d23"/>
+      <column name="OBJECT_ROWID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="57c66172-4480-4925-a3e5-c506551563e1"/>
+      <column name="OBJECT_ROWID" value="996b8af6-13f4-4606-a303-69f941cf6f13"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="84eb003b-c333-48a2-9679-8a135dbbc02c"/>
+      <column name="OBJECT_ROWID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="1133f149-e2d4-41b6-a4a1-1fb852104635"/>
+      <column name="OBJECT_ROWID" value="a10eaf09-7230-4889-a601-776de71cb71b"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="d5c0fef8-1a11-4c76-8683-479ca4b99804"/>
+      <column name="OBJECT_ROWID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="e81a6bf2-bf1b-45f6-a4e5-f99db96af0ed"/>
+      <column name="OBJECT_ROWID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
+    </insert>
+    <insert tableName="OBJECTMEMBER">
+      <column name="CONTACT_ID" value="d4c1bec3-656f-45ec-ae03-1c4d729d99fe"/>
+      <column name="DECIDER" valueNumeric="0"/>
+      <column name="OBJECTMEMBERID" value="a0a9d509-d613-471b-a972-da5de4475688"/>
+      <column name="OBJECT_ROWID" value="d633ce70-5841-4a26-aaed-95980af49966"/>
+      <column name="OBJECT_TYPE" value="Campaign"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/OFFER.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/OFFER.xml
index 7c2eff130441cabbc08d94d88f9d83f3860db5ec..f498e26cce82a41da197bd8b776218a3fde729dd 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/OFFER.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/OFFER.xml
@@ -1,25 +1,24 @@
 <?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="autogenerated" id="25f7045d-e9e6-4a1b-b71a-9e6743a92cd8">
+<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="autogenerated" id="21694c348fc564f543a1163d35740a06">
+    <delete tableName="OFFER"/>
     <insert tableName="OFFER">
       <column name="ADDRESS" value="Industrial Steel AG&#10;Stahlstraße 24&#10;20095 Hamburg"/>
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:35:17"/>
-      <column name="DELIVERYTERMS" value="DELIVERCARRIAGE"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="210.00"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1005"/>
       <column name="OFFERDATE" valueDate="2019-05-16T02:00:00"/>
       <column name="OFFERID" value="a9b597f0-a353-48f3-b5eb-f47d2968ebaa"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -30,18 +29,18 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_EDIT" valueDate="2019-05-17T08:26:55"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:23:52"/>
-      <column name="DELIVERYTERMS" value="DELIVERFREE"/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="3500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1006"/>
       <column name="OFFERDATE" valueDate="2019-03-08T01:00:00"/>
       <column name="OFFERID" value="5abae3a9-8d96-4709-b6be-7fc7e87f002b"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="PROBABILITY" value="25"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="PROBABILITY" value="25                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="0.00"/>
@@ -56,13 +55,13 @@
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="28500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1007"/>
       <column name="OFFERDATE" valueDate="2019-05-17T02:00:00"/>
       <column name="OFFERID" value="3d13ef72-0f23-40fc-a66f-af29511a6ad9"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="0.00"/>
@@ -73,18 +72,18 @@
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:03:46"/>
-      <column name="DELIVERYTERMS" value="DELIVERCARRIAGE"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="192500.00"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1008"/>
       <column name="OFFERDATE" valueDate="2019-02-22T01:00:00"/>
       <column name="OFFERID" value="182d647a-addd-4ef5-9c42-3912596ad63e"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -95,18 +94,18 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:43:39"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:27:12"/>
-      <column name="DELIVERYTERMS" value="DELIVERCARRIAGE"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="175000.00"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1009"/>
       <column name="OFFERDATE" valueDate="2018-08-14T02:00:00"/>
       <column name="OFFERID" value="fc02f9d0-06c5-4073-ac95-a59403988697"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="PROBABILITY" value="75"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
+      <column name="PROBABILITY" value="75                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="0.00"/>
@@ -117,18 +116,18 @@
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:28:20"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="17500.00"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1010"/>
       <column name="OFFERDATE" valueDate="2019-05-17T02:00:00"/>
       <column name="OFFERID" value="a4fd6030-bb7e-419e-877c-816d343feea7"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="PROBABILITY" value="25"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="PROBABILITY" value="25                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -141,14 +140,14 @@
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:&#10;&#10;Produkt: &#10;Produkt:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="53500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1011"/>
       <column name="OFFERDATE" valueDate="2017-07-11T02:00:00"/>
       <column name="OFFERID" value="30ff28e2-062f-4950-b4a1-71e51ff71acf"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="10165.00"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -158,18 +157,18 @@
       <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:00:44"/>
-      <column name="DELIVERYTERMS" value="DELIVERCARRIAGE"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="HEADER" value="gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="45000.00"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1012"/>
       <column name="OFFERDATE" valueDate="2019-03-25T01:00:00"/>
       <column name="OFFERID" value="e809c46a-c664-4e39-b203-55987c0379c0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="8550.00"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -180,18 +179,18 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="DATE_EDIT" valueDate="2019-05-23T11:33:16"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:04:28"/>
-      <column name="DELIVERYTERMS" value="DELIVERCARRIAGE"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="HEADER" value="Für die bisherigen Gespräche möchten wir uns bei Ihnen bedanken. Gerne bieten wir Ihnen wie folgt an:&#10;&#10;"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="25000.00"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1013"/>
       <column name="OFFERDATE" valueDate="2019-03-25T01:00:00"/>
       <column name="OFFERID" value="2497128b-c07d-4fe8-b927-1bea929cce4d"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="PROBABILITY" value="75"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="STATUS" value="OFFERSTATOPEN"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="PROBABILITY" value="75                                  "/>
+      <column name="STATUS" value="OFFERSTATOPEN                       "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="4750.00"/>
@@ -204,13 +203,13 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="210.00"/>
+      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1000"/>
       <column name="OFFERDATE" valueDate="2018-11-21T01:00:00"/>
       <column name="OFFERID" value="0461959c-88c5-4d79-9ac2-f41f26254dbe"/>
-      <column name="PROBABILITY" value="100"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-      <column name="STATUS" value="OFFERSTATSENT"/>
+      <column name="PROBABILITY" value="100                                 "/>
+      <column name="STATUS" value="OFFERSTATSENT                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -222,13 +221,13 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
+      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1001"/>
       <column name="OFFERDATE" valueDate="2018-08-12T02:00:00"/>
       <column name="OFFERID" value="0461959c-88c5-4d79-9ac2-f41f21154dbe"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-      <column name="STATUS" value="OFFERSTATSENT"/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATSENT                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -240,13 +239,13 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="630.00"/>
+      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1002"/>
       <column name="OFFERDATE" valueDate="2018-06-14T02:00:00"/>
       <column name="OFFERID" value="5561959c-88c5-4d79-9ac2-f41f21154dbe"/>
-      <column name="PROBABILITY" value="75"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-      <column name="STATUS" value="OFFERSTATSENT"/>
+      <column name="PROBABILITY" value="75                                  "/>
+      <column name="STATUS" value="OFFERSTATSENT                       "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="119.70"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -258,13 +257,13 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
+      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1003"/>
       <column name="OFFERDATE" valueDate="2018-02-23T01:00:00"/>
       <column name="OFFERID" value="0461959c-11c5-4d79-9ac2-f41f21154dbe"/>
-      <column name="PROBABILITY" value="0"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-      <column name="STATUS" value="OFFERSTATCHECK"/>
+      <column name="PROBABILITY" value="0                                   "/>
+      <column name="STATUS" value="OFFERSTATCHECK                      "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
@@ -276,13 +275,13 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="840.00"/>
+      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFERCODE" valueNumeric="1004"/>
       <column name="OFFERDATE" valueDate="2017-11-09T01:00:00"/>
       <column name="OFFERID" value="ab61911c-88c5-4d79-9ac2-f41f21154dbe"/>
-      <column name="PROBABILITY" value="50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
-      <column name="STATUS" value="OFFERSTATCHECK"/>
+      <column name="PROBABILITY" value="50                                  "/>
+      <column name="STATUS" value="OFFERSTATCHECK                      "/>
       <column name="USER_NEW" value="Admin"/>
       <column name="VAT" valueNumeric="159.60"/>
       <column name="VERSNR" valueNumeric="1"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/OFFERITEM.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/OFFERITEM.xml
index 3b0c49b7d816ade70647101a032d8a6d174d284a..de5f96c9cd8adfaaf809a16f0bee138b74273037 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/OFFERITEM.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/OFFERITEM.xml
@@ -1,8 +1,9 @@
 <?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="autogenerated" id="ed3c0518-7df4-4d57-a72e-2a74f75f374a">
+  <changeSet author="autogenerated" id="519031ba6ce4705aee04be2a14b6d22e">
+    <delete tableName="OFFERITEM"/>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -12,12 +13,12 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="aea44090-b57a-4620-ae65-12c9ade05c79"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX47"/>
       <column name="ITEMPOSITION" value="1.1"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -26,11 +27,11 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="feefb3a9-f02a-4536-9ebb-ab7070cc71ba"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="306997c2-212f-4ee3-97a2-525320c67f67"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.1"/>
       <column name="ITEMPOSITION" value="1.1.1"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -39,11 +40,11 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="44b75a12-ae8b-4003-9347-9952843425a9"/>
-      <column name="GROUPCODEID" value="PRODUCTDISCOUNT"/>
+      <column name="GROUPCODEID" value="PRODUCTDISCOUNT                     "/>
       <column name="ITEMNAME" value="Sonderrabatt"/>
       <column name="ITEMPOSITION" value="1.1.1.1"/>
       <column name="ITEMSORT" valueNumeric="4"/>
@@ -52,11 +53,11 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="368aa1c0-b802-4dea-844e-e61bf85a03c9"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="306997c2-212f-4ee3-97a2-525320c67f67"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.2a"/>
       <column name="ITEMPOSITION" value="1.1.2"/>
       <column name="ITEMSORT" valueNumeric="5"/>
@@ -65,11 +66,11 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="aea44090-b57a-4620-ae65-12c9ade05c79"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.1"/>
       <column name="ITEMPOSITION" value="1.2"/>
       <column name="ITEMSORT" valueNumeric="6"/>
@@ -78,11 +79,11 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/>
       <column name="QUANTITY" valueNumeric="2.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="aea44090-b57a-4620-ae65-12c9ade05c79"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.2"/>
       <column name="ITEMPOSITION" value="1.3"/>
       <column name="ITEMSORT" valueNumeric="7"/>
@@ -91,10 +92,10 @@
       <column name="OPTIONAL" valueNumeric="0"/>
       <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -104,11 +105,11 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="2.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -118,11 +119,11 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -132,11 +133,11 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="2.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -146,11 +147,11 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="2.00"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -160,12 +161,12 @@
       <column name="PRICE" valueNumeric="210.00"/>
       <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="fbf00bb1-b048-4b04-b585-392f87b5c591"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX47"/>
       <column name="ITEMPOSITION" value="1.1"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -174,11 +175,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="feefb3a9-f02a-4536-9ebb-ab7070cc71ba"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="9809d10a-5979-458f-9e32-2d3771285d65"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.1"/>
       <column name="ITEMPOSITION" value="1.1.1"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -187,11 +188,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="6c60f55e-27d3-44a5-a324-d184a067237a"/>
-      <column name="GROUPCODEID" value="PRODUCTDISCOUNT"/>
+      <column name="GROUPCODEID" value="PRODUCTDISCOUNT                     "/>
       <column name="ITEMNAME" value="Sonderrabatt"/>
       <column name="ITEMPOSITION" value="1.1.1.1"/>
       <column name="ITEMSORT" valueNumeric="4"/>
@@ -200,11 +201,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="368aa1c0-b802-4dea-844e-e61bf85a03c9"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="bd35c94b-5ad8-43eb-a131-501e3577d9c9"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.2"/>
       <column name="ITEMPOSITION" value="1.1.1.1.1"/>
       <column name="ITEMSORT" valueNumeric="5"/>
@@ -213,11 +214,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="9809d10a-5979-458f-9e32-2d3771285d65"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.2a"/>
       <column name="ITEMPOSITION" value="1.1.2"/>
       <column name="ITEMSORT" valueNumeric="6"/>
@@ -226,11 +227,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="fbf00bb1-b048-4b04-b585-392f87b5c591"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.1"/>
       <column name="ITEMPOSITION" value="1.2"/>
       <column name="ITEMSORT" valueNumeric="7"/>
@@ -239,11 +240,11 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/>
       <column name="QUANTITY" valueNumeric="2.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="ASSIGNEDTO" value="fbf00bb1-b048-4b04-b585-392f87b5c591"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.2"/>
       <column name="ITEMPOSITION" value="1.3"/>
       <column name="ITEMSORT" valueNumeric="8"/>
@@ -252,10 +253,10 @@
       <column name="OPTIONAL" valueNumeric="1"/>
       <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/>
       <column name="QUANTITY" valueNumeric="3.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Bremsscheiben"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -265,10 +266,10 @@
       <column name="PRICE" valueNumeric="1000.00"/>
       <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="INFO" value="2 Zonen Klimaanlage für Klein- und Kompaktwagen"/>
       <column name="ITEMNAME" value="Klimaanlage 2-Zonen"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -279,10 +280,10 @@
       <column name="PRICE" valueNumeric="2500.00"/>
       <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Turbolader"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -292,10 +293,10 @@
       <column name="PRICE" valueNumeric="3500.00"/>
       <column name="PRODUCT_ID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="INFO" value="4 Zonen Klimaanlage für Mittelklasse Wagen"/>
       <column name="ITEMNAME" value="Klimaanlage 4-Zonen"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -306,11 +307,11 @@
       <column name="PRICE" valueNumeric="5000.00"/>
       <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
       <column name="QUANTITY" valueNumeric="5.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
       <column name="DISCOUNT" valueNumeric="5.00"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="Förderanlage"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -320,10 +321,10 @@
       <column name="PRICE" valueNumeric="150000.00"/>
       <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="INFO" value="Standard Stahlträger mit den Maßen 5m x 0,3m x 0,3m."/>
       <column name="ITEMNAME" value="Stahlträger Standard"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -334,10 +335,10 @@
       <column name="PRICE" valueNumeric="5000.00"/>
       <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
       <column name="QUANTITY" valueNumeric="10.00"/>
-      <column name="UNIT" value="QUANTITYKGS"/>
+      <column name="UNIT" value="QUANTITYKGS                         "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Gipsplatten"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -347,10 +348,10 @@
       <column name="PRICE" valueNumeric="150.00"/>
       <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/>
       <column name="QUANTITY" valueNumeric="1000.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Standard Gerüst"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -360,10 +361,10 @@
       <column name="PRICE" valueNumeric="25000.00"/>
       <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Gipsplatten"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -373,10 +374,10 @@
       <column name="PRICE" valueNumeric="15000.00"/>
       <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Vollstange"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -386,10 +387,10 @@
       <column name="PRICE" valueNumeric="250.00"/>
       <column name="PRODUCT_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/>
       <column name="QUANTITY" valueNumeric="10.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="WG2 Produkt 4"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -399,11 +400,11 @@
       <column name="PRICE" valueNumeric="2500.00"/>
       <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSERVICE"/>
+      <column name="GROUPCODEID" value="PRODUCTSERVICE                      "/>
       <column name="ITEMNAME" value="Service Einsatz"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -413,11 +414,11 @@
       <column name="PRICE" valueNumeric="1000.00"/>
       <column name="PRODUCT_ID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="WG2 Proudkt 3"/>
       <column name="ITEMPOSITION" value="3"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -427,11 +428,11 @@
       <column name="PRICE" valueNumeric="50000.00"/>
       <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Ersatzteil 1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -441,11 +442,11 @@
       <column name="PRICE" valueNumeric="5000.00"/>
       <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="INFO" value="Standard Stahlträger mit den Maßen 5m x 0,3m x 0,3m."/>
       <column name="ITEMNAME" value="WG1 Standardprodukt 1"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -456,11 +457,11 @@
       <column name="PRICE" valueNumeric="10000.00"/>
       <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYKGS"/>
+      <column name="UNIT" value="QUANTITYKGS                         "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="WG1 Standardprodukt 3"/>
       <column name="ITEMPOSITION" value="3"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -470,11 +471,11 @@
       <column name="PRICE" valueNumeric="30000.00"/>
       <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="OFFERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="WG2 Produkt 5"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -484,7 +485,7 @@
       <column name="PRICE" valueNumeric="25000.00"/>
       <column name="PRODUCT_ID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/>
       <column name="QUANTITY" valueNumeric="1.00"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ORGANISATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ORGANISATION.xml
index 8cbcf443b3bbcb7bd60b98b0e4183a73d3dfaf54..a67ed645921719b16eef228f834012aa7d372a28 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/ORGANISATION.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/ORGANISATION.xml
@@ -1,14 +1,15 @@
 <?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="autogenerated" id="f0d90697-92a1-4772-aed3-a63f555e65d0">
+  <changeSet author="autogenerated" id="95e0cc901c1faf5486789261c821bf3b">
+    <delete tableName="ORGANISATION"/>
     <insert tableName="ORGANISATION">
       <column name="CUSTOMERCODE" value="1234"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T01:56:19"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:16:58"/>
       <column name="INFO" value="Die Industrial Steal AG ist einer der führenden Stahlhersteller weltweit. Das Unternehmen agiert mit über 5.000 Mitarbeitern in über 30 Ländern. "/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Industrial Steel AG"/>
       <column name="ORGANISATIONID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -17,9 +18,9 @@
       <column name="DATE_EDIT" valueDate="2019-05-28T08:00:12"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:23:13"/>
       <column name="INFO" value="Die Transatlantik Logistic Gruppe ist ein Zusammenschluss aus mehreren Logistik Unternehmen.  Über 3.000 Mitarbeiter sind bei dem europäischen Logistikriesen beschäftigt. "/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Transatlantik Logistics GmbH"/>
       <column name="ORGANISATIONID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -27,9 +28,9 @@
       <column name="CUSTOMERCODE" value="1236"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:33:57"/>
       <column name="INFO" value="Die Skyscraper Bau GmbH zählt zu den führenden Unternehmen in der Baubranche. Mit ihrem breiten Portfolio überzeugen sie regelmäßig und diversifizieren sich von ihren Mitbewerbern. "/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Skyscraper Bau GmbH"/>
       <column name="ORGANISATIONID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ORGANISATION">
@@ -44,9 +45,9 @@
     <insert tableName="ORGANISATION">
       <column name="CUSTOMERCODE" value="4545"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:40:51"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="JPM Touristik GmbH"/>
       <column name="ORGANISATIONID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ORGANISATION">
@@ -54,9 +55,9 @@
       <column name="DATE_EDIT" valueDate="2019-06-07T02:38:00"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:42:16"/>
       <column name="INFO" value="Automobilvermietung"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Sevent SE"/>
       <column name="ORGANISATIONID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -73,9 +74,9 @@
       <column name="CUSTOMERCODE" value="3232"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:38:18"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:46:35"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="SuperBauer AG"/>
       <column name="ORGANISATIONID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -83,9 +84,9 @@
       <column name="CUSTOMERCODE" value="4758"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:37:12"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:47:59"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Grobbe-Werk GmbH"/>
       <column name="ORGANISATIONID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -101,18 +102,18 @@
     <insert tableName="ORGANISATION">
       <column name="CUSTOMERCODE" value="4567"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:00:09"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Firmengruppe Matthias Bogen"/>
       <column name="ORGANISATIONID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ORGANISATION">
       <column name="CUSTOMERCODE" value="3469"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:36:31"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:03:12"/>
+      <column name="KIND" value="ORGMANUF                            "/>
       <column name="NAME" value="Aquire GmbH"/>
       <column name="ORGANISATIONID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-      <column name="KIND" value="ORGMANUF"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -120,9 +121,9 @@
       <column name="CUSTOMERCODE" value="6354"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:37:36"/>
       <column name="DATE_NEW" valueDate="2019-05-23T08:38:50"/>
+      <column name="KIND" value="ORGMANUF                            "/>
       <column name="NAME" value="Netro AG"/>
       <column name="ORGANISATIONID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-      <column name="KIND" value="ORGMANUF"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -130,9 +131,9 @@
       <column name="CUSTOMERCODE" value="1212"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:36:56"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:53:07"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="Glob Group"/>
       <column name="ORGANISATIONID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -140,9 +141,9 @@
       <column name="CUSTOMERCODE" value="6758"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:37:48"/>
       <column name="DATE_NEW" valueDate="2019-05-23T10:54:17"/>
+      <column name="KIND" value="ORGPARTNER                          "/>
       <column name="NAME" value="Schild AG"/>
       <column name="ORGANISATIONID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-      <column name="KIND" value="ORGPARTNER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -150,9 +151,9 @@
       <column name="CUSTOMERCODE" value="0001"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:35:38"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
       <column name="NAME" value="meine Firma"/>
       <column name="ORGANISATIONID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-      <column name="KIND" value="ORGCUTOMER"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -192,5 +193,12 @@
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
+    <insert tableName="ORGANISATION">
+      <column name="DATE_NEW" valueDate="2019-08-29T02:43:16"/>
+      <column name="KIND" value="ORGCUTOMER                          "/>
+      <column name="NAME" value="privat"/>
+      <column name="ORGANISATIONID" value="0                                   "/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON.xml
index efcac7a727bc99595508b68a9ab3106076dbcf4f..bb533a9bb480273bca6a84aa1eeeed6794a9c5fe 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="dd776383-55a6-412b-b7a9-50df698029d4">
+  <changeSet author="autogenerated" id="1bbef6b6b6dc5909637146305d158586">
+    <delete tableName="PERSON"/>
     <insert tableName="PERSON">
       <column name="DATEOFBIRTH" valueDate="1991-02-01"/>
       <column name="DATE_EDIT" valueDate="2019-05-29T04:02:01"/>
@@ -9,7 +10,7 @@
       <column name="GENDER" value="m                                   "/>
       <column name="LASTNAME" value="Pfiffig"/>
       <column name="PERSONID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/8bc6a224-0c05-445a-afb0-9bc233785287"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/9052404f642301dfa02140a5dc34b592"/>
       <column name="SALUTATION" value="Herr"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -22,7 +23,7 @@
       <column name="GENDER" value="f                                   "/>
       <column name="LASTNAME" value="Sommer"/>
       <column name="PERSONID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/b05d15e7-92d3-4a14-834a-d4c4f2fd20e9"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/58d526fe1ec32f07facc7c52e04619b3"/>
       <column name="SALUTATION" value="Frau"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -35,7 +36,7 @@
       <column name="GENDER" value="m                                   "/>
       <column name="LASTNAME" value="Müller"/>
       <column name="PERSONID" value="f0fb7676-8183-4bc7-beca-ca32c1e11c10"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/68050b49-0df3-45a4-9b3a-5e7c4a22f42d"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/cdd7846a9bc763c20ff79b7559a015a1"/>
       <column name="SALUTATION" value="Herr"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -48,7 +49,7 @@
       <column name="GENDER" value="f                                   "/>
       <column name="LASTNAME" value="Leicht"/>
       <column name="PERSONID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/c9449fc9-909d-4be1-a55e-96fce635dbba"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/75df8e492ebe7d8363abd71906e2c471"/>
       <column name="SALUTATION" value="Frau"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -85,7 +86,7 @@
       <column name="GENDER" value="m                                   "/>
       <column name="LASTNAME" value="Obermeier"/>
       <column name="PERSONID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/60cb5ede-b5a3-46f2-b7e0-a59582b4648e"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/9386121ffea926a30b9fa54870968dd1"/>
       <column name="SALUTATION" value="Herr"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -98,7 +99,7 @@
       <column name="GENDER" value="m                                   "/>
       <column name="LASTNAME" value="Smith"/>
       <column name="PERSONID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/19fd9f54-a462-4633-8d99-e3fdee85f2b0"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/5f2406211e3a21439aed5714ab3db571"/>
       <column name="SALUTATION" value="Herr"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -111,7 +112,7 @@
       <column name="GENDER" value="f                                   "/>
       <column name="LASTNAME" value="Lustig"/>
       <column name="PERSONID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/80bac9eb-8625-4c7c-9bb7-8b9742282c75"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0"/>
       <column name="SALUTATION" value="Frau"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
@@ -124,7 +125,7 @@
       <column name="GENDER" value="m                                   "/>
       <column name="LASTNAME" value="Admin"/>
       <column name="PERSONID" value="b16282bd-254e-4569-a56e-675449821467"/>
-      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/ccb12de9-849a-4929-b530-48ce80b607df"/>
+      <column name="PICTURE" valueBlobFile="PERSON/PICTURE/blobFiles/fb4e7cd5e2815300d1858079eadae3ca"/>
       <column name="SALUTATION" value="Herr"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/b05d15e7-92d3-4a14-834a-d4c4f2fd20e9 b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/58d526fe1ec32f07facc7c52e04619b3
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/b05d15e7-92d3-4a14-834a-d4c4f2fd20e9
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/58d526fe1ec32f07facc7c52e04619b3
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/80bac9eb-8625-4c7c-9bb7-8b9742282c75 b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/80bac9eb-8625-4c7c-9bb7-8b9742282c75
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/19fd9f54-a462-4633-8d99-e3fdee85f2b0 b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/5f2406211e3a21439aed5714ab3db571
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/19fd9f54-a462-4633-8d99-e3fdee85f2b0
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/5f2406211e3a21439aed5714ab3db571
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/c9449fc9-909d-4be1-a55e-96fce635dbba b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/75df8e492ebe7d8363abd71906e2c471
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/c9449fc9-909d-4be1-a55e-96fce635dbba
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/75df8e492ebe7d8363abd71906e2c471
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/8bc6a224-0c05-445a-afb0-9bc233785287 b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/9052404f642301dfa02140a5dc34b592
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/8bc6a224-0c05-445a-afb0-9bc233785287
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/9052404f642301dfa02140a5dc34b592
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/60cb5ede-b5a3-46f2-b7e0-a59582b4648e b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/9386121ffea926a30b9fa54870968dd1
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/60cb5ede-b5a3-46f2-b7e0-a59582b4648e
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/9386121ffea926a30b9fa54870968dd1
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/68050b49-0df3-45a4-9b3a-5e7c4a22f42d b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/cdd7846a9bc763c20ff79b7559a015a1
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/68050b49-0df3-45a4-9b3a-5e7c4a22f42d
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/cdd7846a9bc763c20ff79b7559a015a1
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/ccb12de9-849a-4929-b530-48ce80b607df b/.liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/fb4e7cd5e2815300d1858079eadae3ca
similarity index 100%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/ccb12de9-849a-4929-b530-48ce80b607df
rename to .liquibase/Data_alias/basic/_demoData/generatedData/PERSON/PICTURE/blobFiles/fb4e7cd5e2815300d1858079eadae3ca
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCT.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCT.xml
index e8fb8fcc3a97e72d1261a1ea4b1b341043550ef1..39c4ff082e68153ccd80e4ce6edc09b0ce93c4d6 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCT.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCT.xml
@@ -1,17 +1,18 @@
 <?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="autogenerated" id="61c9b746-b9ac-4521-a846-20d0361c0023">
+  <changeSet author="autogenerated" id="315e0bcad26ee7c48a37bd399639713c">
+    <delete tableName="PRODUCT"/>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:13:33"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="MINSTOCK" valueNumeric="12"/>
       <column name="PRODUCTCODE" value="ET1006"/>
       <column name="PRODUCTID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/>
       <column name="PRODUCTNAME" value="Ersatzteil 1"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -19,13 +20,13 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:13:42"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="MINSTOCK" valueNumeric="10"/>
       <column name="PRODUCTCODE" value="ET1005"/>
       <column name="PRODUCTID" value="b973e3f9-277c-4787-96a0-7cac54472420"/>
       <column name="PRODUCTNAME" value="Ersatzteil 2"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -33,13 +34,13 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:14:05"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="MINSTOCK" valueNumeric="15"/>
       <column name="PRODUCTCODE" value="ET1004"/>
       <column name="PRODUCTID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/>
       <column name="PRODUCTNAME" value="Ersatzteil 3"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -47,13 +48,13 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:14:32"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="MINSTOCK" valueNumeric="50"/>
       <column name="PRODUCTCODE" value="ET1009"/>
       <column name="PRODUCTID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/>
       <column name="PRODUCTNAME" value="Ersatzteil 4"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -61,12 +62,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-22T11:22:20"/>
       <column name="DATE_NEW" valueDate="2019-05-22T11:20:28"/>
-      <column name="GROUPCODEID" value="PRODUCTSERVICE"/>
+      <column name="GROUPCODEID" value="PRODUCTSERVICE                      "/>
       <column name="PRODUCTCODE" value="DL1005"/>
       <column name="PRODUCTID" value="bb897bd1-244b-45cd-8a2f-f5a783cbbbff"/>
       <column name="PRODUCTNAME" value="Beratungsdienstleistung"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -74,73 +75,52 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:43:25"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="MINSTOCK" valueNumeric="10"/>
       <column name="PRODUCTCODE" value="WG0001"/>
       <column name="PRODUCTID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
       <column name="PRODUCTNAME" value="WG1 Standardprodukt 1"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYKGS"/>
+      <column name="UNIT" value="QUANTITYKGS                         "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
-    <insert tableName="DESCRIPTIONTRANSLATION">
-        <column name="DESCRIPTIONTRANSLATIONID" value="70108db9-2c27-438d-9dff-d01c8b54c8c7"/>
-        <column name="OBJECT_TYPE" value="Product"/>
-        <column name="OBJECT_ROWID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
-        <column name="LANG" value="deu"/>
-        <column name="DESCRIPTION" value="Standard Stahlträger mit den Maßen 5m x 0,3m x 0,3m."/>
-    </insert>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:48:31"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="PRODUCTCODE" value="WG2002"/>
       <column name="PRODUCTID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
       <column name="PRODUCTNAME" value="WG2 Produkt 1"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
-    <insert tableName="DESCRIPTIONTRANSLATION">
-        <column name="DESCRIPTIONTRANSLATIONID" value="91f7d8e8-136c-46de-8d01-ba231ebb49e3"/>
-        <column name="OBJECT_TYPE" value="Product"/>
-        <column name="OBJECT_ROWID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
-        <column name="LANG" value="deu"/>
-        <column name="DESCRIPTION" value="4 Zonen Klimaanlage für Mittelklasse Wagen"/>
-    </insert>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:49:51"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="PRODUCTCODE" value="WG2003"/>
       <column name="PRODUCTID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/>
       <column name="PRODUCTNAME" value="WG2 Produkt 2"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
-    <insert tableName="DESCRIPTIONTRANSLATION">
-        <column name="DESCRIPTIONTRANSLATIONID" value="020ca255-eae8-4771-a4a3-e62d6702f9f0"/>
-        <column name="OBJECT_TYPE" value="Product"/>
-        <column name="OBJECT_ROWID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/>
-        <column name="LANG" value="deu"/>
-        <column name="DESCRIPTION" value="2 Zonen Klimaanlage für Klein- und Kompaktwagen"/>
-    </insert>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:53:18"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="PRODUCTCODE" value="WG2004"/>
       <column name="PRODUCTID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/>
       <column name="PRODUCTNAME" value="WG2 Proudkt 3"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -148,12 +128,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:23:33"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="PRODUCTCODE" value="WG2005"/>
       <column name="PRODUCTID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/>
       <column name="PRODUCTNAME" value="WG2 Produkt 4"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -161,36 +141,36 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:25:18"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="PRODUCTCODE" value="WG2006"/>
       <column name="PRODUCTID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/>
       <column name="PRODUCTNAME" value="WG2 Produkt 5"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:30:01"/>
-      <column name="GROUPCODEID" value="PRODUCTSERVICE"/>
+      <column name="GROUPCODEID" value="PRODUCTSERVICE                      "/>
       <column name="PRODUCTCODE" value="DL1001"/>
       <column name="PRODUCTID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/>
       <column name="PRODUCTNAME" value="Service Einsatz"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="PRODUCT">
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:32:19"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="PRODUCTCODE" value="WG1005"/>
       <column name="PRODUCTID" value="155ac430-ccfc-4814-95fc-189631779064"/>
       <column name="PRODUCTNAME" value="WG1 Standardprodukt 3"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -198,12 +178,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:34:44"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="PRODUCTCODE" value="WG1003"/>
       <column name="PRODUCTID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/>
       <column name="PRODUCTNAME" value="WG1 Standardprodukt 2"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -211,12 +191,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:14:18"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:37:31"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="PRODUCTCODE" value="WG3001"/>
       <column name="PRODUCTID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/>
       <column name="PRODUCTNAME" value="WG3 Produkt A"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -224,12 +204,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:14:27"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:39:37"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="PRODUCTCODE" value="WG3002"/>
       <column name="PRODUCTID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/>
       <column name="PRODUCTNAME" value="WG3 Produkt B"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
@@ -237,12 +217,12 @@
       <column name="ADVERTISING" value="N"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T11:14:35"/>
       <column name="DATE_NEW" valueDate="2019-05-17T07:45:10"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="PRODUCTCODE" value="WG3003"/>
       <column name="PRODUCTID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/>
       <column name="PRODUCTNAME" value="WG3 Produkt C"/>
       <column name="STATUS" valueNumeric="1"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCTPRICE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCTPRICE.xml
index 97cb34c3f225bd9dcf66cfad73bc9d8d0a2b6410..d87552b3a4551f9b6e93cbca159146665aae9ad0 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCTPRICE.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/PRODUCTPRICE.xml
@@ -1,12 +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-3.6.xsd">
-  <changeSet author="autogenerated" id="1498715a-2292-43ab-ba21-adabe92795f2">
+  <changeSet author="autogenerated" id="8e2f14e79adf44a07ca39d8839f5ac3c">
+    <delete tableName="PRODUCTPRICE"/>
     <insert tableName="PRODUCTPRICE">
       <column name="BUYSELL" value="SP"/>
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="1060.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="c5b5bfce-2bec-4601-ba43-2567209bea04"/>
       <column name="PRODUCT_ID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/>
       <column name="VALID_FROM" valueDate="2018-11-01T01:00:00"/>
@@ -18,7 +19,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="1500.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="c0769e98-bf18-444c-92b0-fc5d17613ea8"/>
       <column name="PRODUCT_ID" value="bb897bd1-244b-45cd-8a2f-f5a783cbbbff"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -29,7 +30,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="1000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="443b9532-7a41-481a-8f95-ffaf5e7949af"/>
       <column name="PRODUCT_ID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -40,7 +41,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="2500.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="a75cc2e2-bb81-4e9f-9fa4-95c8531e966d"/>
       <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -51,7 +52,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="5000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="bb425e07-4238-4cb7-b20b-a0ba4ed8b1ae"/>
       <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -62,7 +63,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="7500.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="ad57ee30-4afe-4426-912b-c0b9d03107f7"/>
       <column name="PRODUCT_ID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -73,7 +74,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="10000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="a9b9097a-f664-4114-aa0a-ff2a01dddd04"/>
       <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -84,7 +85,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="20000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="a2c9954b-bda0-4f02-8269-96cb86cb2516"/>
       <column name="PRODUCT_ID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -95,7 +96,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="30000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="43fa161c-0f85-4915-89be-6bb442143506"/>
       <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -107,7 +108,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="10000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="4028dfb7-d0e4-493e-9676-6f14a24a9507"/>
       <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/>
       <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/>
@@ -119,7 +120,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="5000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="f90ff3d2-3e62-4b6f-bcfb-db4d4ecd8de8"/>
       <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
       <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/>
@@ -132,7 +133,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="2500.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="75365b30-fd09-4255-b1d7-f4c91e9d255e"/>
       <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/>
       <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/>
@@ -145,7 +146,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="25000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="1c5b6a5a-4aa0-499e-994f-278c7bdf87bf"/>
       <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/>
       <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/>
@@ -158,7 +159,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="15000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="bf8ef6ac-9f34-40fd-aa2e-9792fee9a970"/>
       <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/>
       <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/>
@@ -170,7 +171,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="35000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="24d65d20-bf5c-474d-8351-2788431e0e1a"/>
       <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -181,7 +182,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="50000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="df9fe0b0-4f16-4592-8066-fe9b3f41fdc1"/>
       <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -192,7 +193,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="25000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="71d5a323-12d8-4d1b-8de6-6a7bf81d0b61"/>
       <column name="PRODUCT_ID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -203,7 +204,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="30000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="abfa7e4d-bd88-4186-a7ae-26385ea1d91c"/>
       <column name="PRODUCT_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/>
       <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/>
@@ -215,7 +216,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="10000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="ead04c9b-955e-4595-bb31-31685b3ceaec"/>
       <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/>
       <column name="VALID_FROM" valueDate="2019-05-23T02:00:00"/>
@@ -228,7 +229,7 @@
       <column name="CURRENCY" value="EUR                                 "/>
       <column name="FROMQUANTITY" valueNumeric="1.00"/>
       <column name="PRICE" valueNumeric="150000.00"/>
-      <column name="PRICELIST" value="PRICELISTDEFAULT"/>
+      <column name="PRICELIST" value="PRICELISTDEFAULT                    "/>
       <column name="PRODUCTPRICEID" value="2749f80a-f09b-4153-97dd-2284253e8228"/>
       <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/>
       <column name="VALID_FROM" valueDate="2019-05-23T02:00:00"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDER.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDER.xml
index 66917057ed7cf54a277b7301bcc23bb0bf35ffa2..0fbd572f29099cfa3d4d57aeab50dcc31a8dd6be 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDER.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDER.xml
@@ -1,318 +1,341 @@
 <?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="autogenerated" id="d36d2933-8630-41dd-adba-b340e7d91024">
+  <changeSet author="autogenerated" id="aa34a0a639351a7c65f86c133c51e59b">
+    <delete tableName="SALESORDER"/>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="210.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1000"/>
-      <column name="SALESORDERDATE" valueDate="2017-11-21T01:00:00"/>
-      <column name="SALESORDERID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECONF"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
+      <column name="ORDERTYPE" value="ORDTYPECONF                         "/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="SALESORDERCODE" valueNumeric="1000"/>
+      <column name="SALESORDERDATE" valueDate="2017-11-21T01:00:00"/>
+      <column name="SALESORDERID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
+      <column name="DUNNINGDATE" valueDate="2019-09-01T02:00:00"/>
+      <column name="DUNNINGLEVEL" value="1                                   "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1001"/>
-      <column name="SALESORDERDATE" valueDate="2018-08-12T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="41197800-027b-47f5-923a-f1004d09a969"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPEINVO"/>
-      <column name="DUNNINGDATE" valueDate="2019-09-01T02:00:00"/>
-      <column name="DUNNINGLEVEL" value="1"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
+      <column name="ORDERTYPE" value="ORDTYPEINVO                         "/>
+      <column name="PAID" valueNumeric="300"/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="SALESORDERCODE" valueNumeric="1001"/>
+      <column name="SALESORDERDATE" valueDate="2018-08-12T02:00:00"/>
+      <column name="SALESORDERID" value="41197800-027b-47f5-923a-f1004d09a969"/>
       <column name="VAT" valueNumeric="79.80"/>
-      <column name="PAID" valueNumeric="300.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="1"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="630.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1002"/>
-      <column name="SALESORDERDATE" valueDate="2016-06-14T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-07-25T01:00:00"/>
-      <column name="SALESORDERID" value="373f28a5-a812-433b-8196-a6bf8bdd5656"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECRED"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="1"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
+      <column name="ORDERTYPE" value="ORDTYPECRED                         "/>
+      <column name="PAYDATE" valueDate="2018-07-25T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
+      <column name="SALESORDERCODE" valueNumeric="1002"/>
+      <column name="SALESORDERDATE" valueDate="2016-06-14T02:00:00"/>
+      <column name="SALESORDERID" value="373f28a5-a812-433b-8196-a6bf8bdd5656"/>
       <column name="VAT" valueNumeric="119.70"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1003"/>
-      <column name="SALESORDERDATE" valueDate="2018-08-23T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="5a34f4a2-13b2-46ec-8f61-939fe27ba484"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECANC"/>
       <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="FREE"/>
+      <column name="ORDERTYPE" value="ORDTYPECANC                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="SALESORDERCODE" valueNumeric="1003"/>
+      <column name="SALESORDERDATE" valueDate="2018-08-23T02:00:00"/>
+      <column name="SALESORDERID" value="5a34f4a2-13b2-46ec-8f61-939fe27ba484"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1004"/>
-      <column name="SALESORDERDATE" valueDate="2017-05-09T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="545ffd81-cfa5-4be6-b62c-df269909dcd4"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPENOTE"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
+      <column name="ORDERTYPE" value="ORDTYPENOTE                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="SALESORDERCODE" valueNumeric="1004"/>
+      <column name="SALESORDERDATE" valueDate="2017-05-09T02:00:00"/>
+      <column name="SALESORDERID" value="545ffd81-cfa5-4be6-b62c-df269909dcd4"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="210.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1005"/>
-      <column name="SALESORDERDATE" valueDate="2017-11-21T01:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECANC"/>
       <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
+      <column name="ORDERTYPE" value="ORDTYPECANC                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="SALESORDERCODE" valueNumeric="1005"/>
+      <column name="SALESORDERDATE" valueDate="2017-11-21T01:00:00"/>
+      <column name="SALESORDERID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="1"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1006"/>
-      <column name="SALESORDERDATE" valueDate="2018-08-12T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="3ce30718-ecc6-4543-95c8-1b25e1b6db43"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECRED"/>
       <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="1"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="FREE"/>
+      <column name="ORDERTYPE" value="ORDTYPECRED                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="SALESORDERCODE" valueNumeric="1006"/>
+      <column name="SALESORDERDATE" valueDate="2018-08-12T02:00:00"/>
+      <column name="SALESORDERID" value="3ce30718-ecc6-4543-95c8-1b25e1b6db43"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
+      <column name="DUNNINGDATE" valueDate="2019-08-25T02:00:00"/>
+      <column name="DUNNINGLEVEL" value="2                                   "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="630.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1007"/>
-      <column name="SALESORDERDATE" valueDate="2016-06-14T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="fae74315-d7ac-4757-b952-cc71ae83f4b5"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPEINVO"/>
-      <column name="DUNNINGDATE" valueDate="2019-08-25T02:00:00"/>
-      <column name="DUNNINGLEVEL" value="2"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="DELIVERYTERMS" value="FREE"/>
+      <column name="ORDERTYPE" value="ORDTYPEINVO                         "/>
+      <column name="PAID" valueNumeric="545"/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
+      <column name="SALESORDERCODE" valueNumeric="1007"/>
+      <column name="SALESORDERDATE" valueDate="2016-06-14T02:00:00"/>
+      <column name="SALESORDERID" value="fae74315-d7ac-4757-b952-cc71ae83f4b5"/>
       <column name="VAT" valueNumeric="119.70"/>
-      <column name="PAID" valueNumeric="545.50"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1008"/>
-      <column name="SALESORDERDATE" valueDate="2018-08-23T02:00:00"/>
-      <column name="SALESORDERID" value="4b0e2423-d09d-47fc-b274-5a9fde013b64"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECONF"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
+      <column name="ORDERTYPE" value="ORDTYPECONF                         "/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
+      <column name="SALESORDERCODE" valueNumeric="1008"/>
+      <column name="SALESORDERDATE" valueDate="2018-08-23T02:00:00"/>
+      <column name="SALESORDERID" value="4b0e2423-d09d-47fc-b274-5a9fde013b64"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="420.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1009"/>
-      <column name="SALESORDERDATE" valueDate="2017-05-09T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
-      <column name="SALESORDERID" value="f5cf5ef9-ce09-4885-bcb0-421cd9cfac69"/>
       <column name="OBJECT_ROWID" value="0833465c-8851-4fbb-b7e3-8c1d73c903da"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPENOTE"/>
       <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
+      <column name="ORDERTYPE" value="ORDTYPENOTE                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
+      <column name="SALESORDERCODE" valueNumeric="1009"/>
+      <column name="SALESORDERDATE" valueDate="2017-05-09T02:00:00"/>
+      <column name="SALESORDERID" value="f5cf5ef9-ce09-4885-bcb0-421cd9cfac69"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
+      <column name="DUNNINGDATE" valueDate="2019-08-25T02:00:00"/>
+      <column name="DUNNINGLEVEL" value="2                                   "/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="0.00"/>
-      <column name="SALESORDERCODE" valueNumeric="1010"/>
-      <column name="SALESORDERDATE" valueDate="2019-05-17T02:00:00"/>
-      <column name="SALESORDERID" value="a846d596-b9ce-4a73-a842-e9084ebf612a"/>
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPEINVO"/>
-      <column name="DUNNINGDATE" valueDate="2019-08-25T02:00:00"/>
-      <column name="DUNNINGLEVEL" value="2"/>
       <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="DELIVERYTERMS" value="FREE"/>
-      <column name="PAID" valueNumeric="0.00"/>
+      <column name="ORDERTYPE" value="ORDTYPEINVO                         "/>
+      <column name="PAID" valueNumeric="0"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="SALESORDERCODE" valueNumeric="1010"/>
+      <column name="SALESORDERDATE" valueDate="2019-05-17T02:00:00"/>
+      <column name="SALESORDERID" value="a846d596-b9ce-4a73-a842-e9084ebf612a"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
-      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
-      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="CANCELLATION" valueNumeric="1"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="DELIVERYTERMS" value="DELIVEREX                           "/>
       <column name="FOOTER" value="Unsere Zahlungkonditionen finden sie hier:"/>
       <column name="HEADER" value="Gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="28500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFER_ID" value="3d13ef72-0f23-40fc-a66f-af29511a6ad9"/>
+      <column name="ORDERSTATUS" valueNumeric="0"/>
+      <column name="ORDERTYPE" value="ORDTYPENOTE                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
       <column name="SALESORDERCODE" valueNumeric="1011"/>
       <column name="SALESORDERDATE" valueDate="2019-05-22T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
       <column name="SALESORDERID" value="1b9bd530-f45b-4074-872f-b8362cfc5ed0"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPENOTE"/>
-      <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="1"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="DELIVEREX"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
-      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
-      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="CANCELLATION" valueNumeric="1"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
       <column name="HEADER" value="Gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="3500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFER_ID" value="5abae3a9-8d96-4709-b6be-7fc7e87f002b"/>
+      <column name="ORDERSTATUS" valueNumeric="0"/>
+      <column name="ORDERTYPE" value="ORDTYPECRED                         "/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT                     "/>
       <column name="SALESORDERCODE" valueNumeric="1012"/>
       <column name="SALESORDERDATE" valueDate="2019-05-22T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
       <column name="SALESORDERID" value="9069d098-7237-4fed-a365-ad2e60bf740f"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPECRED"/>
-      <column name="ORDERSTATUS" valueNumeric="0"/>
-      <column name="CANCELLATION" valueNumeric="1"/>
-      <column name="PAYMENTTERMS" value="PAYTERMDISCOUNT"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
-      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
-      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
+      <column name="DUNNINGDATE" valueDate="2019-07-13T02:00:00"/>
+      <column name="DUNNINGLEVEL" value="1                                   "/>
       <column name="HEADER" value="Gerne bieten wir Ihnen wie folgt an:&#10;&#10;Produkt: &#10;Produkt:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="53500.00"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFER_ID" value="30ff28e2-062f-4950-b4a1-71e51ff71acf"/>
+      <column name="ORDERSTATUS" valueNumeric="1"/>
+      <column name="ORDERTYPE" value="ORDTYPEINVO                         "/>
+      <column name="PAID" valueNumeric="10000"/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTADDRESS" value="Skyscraper Bau GmbH&#10;Baustraße 64&#10;70173 Stuttgart"/>
+      <column name="PAYMENTTERMS" value="PAYTERM30                           "/>
       <column name="SALESORDERCODE" valueNumeric="1013"/>
       <column name="SALESORDERDATE" valueDate="2019-06-14T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
       <column name="SALESORDERID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPEINVO"/>
-      <column name="ORDERSTATUS" valueNumeric="1"/>
-      <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="DUNNINGDATE" valueDate="2019-07-13T02:00:00"/>
-      <column name="DUNNINGLEVEL" value="1"/>
-      <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
-      <column name="PAID" valueNumeric="10000.00"/>
       <column name="VAT" valueNumeric="10165.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
     <insert tableName="SALESORDER">
-      <column name="PAYMENTADDRESS" value="Transatlantik Logistics GmbH&#10;Hafenstraße 12&#10;88045 Friedrichshafen"/>
-      <column name="DELIVERYADDRESS" value="Transatlantik Logistics GmbH&#10;Hafenstraße 12&#10;88045 Friedrichshafen"/>
+      <column name="CANCELLATION" valueNumeric="0"/>
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYADDRESS" value="Transatlantik Logistics GmbH&#10;Hafenstraße 12&#10;88045 Friedrichshafen"/>
+      <column name="DELIVERYTERMS" value="DELIVERCIF                          "/>
+      <column name="DUNNINGDATE" valueDate="2019-05-29T02:00:00"/>
+      <column name="DUNNINGLEVEL" value="2                                   "/>
       <column name="HEADER" value="Gerne bieten wir Ihnen wie folgt an:"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="NET" valueNumeric="175000.00"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="OFFER_ID" value="fc02f9d0-06c5-4073-ac95-a59403988697"/>
+      <column name="ORDERSTATUS" valueNumeric="1"/>
+      <column name="ORDERTYPE" value="ORDTYPEINVO                         "/>
+      <column name="PAID" valueNumeric="40000"/>
+      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
+      <column name="PAYMENTADDRESS" value="Transatlantik Logistics GmbH&#10;Hafenstraße 12&#10;88045 Friedrichshafen"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
       <column name="SALESORDERCODE" valueNumeric="1014"/>
       <column name="SALESORDERDATE" valueDate="2019-05-22T02:00:00"/>
-      <column name="PAYDATE" valueDate="2018-06-30T01:00:00"/>
       <column name="SALESORDERID" value="fc691949-4f61-485c-8e97-8f3d0d3d3962"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="ORDERTYPE" value="ORDTYPEINVO"/>
-      <column name="ORDERSTATUS" valueNumeric="1"/>
+      <column name="VAT" valueNumeric="0.00"/>
+      <column name="VERSNR" valueNumeric="1"/>
+    </insert>
+    <insert tableName="SALESORDER">
       <column name="CANCELLATION" valueNumeric="0"/>
-      <column name="DUNNINGDATE" valueDate="2019-05-29T02:00:00"/>
-      <column name="DUNNINGLEVEL" value="2"/>
-      <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="DELIVERYTERMS" value="DELIVERCIF"/>
-      <column name="PAID" valueNumeric="40000.00"/>
+      <column name="CONTACT_ID" value="a8a5f214-8165-4627-bee2-bceb3578147e"/>
+      <column name="CURRENCY" value="EUR                                 "/>
+      <column name="DELIVERYADDRESS" value="Industrial Steel AG&#10;Stahlstraße 24&#10;20095 Hamburg"/>
+      <column name="DELIVERYTERMS" value="FREE                                "/>
+      <column name="DUNNINGTEXT" value="Bitte zahlen Sie den ausstehenden Betrag, dies ist die erste/zweite Mahnung."/>
+      <column name="HEADER" value="Gerne bieten wir Ihnen wie folgt an:"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="NET" valueNumeric="0.00"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+      <column name="ORDERSTATUS" valueNumeric="0"/>
+      <column name="ORDERTYPE" value="ORDTYPECONF                         "/>
+      <column name="PAYDUEDATE" valueDate="2018-09-18T12:00:00"/>
+      <column name="PAYMENTADDRESS" value="Industrial Steel AG&#10;Stahlstraße 24&#10;20095 Hamburg"/>
+      <column name="PAYMENTTERMS" value="PAYTERM7                            "/>
+      <column name="SALESORDERCODE" valueNumeric="1015"/>
+      <column name="SALESORDERDATE" valueDate="2018-09-11T12:00:00"/>
+      <column name="SALESORDERID" value="50c64e0f-6a21-4842-ab41-b27c70d0939a"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="VERSNR" valueNumeric="1"/>
     </insert>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDERITEM.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDERITEM.xml
index 27e204d4605622485d0bb4de51e7ec3092f1764a..8c770e81fc7cd6b363d57ac04fbd38668e9db719 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDERITEM.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESORDERITEM.xml
@@ -1,8 +1,9 @@
 <?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="autogenerated" id="6179af3a-4596-4389-b0d9-824b5c059006">
+  <changeSet author="autogenerated" id="ebc73599266d9ef854f8e24f0f30e125">
+    <delete tableName="SALESORDERITEM"/>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -12,12 +13,12 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX47"/>
       <column name="ITEMPOSITION" value="1.1"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -26,11 +27,11 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="02681c7d-7494-4c0e-8b4a-170a64b5baa1"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="02681c7d-7494-4c0e-8b4a-170a64b5baa1"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.1"/>
       <column name="ITEMPOSITION" value="1.1.1"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -39,11 +40,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="1e1a68ba-dc28-43e5-ad05-a2d062da2dbc"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="1e1a68ba-dc28-43e5-ad05-a2d062da2dbc"/>
-      <column name="GROUPCODEID" value="PRODUCTDISCOUNT"/>
+      <column name="GROUPCODEID" value="PRODUCTDISCOUNT                     "/>
       <column name="ITEMNAME" value="Sonderrabatt"/>
       <column name="ITEMPOSITION" value="1.1.1.1"/>
       <column name="ITEMSORT" valueNumeric="4"/>
@@ -52,11 +53,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="8772eb20-dbe8-4e12-8ea8-21fb28474c3e"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="02681c7d-7494-4c0e-8b4a-170a64b5baa1"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.2a"/>
       <column name="ITEMPOSITION" value="1.1.2"/>
       <column name="ITEMSORT" valueNumeric="5"/>
@@ -65,11 +66,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="8c60146f-e950-47ad-8fed-d7bb88947789"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.1"/>
       <column name="ITEMPOSITION" value="1.2"/>
       <column name="ITEMSORT" valueNumeric="6"/>
@@ -78,11 +79,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="21ee4b39-876e-44a8-8153-dc7f38957fc7"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.2"/>
       <column name="ITEMPOSITION" value="1.3"/>
       <column name="ITEMSORT" valueNumeric="7"/>
@@ -91,10 +92,10 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="f268cf96-7ba6-44aa-8357-42e0469afe79"/>
       <column name="SALESORDER_ID" value="2e661772-951f-47bc-a862-5aa3c5aa2731"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -104,11 +105,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="ed7dcd27-0369-4196-894c-bfcce94b9e73"/>
       <column name="SALESORDER_ID" value="41197800-027b-47f5-923a-f1004d09a969"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -118,11 +119,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="17856c63-10f8-46c6-9295-5ad5bedff8ba"/>
       <column name="SALESORDER_ID" value="373f28a5-a812-433b-8196-a6bf8bdd5656"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -132,11 +133,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="3b25eeb9-ea52-4c62-a22c-041a1a2a41c2"/>
       <column name="SALESORDER_ID" value="5a34f4a2-13b2-46ec-8f61-939fe27ba484"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -146,11 +147,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="45422c17-9626-4435-80ef-58c24fdf7559"/>
       <column name="SALESORDER_ID" value="545ffd81-cfa5-4be6-b62c-df269909dcd4"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -160,12 +161,12 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="92ebcce0-8970-42dc-b32f-b892fe7dbb52"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTGROUP1"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="AX47"/>
       <column name="ITEMPOSITION" value="1.1"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -174,11 +175,11 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="2bf1eb1f-501c-4006-83cb-fb9783272e35"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="02681c7d-7494-4c0e-8b4a-170a64b5baa1"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.1"/>
       <column name="ITEMPOSITION" value="1.1.1"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -187,11 +188,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="dcb02f78-8305-462f-bbeb-f7b5cb102461"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="1e1a68ba-dc28-43e5-ad05-a2d062da2dbc"/>
-      <column name="GROUPCODEID" value="PRODUCTDISCOUNT"/>
+      <column name="GROUPCODEID" value="PRODUCTDISCOUNT                     "/>
       <column name="ITEMNAME" value="Sonderrabatt"/>
       <column name="ITEMPOSITION" value="1.1.1.1"/>
       <column name="ITEMSORT" valueNumeric="4"/>
@@ -200,11 +201,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="a63b3fed-f7a4-4173-ba3e-a893f7186ed6"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="02681c7d-7494-4c0e-8b4a-170a64b5baa1"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname4.2a"/>
       <column name="ITEMPOSITION" value="1.1.2"/>
       <column name="ITEMSORT" valueNumeric="5"/>
@@ -213,11 +214,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="6d59b91d-bfac-46ac-be79-35fdeb793d0d"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.1"/>
       <column name="ITEMPOSITION" value="1.2"/>
       <column name="ITEMSORT" valueNumeric="6"/>
@@ -226,11 +227,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="b68656aa-84e1-4682-9c2e-2d9ec0810ecb"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
       <column name="ASSIGNEDTO" value="f6207cd1-5ab0-4a97-a243-448242c02f17"/>
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="Produktname1.2"/>
       <column name="ITEMPOSITION" value="1.3"/>
       <column name="ITEMSORT" valueNumeric="7"/>
@@ -239,10 +240,10 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="fafb2b07-012e-4d20-b263-2b794e5370a7"/>
       <column name="SALESORDER_ID" value="de09c9c2-7560-4f3f-9284-853ad1341cf9"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -252,11 +253,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="45c38cca-86b7-46f1-aee8-635c8f0603bc"/>
       <column name="SALESORDER_ID" value="3ce30718-ecc6-4543-95c8-1b25e1b6db43"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -266,11 +267,11 @@
       <column name="QUANTITY" valueNumeric="3.00"/>
       <column name="SALESORDERITEMID" value="c64dc823-98cd-4159-a27d-7167f510fc57"/>
       <column name="SALESORDER_ID" value="fae74315-d7ac-4757-b952-cc71ae83f4b5"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -280,11 +281,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="5396e85b-3144-400f-8f5d-c01e875679f7"/>
       <column name="SALESORDER_ID" value="4b0e2423-d09d-47fc-b274-5a9fde013b64"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSPARE"/>
+      <column name="GROUPCODEID" value="PRODUCTSPARE                        "/>
       <column name="ITEMNAME" value="AX45"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -294,11 +295,11 @@
       <column name="QUANTITY" valueNumeric="2.00"/>
       <column name="SALESORDERITEMID" value="709e37c9-0397-4b82-965c-e11416e6f090"/>
       <column name="SALESORDER_ID" value="f5cf5ef9-ce09-4885-bcb0-421cd9cfac69"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Turbolader"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -308,10 +309,10 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="08de406a-79bf-468f-8fea-29acfc79a1e8"/>
       <column name="SALESORDER_ID" value="1b9bd530-f45b-4074-872f-b8362cfc5ed0"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="INFO" value="4 Zonen Klimaanlage für Mittelklasse Wagen"/>
       <column name="ITEMNAME" value="Klimaanlage 4-Zonen"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -322,10 +323,10 @@
       <column name="QUANTITY" valueNumeric="5.00"/>
       <column name="SALESORDERITEMID" value="368569a0-4d4d-4535-b2a5-8e380d5612ef"/>
       <column name="SALESORDER_ID" value="1b9bd530-f45b-4074-872f-b8362cfc5ed0"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Bremsscheiben"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -335,10 +336,10 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="b4f02784-4593-4caf-a845-40b426d00082"/>
       <column name="SALESORDER_ID" value="9069d098-7237-4fed-a365-ad2e60bf740f"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="INFO" value="2 Zonen Klimaanlage für Klein- und Kompaktwagen"/>
       <column name="ITEMNAME" value="Klimaanlage 2-Zonen"/>
       <column name="ITEMPOSITION" value="2"/>
@@ -349,10 +350,10 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="001410e8-f70b-4041-901c-02275ff6deb5"/>
       <column name="SALESORDER_ID" value="9069d098-7237-4fed-a365-ad2e60bf740f"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="WG2 Produkt 4"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -362,11 +363,11 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="e53aaecf-d8b6-4327-96cb-66f004e4b5fb"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTSERVICE"/>
+      <column name="GROUPCODEID" value="PRODUCTSERVICE                      "/>
       <column name="ITEMNAME" value="Service Einsatz"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -376,11 +377,11 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="cd7c9255-0de8-4b15-a952-caf9669b447a"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
-      <column name="UNIT" value="QUANTITYHOUR"/>
+      <column name="UNIT" value="QUANTITYHOUR                        "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP2"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="WG2 Proudkt 3"/>
       <column name="ITEMPOSITION" value="3"/>
       <column name="ITEMSORT" valueNumeric="3"/>
@@ -390,11 +391,11 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="468023b8-fb3e-4e4c-9d30-841d12888b73"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
       <column name="VAT" valueNumeric="19.00"/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Gipsplatten"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="ITEMSORT" valueNumeric="1"/>
@@ -404,10 +405,10 @@
       <column name="QUANTITY" valueNumeric="1000.00"/>
       <column name="SALESORDERITEMID" value="b5f17aaa-ffa7-4c8e-bbcb-d51cfecb06db"/>
       <column name="SALESORDER_ID" value="fc691949-4f61-485c-8e97-8f3d0d3d3962"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
     <insert tableName="SALESORDERITEM">
-      <column name="GROUPCODEID" value="PRODUCTGROUP3"/>
+      <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Standard Gerüst"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="ITEMSORT" valueNumeric="2"/>
@@ -417,7 +418,7 @@
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDERITEMID" value="39da8def-662f-4904-b9bf-b4e97affbeb7"/>
       <column name="SALESORDER_ID" value="fc691949-4f61-485c-8e97-8f3d0d3d3962"/>
-      <column name="UNIT" value="QUANTITYPIECES"/>
+      <column name="UNIT" value="QUANTITYPIECES                      "/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT.xml
index cfea469e359903933da88331d0957fd624d857e9..5d3432e943b945d13985666792a54cab87814c9d 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT.xml
@@ -1,64 +1,65 @@
 <?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="autogenerated" id="301fa7a0-f5a7-4bc1-a53b-cb6a4a6dae35">
+  <changeSet author="autogenerated" id="d276ec245fea2a49f4087214cf141557">
+    <delete tableName="SALESPROJECT"/>
     <insert tableName="SALESPROJECT">
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="ENDDATE" valueDate="2020-05-16T02:00:00"/>
-      <column name="PHASE" value="SALPROJPHASEMQC"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PHASE" value="SALPROJPHASEMQC                     "/>
+      <column name="PROBABILITY" value="SALPROJPROB25                       "/>
       <column name="PROJECTCODE" valueNumeric="1002"/>
       <column name="PROJECTTITLE" value="Erstprojekt"/>
       <column name="SALESPROJECTID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="STARTDATE" valueDate="2019-05-16T02:00:00"/>
-      <column name="STATUS" value="SALPROJSTATOPEN"/>
+      <column name="STATUS" value="SALPROJSTATOPEN                     "/>
       <column name="VOLUME" valueNumeric="200000.00"/>
     </insert>
     <insert tableName="SALESPROJECT">
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="ENDDATE" valueDate="2020-05-17T02:00:00"/>
-      <column name="PHASE" value="SALPROJPHASESAL"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PHASE" value="SALPROJPHASESAL                     "/>
+      <column name="PROBABILITY" value="SALPROJPROB25                       "/>
       <column name="PROJECTCODE" valueNumeric="1003"/>
       <column name="PROJECTTITLE" value="Skyscraper / Pilotprojekt"/>
       <column name="SALESPROJECTID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="STARTDATE" valueDate="2019-05-17T02:00:00"/>
-      <column name="STATUS" value="SALPROJSTATOPEN"/>
+      <column name="STATUS" value="SALPROJSTATOPEN                     "/>
       <column name="VOLUME" valueNumeric="120000.00"/>
     </insert>
     <insert tableName="SALESPROJECT">
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="ENDDATE" valueDate="2020-05-17T02:00:00"/>
-      <column name="PHASE" value="SALPROJPHASESQO"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PHASE" value="SALPROJPHASESQO                     "/>
+      <column name="PROBABILITY" value="SALPROJPROB25                       "/>
       <column name="PROJECTCODE" valueNumeric="1004"/>
       <column name="PROJECTTITLE" value="Transatlantik Initialprojekt"/>
       <column name="SALESPROJECTID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="STARTDATE" valueDate="2019-05-17T02:00:00"/>
-      <column name="STATUS" value="SALPROJSTATOPEN"/>
+      <column name="STATUS" value="SALPROJSTATOPEN                     "/>
       <column name="VOLUME" valueNumeric="250000.00"/>
     </insert>
     <insert tableName="SALESPROJECT">
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="ENDDATE" valueDate="2020-05-22T02:00:00"/>
-      <column name="PHASE" value="SALPROJPHASENEGO"/>
-      <column name="PROBABILITY" value="SALPROJPROB50"/>
+      <column name="PHASE" value="SALPROJPHASENEGO                    "/>
+      <column name="PROBABILITY" value="SALPROJPROB50                       "/>
       <column name="PROJECTCODE" valueNumeric="1005"/>
       <column name="PROJECTTITLE" value="Kronen Pilotprojekt"/>
       <column name="SALESPROJECTID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
       <column name="STARTDATE" valueDate="2017-05-16T02:00:00"/>
-      <column name="STATUS" value="SALPROJSTATOPEN"/>
+      <column name="STATUS" value="SALPROJSTATOPEN                     "/>
       <column name="VOLUME" valueNumeric="350000.00"/>
     </insert>
     <insert tableName="SALESPROJECT">
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="ENDDATE" valueDate="2020-05-22T02:00:00"/>
-      <column name="PHASE" value="SALPROJPHASESQO"/>
-      <column name="PROBABILITY" value="SALPROJPROB50"/>
+      <column name="PHASE" value="SALPROJPHASESQO                     "/>
+      <column name="PROBABILITY" value="SALPROJPROB50                       "/>
       <column name="PROJECTCODE" valueNumeric="1006"/>
       <column name="PROJECTTITLE" value="Buchner Neuprojekt"/>
       <column name="SALESPROJECTID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
       <column name="STARTDATE" valueDate="2016-02-05T01:00:00"/>
-      <column name="STATUS" value="SALPROJSTATOPEN"/>
+      <column name="STATUS" value="SALPROJSTATOPEN                     "/>
       <column name="VOLUME" valueNumeric="450000.00"/>
     </insert>
   </changeSet>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_MILESTONE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_MILESTONE.xml
index ec5b3c041e4d9402d769c1b081dcfbe0d78e0f17..b17f752143b3942fdcda0a233ef593d9aade7ef3 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_MILESTONE.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_MILESTONE.xml
@@ -1,143 +1,140 @@
 <?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="autogenerated" id="39eb990c-b75c-4bc2-bd52-4c91c01430fc">
+  <changeSet author="autogenerated" id="5594ec1d7390747cdbba072e915c70f8">
+    <delete tableName="SALESPROJECT_MILESTONE"/>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_END" valueDate="2019-05-23T10:18:10"/>
       <column name="DATE_START" valueDate="2019-05-16T01:34:58"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASENQC                     "/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_MILESTONEID" value="b2cb428d-b76b-423a-9b61-04d03213e6d3"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASENQC"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-06-15T01:34:58"/>
+      <column name="KIND" value="SalesprojectState"/>
+      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN                     "/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_MILESTONEID" value="ae7fe604-2fea-4aa1-be75-e990e8f31c74"/>
-      <column name="KIND" value="SalesprojectState"/>
-      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN"/>
     </insert>
-    
     <insert tableName="SALESPROJECT_MILESTONE">
-      <column name="DATE_START" valueDate="2019-04-25T08:08:07"/>
       <column name="DATE_END" valueDate="2019-05-10T08:08:07"/>
+      <column name="DATE_START" valueDate="2019-04-25T08:08:07"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASENQC                     "/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_MILESTONEID" value="063a2c02-4b21-459a-8ae3-558ba67973dd"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASENQC"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
-      <column name="DATE_START" valueDate="2019-05-10T08:08:07"/>
       <column name="DATE_END" valueDate="2019-06-17T08:08:07"/>
+      <column name="DATE_START" valueDate="2019-05-10T08:08:07"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASEMAL                     "/>
       <column name="PARENT_ID" value="063a2c02-4b21-459a-8ae3-558ba67973dd"/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_MILESTONEID" value="122a232c-0b24-45f1-a55f-d827a3d993de"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASEMAL"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-06-17T08:08:07"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASESAL                     "/>
       <column name="PARENT_ID" value="122a232c-0b24-45f1-a55f-d827a3d993de"/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_MILESTONEID" value="737a988e-8779-4449-ba82-50f4361974eb"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-17T08:08:08"/>
+      <column name="KIND" value="SalesprojectState"/>
+      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN                     "/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_MILESTONEID" value="5189697c-5dbf-4d10-a163-dfde87e490ab"/>
-      <column name="KIND" value="SalesprojectState"/>
-      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_END" valueDate="2019-05-23T10:44:48"/>
       <column name="DATE_START" valueDate="2019-05-10T08:39:38"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASESAL                     "/>
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="SALESPROJECT_MILESTONEID" value="4e764ba9-8f81-4e01-93de-f9769205dd3c"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-17T08:39:38"/>
+      <column name="KIND" value="SalesprojectState"/>
+      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN                     "/>
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="SALESPROJECT_MILESTONEID" value="d77dc2ae-f12d-49ac-9a8f-ee0b5086f6ef"/>
-      <column name="KIND" value="SalesprojectState"/>
-      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_END" valueDate="2019-05-23T10:44:26"/>
       <column name="DATE_START" valueDate="2019-05-14T11:51:20"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASESAL                     "/>
       <column name="SALESPROJECT_ID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
       <column name="SALESPROJECT_MILESTONEID" value="d77a1712-bd57-4d4f-bc58-69ce58f31685"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-22T11:51:20"/>
+      <column name="KIND" value="SalesprojectState"/>
+      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN                     "/>
       <column name="SALESPROJECT_ID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
       <column name="SALESPROJECT_MILESTONEID" value="4529f6d1-2d4d-4dfc-b404-6a3d30e7153b"/>
-      <column name="KIND" value="SalesprojectState"/>
-      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
-      <column name="DATE_START" valueDate="2019-05-22T01:42:51"/>
       <column name="DATE_END" valueDate="2019-06-19T08:08:07"/>
+      <column name="DATE_START" valueDate="2019-05-22T01:42:51"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASESQO                     "/>
       <column name="SALESPROJECT_ID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
       <column name="SALESPROJECT_MILESTONEID" value="eff31d24-4434-4b92-9de9-eeb8eb43cb72"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESQO"/>
     </insert>
-    
-      <insert tableName="SALESPROJECT_MILESTONE">
+    <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-06-19T08:08:07"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASEMAL                     "/>
       <column name="PARENT_ID" value="eff31d24-4434-4b92-9de9-eeb8eb43cb72"/>
       <column name="SALESPROJECT_ID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
       <column name="SALESPROJECT_MILESTONEID" value="40512b52-d0f4-4a07-a894-88f72455e700"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASEMAL"/>
     </insert>
-    
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-22T01:42:51"/>
+      <column name="KIND" value="SalesprojectState"/>
+      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN                     "/>
       <column name="SALESPROJECT_ID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
       <column name="SALESPROJECT_MILESTONEID" value="381b808e-d0a7-408b-a794-55c10b0399b5"/>
-      <column name="KIND" value="SalesprojectState"/>
-      <column name="MILESTONEVALUE" value="SALPROJSTATOPEN"/>
     </insert>
-    
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_END" valueDate="2019-06-15T11:30:09"/>
       <column name="DATE_START" valueDate="2019-06-01T10:18:10"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASEOFFER                   "/>
       <column name="PARENT_ID" value="b2cb428d-b76b-423a-9b61-04d03213e6d3"/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_MILESTONEID" value="47999521-d6ea-4a4d-959c-e72776ba5a25"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASEOFFER"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-23T10:44:26"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASENEGO                    "/>
       <column name="PARENT_ID" value="d77a1712-bd57-4d4f-bc58-69ce58f31685"/>
       <column name="SALESPROJECT_ID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
       <column name="SALESPROJECT_MILESTONEID" value="61f7f5d6-01a6-4088-9387-820cb71ea526"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASENEGO"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
       <column name="DATE_START" valueDate="2019-05-23T10:44:48"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASESQO                     "/>
       <column name="PARENT_ID" value="4e764ba9-8f81-4e01-93de-f9769205dd3c"/>
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="SALESPROJECT_MILESTONEID" value="8a33dafb-4a1b-4ec9-a1cd-37a6c75e3721"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESQO"/>
     </insert>
     <insert tableName="SALESPROJECT_MILESTONE">
-      <column name="DATE_START" valueDate="2019-05-23T11:30:10"/>
       <column name="DATE_END" valueDate="2019-06-01T11:30:09"/>
+      <column name="DATE_START" valueDate="2019-05-23T11:30:10"/>
+      <column name="KIND" value="SalesprojectPhase"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASEMQC                     "/>
       <column name="PARENT_ID" value="b2cb428d-b76b-423a-9b61-04d03213e6d3"/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_MILESTONEID" value="14da1165-ed6c-4f2a-8766-11d3533804cb"/>
-      <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASEMQC"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_SOURCE.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_TOUCHPOINT.xml
similarity index 81%
rename from .liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_SOURCE.xml
rename to .liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_TOUCHPOINT.xml
index 8edcdac3a50377b6d28c16b2c6b60696087446f7..01f4a800a0274d98215c0aad4942bcaf9a49b4ed 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_SOURCE.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALESPROJECT_TOUCHPOINT.xml
@@ -1,45 +1,46 @@
 <?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="autogenerated" id="a4a96fc2-81cb-41a6-ac45-e935fe7378db">
+  <changeSet author="autogenerated" id="ec1fb86a6a193edfc24ce315f05cf2d5">
+    <delete tableName="SALESPROJECT_TOUCHPOINT"/>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-05-17T08:22:56"/>
       <column name="INFO" value="Kontakt über die Webseite"/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="2290111c-005b-4602-8adb-fb13844e065f"/>
-      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB"/>
+      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB                     "/>
     </insert>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-05-17T08:23:27"/>
       <column name="INFO" value="Besuch bei der Messe"/>
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="a3e94450-561f-43a8-bdec-64b093056187"/>
-      <column name="TOUCHPOINT" value="SALPROJSCFAIR"/>
+      <column name="TOUCHPOINT" value="SALPROJSCFAIR                       "/>
     </insert>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-03-12T01:00:00"/>
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="d178bb9e-0b6f-4f61-ac5e-f29b14488185"/>
-      <column name="TOUCHPOINT" value="SALPROJSCFAIR"/>
+      <column name="TOUCHPOINT" value="SALPROJSCFAIR                       "/>
     </insert>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-03-25T01:00:00"/>
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="f42c0831-5f10-4b32-af21-62b334fd21d7"/>
-      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB"/>
+      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB                     "/>
     </insert>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-05-23T10:19:16"/>
       <column name="INFO" value="Die relevanten AP's waren am Stand. Hatten ein sehr produktives Gespräch."/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="675253dd-0337-44c0-b230-71f030ee0246"/>
-      <column name="TOUCHPOINT" value="SALPROJSCFAIR"/>
+      <column name="TOUCHPOINT" value="SALPROJSCFAIR                       "/>
     </insert>
     <insert tableName="SALESPROJECT_TOUCHPOINT">
       <column name="ENTRYDATE" valueDate="2019-05-23T10:33:18"/>
       <column name="INFO" value="Erster Kontakt mit uns."/>
       <column name="SALESPROJECT_ID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="SALESPROJECT_TOUCHPOINTID" value="515ac173-4eab-4783-9c3f-e637c462f6b3"/>
-      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB"/>
+      <column name="TOUCHPOINT" value="SALPROJSCOWNWEB                     "/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/SALUTATION.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/SALUTATION.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1f44ea0f285f6076ea39d319eaa48dbef836878
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/SALUTATION.xml
@@ -0,0 +1,298 @@
+<?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="autogenerated" id="4dd817568306fc14f8f99550e6ac0a03">
+    <delete tableName="SALUTATION"/>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr {ln}"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="c98c8644-9e00-4715-a775-827a364f5cef"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="1"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Bürgermeister {fn} - {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Bürgermeister"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="8feaf27b-1fae-4d8c-a742-9cd023f46409"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="2"/>
+      <column name="TITLE" value="Bürgermeister"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Frau {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrte Frau {ln}"/>
+      <column name="SALUTATION" value="Frau"/>
+      <column name="SALUTATIONID" value="cbcc2c2b-9b64-442b-a6be-aaf8e462128c"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="3"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrte Dameng und Herreng"/>
+      <column name="SALUTATIONID" value="6b835563-5d3e-4c4c-807b-63c5bdb82e68"/>
+      <column name="SORT" valueNumeric="4"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="{ti} {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Dr.  {ln}"/>
+      <column name="SALUTATION" value="Mr."/>
+      <column name="SALUTATIONID" value="f9135efb-ebd4-4c9f-bfa1-3beedb647009"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="5"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Dr. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Dr. {ln}"/>
+      <column name="SALUTATION" value="Mrs."/>
+      <column name="SALUTATIONID" value="0b9a3d9b-a56c-47e9-a984-e88cface58db"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="6"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Madame, Monsieur"/>
+      <column name="SALUTATIONID" value="ff97826d-a8ea-45e5-b426-2a27f4fa9201"/>
+      <column name="SORT" valueNumeric="7"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Monsieur {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Monsieur"/>
+      <column name="SALUTATION" value="Monsieur"/>
+      <column name="SALUTATIONID" value="c1095e86-38d6-4329-a388-4cfabab10eae"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="8"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Frau Dr. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrte Frau Dr. {ln}"/>
+      <column name="SALUTATION" value="Frau"/>
+      <column name="SALUTATIONID" value="6b35b8c5-920c-408b-b172-453a506aa775"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="9"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Monsieur Prof.{fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Monsieur Prof."/>
+      <column name="SALUTATION" value="Monsieur"/>
+      <column name="SALUTATIONID" value="67fa73ae-a739-44fd-9244-28a49bc0d01d"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="10"/>
+      <column name="TITLE" value="Prof."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Monsieur Dr.{fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Monsieur Dr."/>
+      <column name="SALUTATION" value="Monsieur"/>
+      <column name="SALUTATIONID" value="516b740d-b932-4a64-b611-af0ea69f6bd0"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="11"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Professor {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="5d9ad542-27b8-4dec-bcbd-a2c7d223f012"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="12"/>
+      <column name="TITLE" value="Professor"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Dr. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Dr. {ln}"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="76fe57c0-cf68-4240-ba6d-eb7d52f46317"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="13"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Präsident {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Präsident"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="4b9af3f4-f34a-4170-a28c-ffdbca80c4d3"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="14"/>
+      <column name="TITLE" value="Präsident"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Prof. Dr. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="1f19ba34-8346-4620-a10e-fb39fdd0be9b"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="15"/>
+      <column name="TITLE" value="Prof. Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Mr. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Mr. {ln}"/>
+      <column name="SALUTATION" value="Mr."/>
+      <column name="SALUTATIONID" value="801efd2a-41ce-4a5d-8ed5-c2db7fedb4e8"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="16"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Professor {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Professor {ln}"/>
+      <column name="SALUTATION" value="Mr."/>
+      <column name="SALUTATIONID" value="ce348b08-c1bf-4e76-8272-6d6b32ecdd6a"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="17"/>
+      <column name="TITLE" value="Professor"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Mrs. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Mrs. {ln}"/>
+      <column name="SALUTATION" value="Mrs."/>
+      <column name="SALUTATIONID" value="11816f93-f6e9-427f-af68-fbf29c3e3544"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="18"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Madame {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Madame"/>
+      <column name="SALUTATION" value="Madame"/>
+      <column name="SALUTATIONID" value="2360e24d-1784-47b8-b0e9-3b57bd704e8a"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="19"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Sir or Madame"/>
+      <column name="SALUTATIONID" value="f7b3c876-366d-438a-a1e6-f17ceb641f36"/>
+      <column name="SORT" valueNumeric="20"/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Prof. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="75f4f04f-1877-425d-8d5d-56604d0040b2"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="21"/>
+      <column name="TITLE" value="Prof."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Monsieur Prof.Dr.{fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Monsieur Prof.Dr."/>
+      <column name="SALUTATION" value="Monsieur"/>
+      <column name="SALUTATIONID" value="2d8ec97f-38d7-45a8-9c45-ed672f4b035d"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="22"/>
+      <column name="TITLE" value="Prof.Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Madame Dr.{fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Madame Dr."/>
+      <column name="SALUTATION" value="Madame"/>
+      <column name="SALUTATIONID" value="4e76c69b-ee75-49e5-8581-2a808b29a117"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="23"/>
+      <column name="TITLE" value="Dr."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Monsieur Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Monsieur Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Monsieur"/>
+      <column name="SALUTATIONID" value="f3ea547a-d744-4ce8-815a-126d9697e037"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="24"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Madame Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="fra"/>
+      <column name="LETTERSALUTATION" value="Madame Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Madame"/>
+      <column name="SALUTATIONID" value="e8e001ab-b200-480f-917b-33d57e2a8734"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="25"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Frau Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrte Frau Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Frau"/>
+      <column name="SALUTATIONID" value="0e719a2a-1018-49e0-b056-c90779955bf9"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="26"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Herr Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="deu"/>
+      <column name="LETTERSALUTATION" value="Sehr geehrter Herr Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Herr"/>
+      <column name="SALUTATIONID" value="0500939e-5820-457d-a95f-6835b9501df9"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="27"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Mr. Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Mr."/>
+      <column name="SALUTATIONID" value="5260f79c-1001-41dc-b3ff-28b4ce7091b9"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="28"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Señor Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="spa"/>
+      <column name="LETTERSALUTATION" value="Estimado Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Señor"/>
+      <column name="SALUTATIONID" value="7617a199-82b7-40ef-b2f7-0e85d32fad64"/>
+      <column name="SEX" value="m                                   "/>
+      <column name="SORT" valueNumeric="29"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Señora Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="spa"/>
+      <column name="LETTERSALUTATION" value="Estimado Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Señora"/>
+      <column name="SALUTATIONID" value="25b28c87-edb5-4686-a3c4-92a5136aadc0"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="30"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+    <insert tableName="SALUTATION">
+      <column name="HEADLINE" value="Mrs. Dr. Ing. {fn} {ln}"/>
+      <column name="ISOLANGUAGE" value="eng"/>
+      <column name="LETTERSALUTATION" value="Dear Dr. Ing. {ln}"/>
+      <column name="SALUTATION" value="Mrs."/>
+      <column name="SALUTATIONID" value="4505783d-8a9f-4a18-ba2e-091794db3812"/>
+      <column name="SEX" value="f                                   "/>
+      <column name="SORT" valueNumeric="31"/>
+      <column name="TITLE" value="Dr. Ing."/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/TASK.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/TASK.xml
index b81beaf2db174b65691dc7dcccd572080ab9e7c7..42387513f9e40068693e63edeb0725ef5dcc88fa 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/TASK.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/TASK.xml
@@ -1,185 +1,199 @@
 <?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="autogenerated" id="08f2d3ea-72db-4aad-b18e-d3f36eb83ee0">
+  <changeSet author="autogenerated" id="19d8402eb9ee1f6140a060757bf30b87">
+    <delete tableName="TASK"/>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Zu offenen Opportunities den Forecast anpassen"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-24T09:34:00"/>
-      <column name="PRIORITY" value="TASKPRIOLOW"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIOLOW                         "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-05-17T09:34:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Forecast anpassen"/>
       <column name="TASKID" value="7d404da2-78bf-427b-8abb-4c7e953220ca"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Kunde wollte ein Angebot, hierzu die offenen Posten klären"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-15T09:36:00"/>
-      <column name="PRIORITY" value="TASKPRIOMEDIUM"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIOMEDIUM                      "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-05-08T09:36:00"/>
-      <column name="STATUS" value="IN-PROGRESS"/>
+      <column name="STATUS" value="IN-PROGRESS                         "/>
       <column name="SUBJECT" value="Nachfassen bei Kunden"/>
       <column name="TASKID" value="783f38b6-db71-42b5-9117-848553905c93"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="EDITOR_CONTACT_ID" value="4cc98357-25f3-462b-898c-440f9faf4b97"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-24T09:38:00"/>
-      <column name="PRIORITY" value="TASKPRIOMEDIUM"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIOMEDIUM                      "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-05-17T09:38:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Besuch vorbereiten"/>
       <column name="TASKID" value="d6217dc5-5585-4919-a545-9cdc64a1ca58"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Kampagnenplanung für dieses Jahr beenden."/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-22T10:25:00"/>
-      <column name="PRIORITY" value="TASKPRIOHIGH"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIOHIGH                        "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="START_DATE" valueDate="2019-05-17T10:25:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Kampagne zu Akquise planen"/>
       <column name="TASKID" value="380c1ae1-c7d4-49b7-87e1-4fe2e16c4c52"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="EDITOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-29T01:44:00"/>
-      <column name="PRIORITY" value="TASKPRIOMEDIUM"/>
-      <column name="PROGRESS" value="TASKPROG50"/>
+      <column name="PRIORITY" value="TASKPRIOMEDIUM                      "/>
+      <column name="PROGRESS" value="TASKPROG50                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="START_DATE" valueDate="2019-05-22T01:44:00"/>
-      <column name="STATUS" value="IN-PROGRESS"/>
+      <column name="STATUS" value="IN-PROGRESS                         "/>
       <column name="SUBJECT" value="Skyscraper VP für nächste Schritte"/>
       <column name="TASKID" value="f8fcdce1-da60-46d6-9ce3-3866e093730d"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="EDITOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-24T01:46:00"/>
-      <column name="PRIORITY" value="TASKPRIONONE"/>
-      <column name="PROGRESS" value="TASKPROG50"/>
+      <column name="PRIORITY" value="TASKPRIONONE                        "/>
+      <column name="PROGRESS" value="TASKPROG50                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="START_DATE" valueDate="2019-05-22T01:46:00"/>
-      <column name="STATUS" value="IN-PROGRESS"/>
+      <column name="STATUS" value="IN-PROGRESS                         "/>
       <column name="SUBJECT" value="Vorbereitung Präsentation"/>
       <column name="TASKID" value="2e50d2cd-9429-433c-8f6e-2e31a9e7908e"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Kunde ist sehr interessiert an unserem Produkten, weitere Produktabstimmung intern."/>
       <column name="EDITOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-29T01:48:00"/>
-      <column name="PRIORITY" value="TASKPRIOLOW"/>
-      <column name="PROGRESS" value="TASKPROG50"/>
+      <column name="PRIORITY" value="TASKPRIOLOW                         "/>
+      <column name="PROGRESS" value="TASKPROG50                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="START_DATE" valueDate="2019-02-11T01:48:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Lead nachfassen"/>
       <column name="TASKID" value="67afcc4b-f71b-4da6-a8b3-e7947c411a2a"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-06-21T06:03:00"/>
-      <column name="PRIORITY" value="TASKPRIOLOW"/>
-      <column name="PROGRESS" value="TASKPROG25"/>
+      <column name="PRIORITY" value="TASKPRIOLOW                         "/>
+      <column name="PROGRESS" value="TASKPROG25                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-03-11T06:03:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Produkt Präsentation vorbereiten und mit Lisa Sommer abstimmen"/>
       <column name="TASKID" value="cf99cace-a6e1-46a6-ad83-c634e373f320"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Strategieevent 2-Tage"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-11-13T06:04:00"/>
-      <column name="PRIORITY" value="TASKPRIOHIGH"/>
-      <column name="PROGRESS" value="TASKPROG75"/>
+      <column name="PRIORITY" value="TASKPRIOHIGH                        "/>
+      <column name="PROGRESS" value="TASKPROG75                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="START_DATE" valueDate="2019-05-22T06:04:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Event im Hause"/>
       <column name="TASKID" value="d8f35764-2c56-45be-93c7-f1e0695e2417"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Winterreifen draufmachen lassen"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-10-01T06:05:00"/>
-      <column name="PRIORITY" value="TASKPRIONONE"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIONONE                        "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d"/>
       <column name="START_DATE" valueDate="2019-05-22T06:05:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Autoreifen wechseln"/>
       <column name="TASKID" value="0d126a7e-4308-4857-9245-5a40f3e2b36e"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Preisabstimmung."/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-04-05T09:08:00"/>
-      <column name="PRIORITY" value="TASKPRIOMEDIUM"/>
-      <column name="PROGRESS" value="TASKPROG75"/>
+      <column name="PRIORITY" value="TASKPRIOMEDIUM                      "/>
+      <column name="PROGRESS" value="TASKPROG75                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-04-01T09:08:00"/>
-      <column name="STATUS" value="WAITING"/>
+      <column name="STATUS" value="WAITING                             "/>
       <column name="SUBJECT" value="Mit der Vertriebsleitung abstimmen wie viel Prozent Rabatt gegeben werden kann."/>
       <column name="TASKID" value="81a4c8e7-4429-41e1-a534-f1be21e56b5e"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-30T09:21:00"/>
-      <column name="PRIORITY" value="TASKPRIOHIGH"/>
-      <column name="PROGRESS" value="TASKPROG75"/>
+      <column name="PRIORITY" value="TASKPRIOHIGH                        "/>
+      <column name="PROGRESS" value="TASKPROG75                          "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="START_DATE" valueDate="2019-05-23T09:21:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Präsentation vor Ort vorbereiten"/>
       <column name="TASKID" value="96ec8b48-9fac-4216-bc98-a8323f0592f9"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-05-30T11:50:00"/>
-      <column name="PRIORITY" value="TASKPRIOLOW"/>
-      <column name="PROGRESS" value="TASKPROG0"/>
+      <column name="PRIORITY" value="TASKPRIOLOW                         "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
       <column name="START_DATE" valueDate="2019-05-23T11:50:00"/>
-      <column name="STATUS" value="NEW"/>
+      <column name="STATUS" value="NEW                                 "/>
       <column name="SUBJECT" value="Test"/>
       <column name="TASKID" value="81a4d411-f317-4080-84b6-55ed91d26d34"/>
-      <column name="KIND" value="TASK"/>
     </insert>
     <insert tableName="TASK">
       <column name="DESCRIPTION" value="Es sollen die effizienten Wertschöpfungsketten der Prozessdefinitionseinheiten im primären Schritt gebündelt und sekundär analysiert und verifiziert werden."/>
       <column name="EDITOR_CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="KIND" value="TASK                                "/>
       <column name="MATURITY_DATE" valueDate="2019-01-20T05:00:00"/>
-      <column name="PRIORITY" value="TASKPRIOHIGH"/>
+      <column name="PRIORITY" value="TASKPRIOHIGH                        "/>
       <column name="PROTECTIONLEVEL" valueNumeric="0"/>
       <column name="REQUESTOR_CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="START_DATE" valueDate="2019-01-20T03:00:00"/>
-      <column name="STATUS" value="IN-PROGRESS"/>
+      <column name="STATUS" value="IN-PROGRESS                         "/>
       <column name="SUBJECT" value="effiziente Wertschöpfungsketten bündeln und anlaysieren"/>
       <column name="TASKID" value="e9cb198d-c420-4192-9c29-b23682457d8e"/>
-      <column name="KIND" value="TASK"/>
+    </insert>
+    <insert tableName="TASK">
+      <column name="DESCRIPTION" value="Die Funktionalitäten des Tools erfüllen nicht die geforderten Funktionalitäten.&#10;Im Detail:  Die Zeiterfassung kann nicht zu Tickets erfasst werden.&#10;"/>
+      <column name="EDITOR_CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="KIND" value="TICKET                              "/>
+      <column name="MATURITY_DATE" valueDate="2019-09-12T01:43:00"/>
+      <column name="PRIORITY" value="TASKPRIOLOW                         "/>
+      <column name="PROGRESS" value="TASKPROG0                           "/>
+      <column name="REQUESTOR_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="START_DATE" valueDate="2019-09-05T01:43:00"/>
+      <column name="STATUS" value="ASSIGNED                            "/>
+      <column name="SUBJECT" value="Projektplanung fehlerhaft"/>
+      <column name="TASKID" value="998d95e6-3d3b-448b-a634-5516c0e392a5"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/TASKLINK.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/TASKLINK.xml
index 4d1b838bff9f5a502d7a931c75f8117480ecf927..c1f96e8290b2e25f7911187cbf7a6164cf85e9bc 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/TASKLINK.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/TASKLINK.xml
@@ -1,6 +1,7 @@
 <?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="autogenerated" id="a7e29a35-f91f-4de3-a7f1-3fe9f1617a8c">
+  <changeSet author="autogenerated" id="47844e542e895e29b2d2683d58ea31f8">
+    <delete tableName="TASKLINK"/>
     <insert tableName="TASKLINK">
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/updateForDataCaching.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/TICKET.xml
similarity index 50%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/updateForDataCaching.xml
rename to .liquibase/Data_alias/basic/_demoData/generatedData/TICKET.xml
index bb64c2a29000803b05bccba19dde9457665c24c5..b220032a08add7dca1618202901547d1d8e33a26 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/updateForDataCaching.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/TICKET.xml
@@ -1,12 +1,12 @@
 <?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="j.goderbauer" id="6947b44d-0ef4-4fb6-a74d-f496d99b1e69">
-    <update tableName="ASYS_ALIASCONFIG">
-        <column name="XMLDATA" valueBlobFile="defaultBlob/_____configuration.xml"/>
-        <where>ID = ?</where>
-        <whereParams>
-                <param value="f4a33c35-5033-4699-b55a-9520b465b4c5" />
-        </whereParams>
-    </update>
-</changeSet>
-</databaseChangeLog>
+  <changeSet author="autogenerated" id="03ee5bbc92a920d91369f34172f357d2">
+    <delete tableName="TICKET"/>
+    <insert tableName="TICKET">
+      <column name="CODE" valueNumeric="0"/>
+      <column name="TASK_ID" value="998d95e6-3d3b-448b-a634-5516c0e392a5"/>
+      <column name="TICKETID" value="64f1135c-964c-473e-8596-4cd6c4e5bda8"/>
+      <column name="TICKETTYPE" value="SUPPORTTICKET                       "/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index 20071741803c2e51aa5c685e51cd78d2250301df..373e8973e00f47ed25f994e3af4d1eb4e49c1aa5 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -3,6 +3,7 @@
     <include relativeToChangelogFile="true" file="basic/init/init.xml"/>
     <include relativeToChangelogFile="true" file="basic/2019.1.4/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2019.2.1/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="basic/2019.3.0/changelog.xml"/>
     
     <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/addMailingAliases.xml b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/addMailingAliases.xml
deleted file mode 100644
index b33a7b7db8792223feb8ab090e83dd88f29d8e1e..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/addMailingAliases.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="autogenerated" id="667e73e0-cf8e-48c8-a75e-022689462cda">
-    <insert tableName="ASYS_ALIASCONFIG">
-      <column name="ALIASID" value="mailServerIMAP"/>
-      <column name="DATE_EDIT" valueDate="2019-06-25T01:14:32"/>
-      <column name="DATE_NEW" valueDate="2019-06-25T01:14:32"/>
-      <column name="ID" value="530a2f77-c1c3-4d93-b1fe-41ebe7410695"/>
-      <column name="KIND" valueNumeric="105"/>
-      <column name="NAME" value="mailServerIMAP_default"/>
-      <column name="SERVERID" value="default"/>
-      <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
-      <column name="USER_NEW" value="_____DESIGNERANONYM"/>
-      <column name="XMLDATA" valueBlobFile="defaultBlob/mailServerIMAP.xml"/>
-    </insert>
-    <insert tableName="ASYS_ALIASCONFIG">
-      <column name="ALIASID" value="defaultDbRepository"/>
-      <column name="DATE_EDIT" valueDate="2019-06-25T01:14:46"/>
-      <column name="DATE_NEW" valueDate="2019-06-25T01:14:35"/>
-      <column name="ID" value="b2ae3180-afd2-493c-a17b-16038e3a3860"/>
-      <column name="KIND" valueNumeric="105"/>
-      <column name="NAME" value="defaultDbRepository_default"/>
-      <column name="SERVERID" value="default"/>
-      <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
-      <column name="USER_NEW" value="_____DESIGNERANONYM"/>
-      <column name="XMLDATA" valueBlobFile="defaultBlob/defaultDbRepository.xml"/>
-    </insert>
-  </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/_____configuration.xml
deleted file mode 100644
index 7743c4ffe886349a98cd550f2b134862d15d082c..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/_____configuration.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.0">
-  <name>_____CONFIGURATION</name>
-  <serverId>default</serverId>
-  <definitionName>_____CONFIGURATION</definitionName>
-  <aliasConfigSub>
-    <aliasSubInstanceConfiguration>
-      <databaseAuditEnabled v="true" />
-      <indexsearchEnabled v="true" />
-      <loggingConsoleEnabled v="true" />
-      <loggingFileEnabled v="true" />
-      <loggingRemoteEnabled v="false" />
-      <mailGlobalEnabled v="true" />
-      <neonVaadinClientEnabled v="true" />
-      <neonDisableConnectionSecurity v="false" />
-      <neonUseDummyKeystore v="true" />
-      <securityConnectionSSLEnabled v="true" />
-      <securitySSLDisableCertificateCheck v="true" />
-      <telephonyEnabled v="true" />
-      <telephonyProvider></telephonyProvider>
-      <customProperties>
-        <customBooleanProperty>
-          <name>dataCaching.client.forceDisable</name>
-          <description>Enabling this option will disable the per-client-context data-cache within the customzing (for exameple the caching of Keywords). This is usefull if you're testing and want to frequently add data like keywords, etc. which are cached which help of the "DataCaching_lib".</description>
-          <property v="false" />
-        </customBooleanProperty>
-      </customProperties>
-    </aliasSubInstanceConfiguration>
-  </aliasConfigSub>
-</aliasConfig>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/changelog.xml
deleted file mode 100644
index b83ccbbf0d5007eec6f71e7428e9d28e25f0a2b8..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/changelog.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?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">
-    <include relativeToChangelogFile="true" file="notificationcenter/create_asys_notifications.xml"/>
-    <include relativeToChangelogFile="true" file="notificationcenter/create_asys_notificationcontents.xml"/>
-    <include relativeToChangelogFile="true" file="permission/create_asys_permission.xml"/>
-    <include relativeToChangelogFile="true" file="permission/create_asys_permissionset.xml"/>
-    <include relativeToChangelogFile="true" file="permission/create_asys_permissionaction.xml"/>
-    <include relativeToChangelogFile="true" file="aliasConfig/updateForDataCaching.xml"/>
-    <include relativeToChangelogFile="true" file="aliasConfig/addMailingAliases.xml"/>
-</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/notificationcenter/create_asys_notifications.xml b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/notificationcenter/create_asys_notifications.xml
deleted file mode 100644
index 5e629589c58057de4c189cc6f90a2580829bdc10..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/notificationcenter/create_asys_notifications.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="a.schindlbeck" id="98f057b6-0140-4edd-b08d-9cc7cf178bab">
-    <!---
-	its ok to drop the old ASYS_NOTIFICATIONS due to new version
-    -->
-    <dropTable tableName="ASYS_NOTIFICATIONS"/>
-    <createTable tableName="ASYS_NOTIFICATIONS">
-        <column name="ID" type="CHAR(36)">
-            <constraints primaryKey="true" primaryKeyName="PK_ASYS_NOTIFICATIONS_ID"/>
-        </column>
-        <column name="CONTENTID" type="CHAR(36)"/>
-        <column name="STATE" type="VARCHAR(15)"/>
-        <column name="USERID" type="VARCHAR(63)"/>
-        <column name="RESOLVEDPRIORITY" type="VARCHAR(15)"/>
-    </createTable>
-</changeSet>
-</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml
index 33f1e8060b54747b543bf9ba36b58ff17b409abb..530a16f329daea165aa6844714d15e573ac4bbf6 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml
@@ -5,13 +5,8 @@
     <include relativeToChangelogFile="true" file="example_asys_users/insert_asys_users-admin.xml"/>
 
     <include relativeToChangelogFile="true" file="example_asys_users/Birgit_Leicht.xml"/>
-    <include relativeToChangelogFile="true" file="example_asys_users/Birgit_Leicht_Image.xml"/>
     <include relativeToChangelogFile="true" file="example_asys_users/Harold_Smith.xml"/>
-    <include relativeToChangelogFile="true" file="example_asys_users/Harold_Smith_Image.xml"/>
     <include relativeToChangelogFile="true" file="example_asys_users/Herbert_Obermeier.xml"/>
-    <include relativeToChangelogFile="true" file="example_asys_users/Herbert_Obermeier_Image.xml"/>
     <include relativeToChangelogFile="true" file="example_asys_users/Lisa_Sommer.xml"/>
-    <include relativeToChangelogFile="true" file="example_asys_users/Lisa_Sommer_Image.xml"/>
     <include relativeToChangelogFile="true" file="example_asys_users/Susanne_Lustig.xml"/>
-    <include relativeToChangelogFile="true" file="example_asys_users/Susanne_Lustig_Image.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Birgit_Leicht_Image.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Birgit_Leicht_Image.xml
deleted file mode 100644
index 6dbe3e1633fe79c819f48d8377932f4a236bd787..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Birgit_Leicht_Image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="j.hoermanns" id="041114c2-6d34-40f9-9328-0a2ab5c94e4f">
-    <insert tableName="ASYS_BINARIES">
-        <column name="BINDATA" valueBlobFile="blob/Harold_Smith.png"/>
-        <column name="CONTAINERNAME" value="IMAGE"/>
-        <column name="DATASIZE" valueNumeric="41554"/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:43.5"/>
-        <column name="DATE_NEW" valueDate="2019-01-21T13:24:43.492"/>
-        <column name="DESCRIPTION" value="Image of the profile"/>
-        <column name="FILENAME" value="ProfileImage"/>
-        <column name="ID" value="ca8d0195-db3f-4b04-98be-9c46e060e67b"/>
-        <column name="MIMETYPE" value="image/png"/>
-        <column name="ROW_ID" value="73d72f18-e7f5-11e8-9f32-f2801f1b9fd1"/>
-        <column name="TABLENAME" value="PERSON"/>
-        <column name="USER_EDIT" value="Admin"/>
-        <column name="USER_NEW" value="Admin"/>
-        <column name="PREVIEW" valueBlobFile="blob/Birgit_Leicht_preview.jpeg"/>
-    </insert>
-    <rollback>
-        <delete tableName="ASYS_BINARIES">
-            <where>ID = ?</where>
-            <whereParams>
-                    <param value="ca8d0195-db3f-4b04-98be-9c46e060e67b" />
-            </whereParams>
-        </delete>
-    </rollback>
-</changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Harold_Smith_Image.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Harold_Smith_Image.xml
deleted file mode 100644
index a2aa0f01844881a37a6bf6cc9fca6a0327f9c5e0..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Harold_Smith_Image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="j.hoermanns" id="a5d3a4ff-c9c5-4fe4-86f9-c0d7015aa635">
-    <insert tableName="ASYS_BINARIES">
-        <column name="BINDATA" valueBlobFile="blob/Harold_Smith.png"/>
-        <column name="CONTAINERNAME" value="IMAGE"/>
-        <column name="DATASIZE" valueNumeric="41554"/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:43.5"/>
-        <column name="DATE_NEW" valueDate="2019-01-21T13:24:43.492"/>
-        <column name="DESCRIPTION" value="Image of the profile"/>
-        <column name="FILENAME" value="ProfileImage"/>
-        <column name="ID" value="62030aa4-908b-48c7-abc5-6074a3a2e611"/>
-        <column name="MIMETYPE" value="image/png"/>
-        <column name="ROW_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
-        <column name="TABLENAME" value="PERSON"/>
-        <column name="USER_EDIT" value="Admin"/>
-        <column name="USER_NEW" value="Admin"/>
-        <column name="PREVIEW" valueBlobFile="blob/Harold_Smith_preview.jpeg"/>
-    </insert>
-    <rollback>
-        <delete tableName="ASYS_BINARIES">
-            <where>ID = ?</where>
-            <whereParams>
-                    <param value="62030aa4-908b-48c7-abc5-6074a3a2e611" />
-            </whereParams>
-        </delete>
-    </rollback>
-</changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Herbert_Obermeier_Image.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Herbert_Obermeier_Image.xml
deleted file mode 100644
index a73d213fccb0c2bdbbcdcf228bc26936cc0365e1..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Herbert_Obermeier_Image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="j.hoermanns" id="3bfdce7e-35e1-465a-a4fc-42647c16ec42">
-    <insert tableName="ASYS_BINARIES">
-        <column name="BINDATA" valueBlobFile="blob/Herbert_Obermeier.png"/>
-        <column name="CONTAINERNAME" value="IMAGE"/>
-        <column name="DATASIZE" valueNumeric="41554"/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:43.5"/>
-        <column name="DATE_NEW" valueDate="2019-01-21T13:24:43.492"/>
-        <column name="DESCRIPTION" value="Image of the profile"/>
-        <column name="FILENAME" value="ProfileImage"/>
-        <column name="ID" value="ca0db8c3-e51a-45da-8fe4-7c727396d52e"/>
-        <column name="MIMETYPE" value="image/png"/>
-        <column name="ROW_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
-        <column name="TABLENAME" value="PERSON"/>
-        <column name="USER_EDIT" value="Admin"/>
-        <column name="USER_NEW" value="Admin"/>
-        <column name="PREVIEW" valueBlobFile="blob/Herbert_Obermeier_preview.jpeg"/>
-    </insert>
-    <rollback>
-        <delete tableName="ASYS_BINARIES">
-            <where>ID = ?</where>
-            <whereParams>
-                    <param value="ca0db8c3-e51a-45da-8fe4-7c727396d52e" />
-            </whereParams>
-        </delete>
-    </rollback>
-</changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Lisa_Sommer_Image.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Lisa_Sommer_Image.xml
deleted file mode 100644
index 6bea9a50229f6be484f5935cb212ca3be0694f43..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Lisa_Sommer_Image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="j.hoermanns" id="e537c57d-87bb-4a52-ba8c-7f0a00ee469d">
-    <insert tableName="ASYS_BINARIES">
-        <column name="BINDATA" valueBlobFile="blob/Lisa_Sommer.png"/>
-        <column name="CONTAINERNAME" value="IMAGE"/>
-        <column name="DATASIZE" valueNumeric="41554"/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:43.5"/>
-        <column name="DATE_NEW" valueDate="2019-01-21T13:24:43.492"/>
-        <column name="DESCRIPTION" value="Image of the profile"/>
-        <column name="FILENAME" value="ProfileImage"/>
-        <column name="ID" value="dfb81242-520b-4bd6-95f0-84882f4e61ae"/>
-        <column name="MIMETYPE" value="image/png"/>
-        <column name="ROW_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
-        <column name="TABLENAME" value="PERSON"/>
-        <column name="USER_EDIT" value="Admin"/>
-        <column name="USER_NEW" value="Admin"/>
-        <column name="PREVIEW" valueBlobFile="blob/Lisa_Sommer_preview.jpeg"/>
-    </insert>
-    <rollback>
-        <delete tableName="ASYS_BINARIES">
-            <where>ID = ?</where>
-            <whereParams>
-                    <param value="dfb81242-520b-4bd6-95f0-84882f4e61ae" />
-            </whereParams>
-        </delete>
-    </rollback>
-</changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Susanne_Lustig_Image.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Susanne_Lustig_Image.xml
deleted file mode 100644
index c4e30a29a2c83d170e953f12bf23a0007576e364..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/Susanne_Lustig_Image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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="j.hoermanns" id="9aa306ad-8222-4e2b-9635-510ed337b4d2">
-    <insert tableName="ASYS_BINARIES">
-        <column name="BINDATA" valueBlobFile="blob/Susanne_Lustig.png"/>
-        <column name="CONTAINERNAME" value="IMAGE"/>
-        <column name="DATASIZE" valueNumeric="41554"/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:43.5"/>
-        <column name="DATE_NEW" valueDate="2019-01-21T13:24:43.492"/>
-        <column name="DESCRIPTION" value="Image of the profile"/>
-        <column name="FILENAME" value="ProfileImage"/>
-        <column name="ID" value="0c9e1a2e-220c-4574-9d04-870b8ee22000"/>
-        <column name="MIMETYPE" value="image/png"/>
-        <column name="ROW_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
-        <column name="TABLENAME" value="PERSON"/>
-        <column name="USER_EDIT" value="Admin"/>
-        <column name="USER_NEW" value="Admin"/>
-        <column name="PREVIEW" valueBlobFile="blob/Susanne_Lustig_preview.jpeg"/>
-    </insert>
-    <rollback>
-        <delete tableName="ASYS_BINARIES">
-            <where>ID = ?</where>
-            <whereParams>
-                    <param value="0c9e1a2e-220c-4574-9d04-870b8ee22000" />
-            </whereParams>
-        </delete>
-    </rollback>
-</changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Birgit_Leicht.png b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Birgit_Leicht.png
deleted file mode 100644
index d20eae7a8edcfc31f7f645547eda219315554351..0000000000000000000000000000000000000000
Binary files a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Birgit_Leicht.png and /dev/null differ
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES.xml
index 6684d9b49d104558d1f885116d800fb9de98c632..2e4219a15cde34e59d67b77bc76775387f00387a 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES.xml
@@ -1,8 +1,24 @@
 <?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="autogenerated" id="bda8742c-d15c-4403-a330-e71a9989744e">
+  <changeSet author="autogenerated" id="2d3a03dd-d51a-4892-b470-395b6ab00e4c">
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/a80a1a73-df16-4bb0-8d73-5e734b3c6883"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/1731bac7e1c916c5cad389d73c258004"/>
+      <column name="CONTAINERNAME" value="DOCUMENT"/>
+      <column name="DATASIZE" valueNumeric="254"/>
+      <column name="DATE_EDIT" valueDate="2019-05-24T10:58:17"/>
+      <column name="DATE_NEW" valueDate="2019-05-24T10:58:17"/>
+      <column name="FILENAME" value="Erstkontakt .html"/>
+      <column name="ID" value="30448337-aa66-4bfc-83a5-bfad9b0ed198"/>
+      <column name="MIMETYPE" value="text/plain"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/9270080cb3dee13295dba011a77cffaa"/>
+      <column name="ROW_ID" value="f032c593-f108-47dd-9fc2-357c14757a9d"/>
+      <column name="TABLENAME" value="DOCUMENTTEMPLATE"/>
+      <column name="KEYWORD" value="TEMPLATE"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/4f8d2fbe1fa680acfddecbf6a2d7eb1b"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="2820"/>
       <column name="DATE_EDIT" valueDate="2019-03-21T09:23:21"/>
@@ -10,14 +26,14 @@
       <column name="FILENAME" value="20181002_Dokumentenmanagement.txt"/>
       <column name="ID" value="d16ec3bc-07a1-4343-b0ee-439f5b418831"/>
       <column name="MIMETYPE" value="text/plain"/>
-      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/6a1e497a-9114-4e48-b0e4-110cefa6139b"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/17f1c477322bb191430e50a1d9de6e20"/>
       <column name="ROW_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
       <column name="TABLENAME" value="CONTACT"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/31855f76-01eb-435e-8bc7-869a9f53c139"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/f942a0dfecf75f3ef29e4cd6db41bc7b"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="46592"/>
       <column name="DATE_EDIT" valueDate="2019-05-17T12:52:06"/>
@@ -31,7 +47,7 @@
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/86ddbfd7-637f-478a-8184-033185da1331"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/33a4966b814800097ed23edc98e72bdf"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="1054110"/>
       <column name="DATE_EDIT" valueDate="2019-05-23T11:26:01"/>
@@ -39,14 +55,14 @@
       <column name="FILENAME" value="AID017-DE - ADITO Technikbroschüre.pdf"/>
       <column name="ID" value="48f0f57c-c60a-4714-83bb-3a31c999f766"/>
       <column name="MIMETYPE" value="application/pdf"/>
-      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/e5f89c96-1ce0-4b54-8e0b-2a257a99093c"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/0f49a3883a4b1a63c95e253c3a6f5b49"/>
       <column name="ROW_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="TABLENAME" value="CONTACT"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/75c54821-3c93-40e9-b73d-1a39b6782e61"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/4f28ca232405b199c36a2a322c604840"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="6203"/>
       <column name="DATE_EDIT" valueDate="2019-05-23T01:16:23"/>
@@ -61,22 +77,7 @@
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/f1cd8300-4aa9-48a2-93e6-898046f1ac75"/>
-      <column name="CONTAINERNAME" value="DOCUMENT"/>
-      <column name="DATASIZE" valueNumeric="254"/>
-      <column name="DATE_EDIT" valueDate="2019-05-24T10:58:17"/>
-      <column name="DATE_NEW" valueDate="2019-05-24T10:58:17"/>
-      <column name="FILENAME" value="Erstkontakt .html"/>
-      <column name="ID" value="30448337-aa66-4bfc-83a5-bfad9b0ed198"/>
-      <column name="MIMETYPE" value="text/plain"/>
-      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/91867bc1-8df9-4f6e-81d3-259511841015"/>
-      <column name="ROW_ID" value="f032c593-f108-47dd-9fc2-357c14757a9d"/>
-      <column name="TABLENAME" value="DOCUMENTTEMPLATE"/>
-      <column name="USER_EDIT" value="Admin"/>
-      <column name="USER_NEW" value="Admin"/>
-    </insert>
-    <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/38778ead-4ad6-429c-a876-998e03fdd6a1"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5413f77e981a3653876b1c707671f8fa"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="158024"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T06:48:05"/>
@@ -86,11 +87,12 @@
       <column name="MIMETYPE" value="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
       <column name="ROW_ID" value="1269c31d-4173-434f-b2db-9154fa651a25"/>
       <column name="TABLENAME" value="DOCUMENTTEMPLATE"/>
+      <column name="KEYWORD" value="TEMPLATE"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/086771b1-75d0-4bfb-81e1-56ff0cc92413"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5413f77e981a3653876b1c707671f8fa"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="158024"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T04:31:55"/>
@@ -104,7 +106,7 @@
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/230573fe-d93a-4b7b-9fff-922b66a3d595"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/19404e8c6e0d7620a4fc2d0d2f5c8dbc"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="162284"/>
       <column name="DATE_EDIT" valueDate="2019-05-29T06:31:39"/>
@@ -118,7 +120,7 @@
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/4ccf87bc-6ff0-4eaf-b52a-a8ca24e9a3b9"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/19404e8c6e0d7620a4fc2d0d2f5c8dbc"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="162284"/>
       <column name="DATE_EDIT" valueDate="2019-05-29T06:42:47"/>
@@ -132,7 +134,7 @@
       <column name="USER_NEW" value="Admin"/>
     </insert>
     <insert tableName="ASYS_BINARIES">
-      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/2d624bdc-4d7e-4110-9f1c-34b6439c6610"/>
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5413f77e981a3653876b1c707671f8fa"/>
       <column name="CONTAINERNAME" value="DOCUMENT"/>
       <column name="DATASIZE" valueNumeric="158024"/>
       <column name="DATE_EDIT" valueDate="2019-06-11T04:36:47"/>
@@ -145,5 +147,85 @@
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
     </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5f2406211e3a21439aed5714ab3db571"/>
+      <column name="CONTAINERNAME" value="IMAGE"/>
+      <column name="DATASIZE" valueNumeric="41554"/>
+      <column name="DATE_EDIT" valueDate="2019-01-21T01:24:43"/>
+      <column name="DATE_NEW" valueDate="2019-01-21T01:24:43"/>
+      <column name="DESCRIPTION" value="Image of the profile"/>
+      <column name="FILENAME" value="ProfileImage"/>
+      <column name="ID" value="ca8d0195-db3f-4b04-98be-9c46e060e67b"/>
+      <column name="MIMETYPE" value="image/png"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/1bafbc350fd7bb88105555e14ef98d93"/>
+      <column name="ROW_ID" value="73d72f18-e7f5-11e8-9f32-f2801f1b9fd1"/>
+      <column name="TABLENAME" value="PERSON"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5f2406211e3a21439aed5714ab3db571"/>
+      <column name="CONTAINERNAME" value="IMAGE"/>
+      <column name="DATASIZE" valueNumeric="41554"/>
+      <column name="DATE_EDIT" valueDate="2019-01-21T01:24:43"/>
+      <column name="DATE_NEW" valueDate="2019-01-21T01:24:43"/>
+      <column name="DESCRIPTION" value="Image of the profile"/>
+      <column name="FILENAME" value="ProfileImage"/>
+      <column name="ID" value="62030aa4-908b-48c7-abc5-6074a3a2e611"/>
+      <column name="MIMETYPE" value="image/png"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/5acb881f3923c6cddb89c89e9e42a937"/>
+      <column name="ROW_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="TABLENAME" value="PERSON"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/9386121ffea926a30b9fa54870968dd1"/>
+      <column name="CONTAINERNAME" value="IMAGE"/>
+      <column name="DATASIZE" valueNumeric="41554"/>
+      <column name="DATE_EDIT" valueDate="2019-01-21T01:24:43"/>
+      <column name="DATE_NEW" valueDate="2019-01-21T01:24:43"/>
+      <column name="DESCRIPTION" value="Image of the profile"/>
+      <column name="FILENAME" value="ProfileImage"/>
+      <column name="ID" value="ca0db8c3-e51a-45da-8fe4-7c727396d52e"/>
+      <column name="MIMETYPE" value="image/png"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/4d2fdaebe7a657843273c9714729df48"/>
+      <column name="ROW_ID" value="57d524f6-ad66-4550-be83-fee6e31b7a52"/>
+      <column name="TABLENAME" value="PERSON"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/58d526fe1ec32f07facc7c52e04619b3"/>
+      <column name="CONTAINERNAME" value="IMAGE"/>
+      <column name="DATASIZE" valueNumeric="41554"/>
+      <column name="DATE_EDIT" valueDate="2019-01-21T01:24:43"/>
+      <column name="DATE_NEW" valueDate="2019-01-21T01:24:43"/>
+      <column name="DESCRIPTION" value="Image of the profile"/>
+      <column name="FILENAME" value="ProfileImage"/>
+      <column name="ID" value="dfb81242-520b-4bd6-95f0-84882f4e61ae"/>
+      <column name="MIMETYPE" value="image/png"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/41b5b566200a8bf6784cc5c6ea8931d6"/>
+      <column name="ROW_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="TABLENAME" value="PERSON"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
+    <insert tableName="ASYS_BINARIES">
+      <column name="BINDATA" valueBlobFile="ASYS_BINARIES/BINDATA/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0"/>
+      <column name="CONTAINERNAME" value="IMAGE"/>
+      <column name="DATASIZE" valueNumeric="41554"/>
+      <column name="DATE_EDIT" valueDate="2019-01-21T01:24:43"/>
+      <column name="DATE_NEW" valueDate="2019-01-21T01:24:43"/>
+      <column name="DESCRIPTION" value="Image of the profile"/>
+      <column name="FILENAME" value="ProfileImage"/>
+      <column name="ID" value="0c9e1a2e-220c-4574-9d04-870b8ee22000"/>
+      <column name="MIMETYPE" value="image/png"/>
+      <column name="PREVIEW" valueBlobFile="ASYS_BINARIES/PREVIEW/blobFiles/d53815eeeac3c3fa5d5c4d60ee9a6954"/>
+      <column name="ROW_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
+      <column name="TABLENAME" value="PERSON"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="USER_NEW" value="Admin"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/f1cd8300-4aa9-48a2-93e6-898046f1ac75 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/1731bac7e1c916c5cad389d73c258004
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/f1cd8300-4aa9-48a2-93e6-898046f1ac75
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/1731bac7e1c916c5cad389d73c258004
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/230573fe-d93a-4b7b-9fff-922b66a3d595 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/19404e8c6e0d7620a4fc2d0d2f5c8dbc
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/230573fe-d93a-4b7b-9fff-922b66a3d595
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/19404e8c6e0d7620a4fc2d0d2f5c8dbc
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/2d624bdc-4d7e-4110-9f1c-34b6439c6610 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/2d624bdc-4d7e-4110-9f1c-34b6439c6610
deleted file mode 100644
index c8cf80dec1a0829ac6bf0658ccbacac0b5604412..0000000000000000000000000000000000000000
Binary files a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/2d624bdc-4d7e-4110-9f1c-34b6439c6610 and /dev/null differ
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/86ddbfd7-637f-478a-8184-033185da1331 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/33a4966b814800097ed23edc98e72bdf
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/86ddbfd7-637f-478a-8184-033185da1331
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/33a4966b814800097ed23edc98e72bdf
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/38778ead-4ad6-429c-a876-998e03fdd6a1 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/38778ead-4ad6-429c-a876-998e03fdd6a1
deleted file mode 100644
index c8cf80dec1a0829ac6bf0658ccbacac0b5604412..0000000000000000000000000000000000000000
Binary files a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/38778ead-4ad6-429c-a876-998e03fdd6a1 and /dev/null differ
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4ccf87bc-6ff0-4eaf-b52a-a8ca24e9a3b9 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4ccf87bc-6ff0-4eaf-b52a-a8ca24e9a3b9
deleted file mode 100644
index 4069a6bf705a8aea01729407fad2523a2efa4106..0000000000000000000000000000000000000000
Binary files a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4ccf87bc-6ff0-4eaf-b52a-a8ca24e9a3b9 and /dev/null differ
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/75c54821-3c93-40e9-b73d-1a39b6782e61 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4f28ca232405b199c36a2a322c604840
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/75c54821-3c93-40e9-b73d-1a39b6782e61
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4f28ca232405b199c36a2a322c604840
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/a80a1a73-df16-4bb0-8d73-5e734b3c6883 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4f8d2fbe1fa680acfddecbf6a2d7eb1b
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/a80a1a73-df16-4bb0-8d73-5e734b3c6883
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/4f8d2fbe1fa680acfddecbf6a2d7eb1b
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/086771b1-75d0-4bfb-81e1-56ff0cc92413 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5413f77e981a3653876b1c707671f8fa
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/086771b1-75d0-4bfb-81e1-56ff0cc92413
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5413f77e981a3653876b1c707671f8fa
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Lisa_Sommer.png b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/58d526fe1ec32f07facc7c52e04619b3
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Lisa_Sommer.png
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/58d526fe1ec32f07facc7c52e04619b3
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Susanne_Lustig.png b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Susanne_Lustig.png
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5dbfcfef4e102c68982c8dccc390f3e0
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Harold_Smith.png b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5f2406211e3a21439aed5714ab3db571
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Harold_Smith.png
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/5f2406211e3a21439aed5714ab3db571
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Herbert_Obermeier.png b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/9386121ffea926a30b9fa54870968dd1
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Herbert_Obermeier.png
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/9386121ffea926a30b9fa54870968dd1
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/31855f76-01eb-435e-8bc7-869a9f53c139 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/f942a0dfecf75f3ef29e4cd6db41bc7b
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/31855f76-01eb-435e-8bc7-869a9f53c139
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/f942a0dfecf75f3ef29e4cd6db41bc7b
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/e5f89c96-1ce0-4b54-8e0b-2a257a99093c b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/0f49a3883a4b1a63c95e253c3a6f5b49
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/e5f89c96-1ce0-4b54-8e0b-2a257a99093c
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/0f49a3883a4b1a63c95e253c3a6f5b49
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/6a1e497a-9114-4e48-b0e4-110cefa6139b b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/17f1c477322bb191430e50a1d9de6e20
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/6a1e497a-9114-4e48-b0e4-110cefa6139b
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/17f1c477322bb191430e50a1d9de6e20
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Birgit_Leicht_preview.jpeg b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/1bafbc350fd7bb88105555e14ef98d93
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Birgit_Leicht_preview.jpeg
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/1bafbc350fd7bb88105555e14ef98d93
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Lisa_Sommer_preview.jpeg b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/41b5b566200a8bf6784cc5c6ea8931d6
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Lisa_Sommer_preview.jpeg
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/41b5b566200a8bf6784cc5c6ea8931d6
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Herbert_Obermeier_preview.jpeg b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/4d2fdaebe7a657843273c9714729df48
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Herbert_Obermeier_preview.jpeg
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/4d2fdaebe7a657843273c9714729df48
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Harold_Smith_preview.jpeg b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/5acb881f3923c6cddb89c89e9e42a937
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Harold_Smith_preview.jpeg
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/5acb881f3923c6cddb89c89e9e42a937
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/91867bc1-8df9-4f6e-81d3-259511841015 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/9270080cb3dee13295dba011a77cffaa
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/91867bc1-8df9-4f6e-81d3-259511841015
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/9270080cb3dee13295dba011a77cffaa
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Susanne_Lustig_preview.jpeg b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/d53815eeeac3c3fa5d5c4d60ee9a6954
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/blob/Susanne_Lustig_preview.jpeg
rename to .liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/PREVIEW/blobFiles/d53815eeeac3c3fa5d5c4d60ee9a6954
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml
index a57bd0f04271547aaf28e4f103e6a625bd2d8804..ff6162159e8c884b236bc8476aa4737e42c20c73 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.0">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
   <name>_____CONFIGURATION</name>
   <serverId>default</serverId>
   <definitionName>_____CONFIGURATION</definitionName>
@@ -10,13 +10,22 @@
       <loggingConsoleEnabled v="true" />
       <loggingFileEnabled v="true" />
       <loggingRemoteEnabled v="false" />
+      <mailGlobalEnabled v="true" />
       <neonVaadinClientEnabled v="true" />
       <neonDisableConnectionSecurity v="false" />
+      <neonUseSelfSignedCertificate v="true" />
       <neonUseDummyKeystore v="true" />
       <securityConnectionSSLEnabled v="true" />
       <securitySSLDisableCertificateCheck v="true" />
       <telephonyEnabled v="true" />
-      <telephonyProvider>Asterisk;Server=sip.adito.de</telephonyProvider>
+      <telephonyProvider></telephonyProvider>
+      <customProperties>
+        <customBooleanProperty>
+          <name>dataCaching.client.forceDisable</name>
+          <description>Enabling this option will disable the per-client-context data-cache within the customzing (for exameple the caching of Keywords). This is usefull if you're testing and want to frequently add data like keywords, etc. which are cached which help of the "DataCaching_lib".</description>
+          <property v="false" />
+        </customBooleanProperty>
+      </customProperties>
     </aliasSubInstanceConfiguration>
   </aliasConfigSub>
 </aliasConfig>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____system_sysdb_version.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____system_sysdb_version.xml
index ff598ae4e91c965763db722428b044ad9cfef8ad..02dd5dea94ca77244e90cd37ee47dd4886ad7303 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____system_sysdb_version.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____system_sysdb_version.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <sysDbVersion 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/sysDbVersion/1.2.0">
   <name>_____SYSTEM_SYSDB_VERSION</name>
-  <systemDbVersion>2.7.0</systemDbVersion>
+  <systemDbVersion>2.7.2</systemDbVersion>
 </sysDbVersion>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml
index e6eb125c832854bf0e6dd3e0c5f88d2ee198db51..1eb782d8f9d3e3424e8e9bf8afa9d26174c49b96 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.0">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
   <name>f50ee138-12d9-420d-a4f9-9b8257e207e4</name>
   <description>jdbc:derby://localhost:1527/basic_data</description>
   <serverId>default</serverId>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/defaultDbRepository.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml
similarity index 84%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/defaultDbRepository.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml
index d9ec835231a0d7562fb1129db111ad69d3e66a8f..52ece967854e69d918544eb401747fbbaeca8784 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/defaultDbRepository.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<aliasConfig 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/aliasConfig/1.1.1">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
   <name>defaultDbRepository_default</name>
   <serverId>default</serverId>
   <definitionName>defaultDbRepository</definitionName>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/mailServerIMAP.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml
similarity index 61%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/mailServerIMAP.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml
index bdab62bfe255b1403ed7330e7c1d86eb30421a65..783efb1f106e3917e36a2424e80e45a18a8b5da9 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/aliasConfig/defaultBlob/mailServerIMAP.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml
@@ -1,9 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<aliasConfig 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/aliasConfig/1.1.1">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
   <name>mailServerIMAP_default</name>
   <serverId>default</serverId>
   <definitionName>mailServerIMAP</definitionName>
   <aliasConfigSub>
-    <aliasSubMailserverImap />
+    <aliasSubMailserverImap>
+      <host>localhost</host>
+      <smtpHost>localhost</smtpHost>
+    </aliasSubMailserverImap>
   </aliasConfigSub>
 </aliasConfig>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
index f5c254801ab227750e1458f46823634720299ae4..d2a594927532b438e24ac4e98074ca1322a68617 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml
@@ -27,6 +27,31 @@
         <column name="XMLDATA" valueBlobFile="defaultBlob/data_alias.xml"/>
     </insert>
 
+    <insert tableName="ASYS_ALIASCONFIG">
+      <column name="ALIASID" value="mailServerIMAP"/>
+      <column name="DATE_EDIT" valueDate="2019-06-25T01:14:32"/>
+      <column name="DATE_NEW" valueDate="2019-06-25T01:14:32"/>
+      <column name="ID" value="530a2f77-c1c3-4d93-b1fe-41ebe7410695"/>
+      <column name="KIND" valueNumeric="105"/>
+      <column name="NAME" value="mailServerIMAP_default"/>
+      <column name="SERVERID" value="default"/>
+      <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
+      <column name="USER_NEW" value="_____DESIGNERANONYM"/>
+      <column name="XMLDATA" valueBlobFile="defaultBlob/mailServerIMAP.xml"/>
+    </insert>
+    <insert tableName="ASYS_ALIASCONFIG">
+      <column name="ALIASID" value="defaultDbRepository"/>
+      <column name="DATE_EDIT" valueDate="2019-06-25T01:14:46"/>
+      <column name="DATE_NEW" valueDate="2019-06-25T01:14:35"/>
+      <column name="ID" value="b2ae3180-afd2-493c-a17b-16038e3a3860"/>
+      <column name="KIND" valueNumeric="105"/>
+      <column name="NAME" value="defaultDbRepository_default"/>
+      <column name="SERVERID" value="default"/>
+      <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
+      <column name="USER_NEW" value="_____DESIGNERANONYM"/>
+      <column name="XMLDATA" valueBlobFile="defaultBlob/defaultDbRepository.xml"/>
+    </insert>
+
     <rollback>
         <delete tableName="ASYS_ALIASCONFIG">
             <where>ID = ?</where>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
index ae1ca17581144adecfa0ba8a2043589a187d6063..b4a2c1bf0a3eb90a4a35c08451c64deae2bcc337 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
@@ -7,7 +7,7 @@
         <column name="DATE_NEW" valueDate="2018-05-24T14:53:57.763"/>
         <column name="KIND" valueNumeric="600"/>
         <column name="NAME" value="_____SYSTEM_SYSDB_VERSION"/>
-        <column name="TITLE" value="2.7.0"/>
+        <column name="TITLE" value="2.7.2"/>
         <column name="USER_EDIT" value="_____DESIGNERANONYM"/>
         <column name="USER_NEW" value="_____DESIGNERANONYM"/>
         <column name="XMLDATA" valueBlobFile="defaultBlob/_____system_sysdb_version.xml"/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml
index 8aa7a41d3b54fff390db711f0996ea18583dd724..4db7e29da171dccce7a034a87f3e1bad9c9c6ff3 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml
@@ -7,12 +7,16 @@
     <include relativeToChangelogFile="true" file="struct/create_asys_notifications.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_sequences.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_system.xml"/>
-    <include relativeToChangelogFile="true" file="struct/create_asys_timer.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_timers.xml"/>
+    <include relativeToChangelogFile="true" file="struct/create_asys_timers_serverruns.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_users.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_calendarbackend.xml"/>
     <include relativeToChangelogFile="true" file="struct/create_asys_calendarlink.xml"/>
-    
+    <include relativeToChangelogFile="true" file="struct/create_asys_notifications.xml"/>
+    <include relativeToChangelogFile="true" file="struct/create_asys_notificationcontents.xml"/>
+    <include relativeToChangelogFile="true" file="struct/create_asys_permission.xml"/>
+    <include relativeToChangelogFile="true" file="struct/create_asys_permissionset.xml"/>
+    <include relativeToChangelogFile="true" file="struct/create_asys_permissionaction.xml"/>    
     <include relativeToChangelogFile="true" file="data/insert_asys_aliasconfig.xml"/>
     <include relativeToChangelogFile="true" file="data/insert_asys_system.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/notificationcenter/create_asys_notificationcontents.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/notificationcenter/create_asys_notificationcontents.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
index bd57a5ed46701167d402287e06ab56571e0a213c..0175584524b3645f90e5898a4b27b1369ec87035 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
@@ -1,25 +1,14 @@
 <?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="j.hoermann" id="98f057b6-0140-4edd-b08d-9cc7cf178bab">
+<changeSet author="a.schindlbeck" id="98f057b6-0140-4edd-b08d-9cc7cf178bab">
     <createTable tableName="ASYS_NOTIFICATIONS">
         <column name="ID" type="CHAR(36)">
             <constraints primaryKey="true" primaryKeyName="PK_ASYS_NOTIFICATIONS_ID"/>
         </column>
-        <column name="BACKPACK" type="CLOB"/>
-        <column name="CAPTION" type="VARCHAR(512)"/>
-        <column name="CONTENTID" type="VARCHAR(512)"/>
-        <column name="CREATIONDATE" type="BIGINT"/>
-        <column name="DESCRIPTION" type="VARCHAR(1023)"/>
-        <column name="FORCEDPRIORITY" type="INTEGER"/>
-        <column name="ICON_INFO" type="VARCHAR(1023)"/>
-        <column name="LIFETIME" type="BIGINT"/>
-        <column name="LINK_INFO" type="VARCHAR(1023)"/>
-        <column name="ORIGINATORNAME" type="VARCHAR(63)"/>
-        <column name="RECIPIENTUSERIDS" type="CLOB"/>
-        <column name="STATE" type="VARCHAR(16)"/>
-        <column name="TYPECODE" type="VARCHAR(63)"/>
+        <column name="CONTENTID" type="CHAR(36)"/>
+        <column name="STATE" type="VARCHAR(15)"/>
         <column name="USERID" type="VARCHAR(63)"/>
-        <column name="VERSION" type="INTEGER"/>
+        <column name="RESOLVEDPRIORITY" type="VARCHAR(15)"/>
     </createTable>
 </changeSet>
-</databaseChangeLog>
\ No newline at end of file
+</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permission.xml
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permission.xml
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permissionaction.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permissionaction.xml
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permissionaction.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permissionaction.xml
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permissionset.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permissionset.xml
similarity index 100%
rename from .liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permissionset.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_permissionset.xml
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers.xml
index fce66d6999d9860c1d112ef57f23803969155177..f09fdfb3185d0e64479373048402a51b628866ad 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers.xml
@@ -5,13 +5,18 @@
         <column name="TIMERID" type="VARCHAR(127)">
             <constraints primaryKey="true" primaryKeyName="PK_ASYS_TIMERS_TIMERID"/>
         </column>
-        <column name="LASTRUN" type="DATETIME"/>
-        <column name="STARTTIME" type="DATETIME"/>
-        <column name="INTERVALVALUE" type="INTEGER"/>
+        
+        <column name="ACTIVE" type="VARCHAR(5)"/>
+        <column name="INTERVALDESCRIPTION" type="VARCHAR(255)"/>
         <column name="INTERVALUNIT" type="INTEGER"/>
+        <column name="INTERVALVALUE" type="INTEGER"/>
+        <column name="KEEPJDITO" type="VARCHAR(5)"/>
+        <column name="LASTRUN" type="DATETIME"/>
         <column name="PROCESSNAME" type="VARCHAR(255)"/>
-        <column name="INTERVALDESCRIPTION" type="VARCHAR(255)"/>
-        <column name="ACTIVE" type="VARCHAR(5)"/>
+        <column name="PROCESSUSER" type="VARCHAR(255)"/>
+        <column name="STARTTIME" type="DATETIME"/>
+        <column name="THREADPRIORITY" type="INTEGER"/>
+        <column name="TIMERTYPE" type="INTEGER"/>
     </createTable>
 </changeSet>
-</databaseChangeLog>
\ No newline at end of file
+</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timer.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
similarity index 54%
rename from .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timer.xml
rename to .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
index 2c4d9ea3b578303f5052013ac1b770685c277791..5c5a397fcd634356f2a2440c0d6fa69d2b4a1c74 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timer.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
@@ -1,11 +1,18 @@
 <?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="j.hoermann" id="40a4a615-10b2-4736-95af-496e51a667c1">
-    <createTable tableName="ASYS_TIMER">
-        <column name="TIMERID" type="CHAR(63)">
-            <constraints primaryKey="true" primaryKeyName="PK_ASYS_SYSTEM_TIMERID"/>
+<changeSet author="m.sieber" id="">
+    <createTable tableName="ASYS_TIMERS_SERVERRUNS">
+        <column name="SERVERID" type="VARCHAR(127)">
+            <constraints nullable="false"/>
         </column>
+        <column name="TIMERID" type="VARCHAR(127)">
+            <constraints nullable="false"/>
+        </column>
+        
         <column name="LASTRUN" type="DATETIME"/>
     </createTable>
+    <addPrimaryKey tableName="ASYS_TIMERS_SERVERRUNS"
+                   columnNames="SERVERID, TIMERID"
+                   constraintName="PK_ASYS_TIMERS_SERVERRUNS_SERVERID_TIMERID"/>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/changelog.xml b/.liquibase/_____SYSTEMALIAS/changelog.xml
index f2886409da8d3d821dc7a3503d9d1b5324ceb206..6d6c244604e5ac24f9eb9e96d2e9a82c37f71364 100644
--- a/.liquibase/_____SYSTEMALIAS/changelog.xml
+++ b/.liquibase/_____SYSTEMALIAS/changelog.xml
@@ -1,7 +1,6 @@
 <?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">
     <include relativeToChangelogFile="true" file="basic/init/init.xml"/>
-    <include relativeToChangelogFile="true" file="basic/2019.1.4/changelog.xml"/>
 
     <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>
 </databaseChangeLog>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index eeb2605d1138f46d6046a6ed127b88ac0c1da972..cfca8092dc5eebed3221902d2475e37432bfbbb5 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -3575,7 +3575,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="30" />
+                <size v="150" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -4341,6 +4341,20 @@
                 <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>NOTICE</name>
                 <dbName></dbName>
@@ -4383,20 +4397,6 @@
                 <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>
@@ -8146,6 +8146,20 @@
                 <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>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -9784,6 +9798,20 @@
                 <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>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -9874,6 +9902,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>PROBLEM</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>
diff --git a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
index e796fca2499b709a0d03fe7099b824ae4251ac93..19853f665b6e413f8e8bcf01b4708af59b98ef58 100644
--- a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
+++ b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
@@ -3198,7 +3198,7 @@
           <entityDb>
             <name>ASYS_PERMISSION</name>
             <dbName></dbName>
-            <idColumn>PERMISSIONID</idColumn>
+            <idColumn>ASYS_PERMISSIONID</idColumn>
             <idGeneratorType v="0" />
             <idGeneratorInterval v="1" />
             <documentation></documentation>
diff --git a/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod
index cdeab537951f0d5e6e2cc62e94a246e25de72125..016423114f36effd76069046939dae8a87134d7b 100644
--- a/entity/360Degree_entity/360Degree_entity.aod
+++ b/entity/360Degree_entity/360Degree_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>360Degree_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/360Degree_entity/documentation.adoc</documentation>
   <title>360 Degree</title>
   <grantUpdate v="false" />
   <grantDelete v="false" />
@@ -31,6 +32,7 @@
       <name>OrganisationObjects</name>
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TARGET_ID</targetIdField>
+      <documentation>%aditoprj%/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>15488007-165c-4630-828a-447cf2c27899</name>
@@ -74,6 +76,7 @@
       <name>PersonObjects</name>
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TARGET_ID</targetIdField>
+      <documentation>%aditoprj%/entity/360Degree_entity/entityfields/personobjects/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>1d931ae6-137a-4db3-b02c-eb8872d349c6</name>
diff --git a/entity/360Degree_entity/documentation.adoc b/entity/360Degree_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5f89647c9f841c96d4282003953e06f43cf158e6
--- /dev/null
+++ b/entity/360Degree_entity/documentation.adoc
@@ -0,0 +1,6 @@
+= 360Degree_entity
+
+The 360Degree_entity shows the Connection between datenmodells.
+The entity has two providers for persons and organisations.
+
+The 360Degree_entity shows direct connections, don´t be confused with the ObjectRelation_entity.
\ No newline at end of file
diff --git a/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc b/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..99f80bbcbff1b4be3f7aaeae86a649ad2375f936
--- /dev/null
+++ b/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc
@@ -0,0 +1,3 @@
+= 360Degree_entity - OrganisationObjects
+
+Provider for organisiations, displays the 360Degree connections to organisations.
\ No newline at end of file
diff --git a/entity/360Degree_entity/entityfields/personobjects/documentation.adoc b/entity/360Degree_entity/entityfields/personobjects/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a97a2849677d33621e69a314480c1b4b189af861
--- /dev/null
+++ b/entity/360Degree_entity/entityfields/personobjects/documentation.adoc
@@ -0,0 +1,3 @@
+= 360Degree_entity - PersonObjects
+
+Provider for persons, displays the 360Degree connections to persons.
\ No newline at end of file
diff --git a/entity/ActivityLink_entity/ActivityLink_entity.aod b/entity/ActivityLink_entity/ActivityLink_entity.aod
index dd052b4473a40c0225d4e1e32bc95e80d07685d6..ac2b503bcd5ce140e817ff15a5d0fdd6ebfdfe6d 100644
--- a/entity/ActivityLink_entity/ActivityLink_entity.aod
+++ b/entity/ActivityLink_entity/ActivityLink_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ActivityLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ActivityLink_entity/documentation.adoc</documentation>
   <title>Connection</title>
   <titlePlural>Connections</titlePlural>
   <recordContainer>db</recordContainer>
@@ -37,6 +38,7 @@
       <name>Links</name>
       <targetContextField>OBJECT_TYPE</targetContextField>
       <targetIdField>OBJECT_ROWID</targetIdField>
+      <documentation>%aditoprj%/entity/ActivityLink_entity/entityfields/links/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
diff --git a/entity/ActivityLink_entity/documentation.adoc b/entity/ActivityLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..3e28df342973c142ffe04e8d56ea197fed9c0c71
--- /dev/null
+++ b/entity/ActivityLink_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ActivityLink_entity
+
+Displays the connection between Activity and another module (for example Person).
\ No newline at end of file
diff --git a/entity/ActivityLink_entity/entityfields/links/documentation.adoc b/entity/ActivityLink_entity/entityfields/links/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cb3576565a3603eb096dcb65e93cd0917d8e88dc
--- /dev/null
+++ b/entity/ActivityLink_entity/entityfields/links/documentation.adoc
@@ -0,0 +1,3 @@
+= 360Degree_entity - Links
+
+Provides the Links. With the parameter "ActivityId_param" you can filter for one Activity. 
\ No newline at end of file
diff --git a/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js b/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
index 472e84a81ca428c4b698167c59702f55d5ae0a04..6e4af217f1b188cb44d3218b7acd239b5f1723c5 100644
--- a/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,5 @@ import("Sql_lib");
 var cond = SqlCondition.begin()
                        .andPrepareVars("ACTIVITYLINK.ACTIVITY_ID", "$param.ActivityId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 0")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 0"));
\ No newline at end of file
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index d94015b2c511c97d6615b82a80d53ffb28ca3df0..5ee06e43690db061ee477469c00edec8255825a6 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -83,6 +83,7 @@
     <entityField>
       <name>ICON</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
@@ -115,10 +116,6 @@
           <name>AssignmentTable_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
-        <entityParameter>
-          <name>AssignmentName_param</name>
-          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/documents/children/assignmentname_param/valueProcess.js</valueProcess>
-        </entityParameter>
       </children>
     </entityConsumer>
     <entityConsumer>
@@ -240,6 +237,18 @@
           <fieldName>Activities</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>709bafbd-d258-4f1c-85e8-b7062ee0e42b</name>
+          <entityName>BulkMail_entity</entityName>
+          <fieldName>Activities</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>4f51e380-7d34-4d6f-a10f-a9044ff671bb</name>
+          <entityName>SerialLetter_entity</entityName>
+          <fieldName>Activities</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
@@ -517,10 +526,6 @@
         <fieldName>TreeProvider</fieldName>
       </dependency>
       <children>
-        <entityParameter>
-          <name>IsTheme_param</name>
-          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetreeistheme/children/istheme_param/valueProcess.js</valueProcess>
-        </entityParameter>
         <entityParameter>
           <name>ObjectType_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetreeistheme/children/objecttype_param/valueProcess.js</valueProcess>
@@ -529,6 +534,10 @@
           <name>ObjectRowId_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetreeistheme/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>GetTheme_param</name>
+          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetreeistheme/children/gettheme_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityField>
@@ -537,6 +546,12 @@
       <groupable v="true" />
       <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/entryyear/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>bindata</name>
+      <contentType>FILE</contentType>
+      <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/bindata/stateProcess.js</stateProcess>
+      <onValueChange>%aditoprj%/entity/Activity_entity/entityfields/bindata/onValueChange.js</onValueChange>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Activity_entity/documentation.adoc b/entity/Activity_entity/documentation.adoc
index f904775731a6512f69c2d443b1293a2919e5f31f..d8bc9242db4604da978e6e32d5a4d29d287a25dc 100644
--- a/entity/Activity_entity/documentation.adoc
+++ b/entity/Activity_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= Activity
+= Activity_entity
 
 An activity describes one part of the communication timeline. 
 This could be for example an e-mail or a phone call.
diff --git a/entity/Activity_entity/entityfields/attributetreeistheme/children/istheme_param/valueProcess.js b/entity/Activity_entity/entityfields/attributetreeistheme/children/gettheme_param/valueProcess.js
similarity index 100%
rename from entity/Activity_entity/entityfields/attributetreeistheme/children/istheme_param/valueProcess.js
rename to entity/Activity_entity/entityfields/attributetreeistheme/children/gettheme_param/valueProcess.js
diff --git a/entity/Activity_entity/entityfields/bindata/onValueChange.js b/entity/Activity_entity/entityfields/bindata/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..842550196404975e9c37888264b64b585905034f
--- /dev/null
+++ b/entity/Activity_entity/entityfields/bindata/onValueChange.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("system.text");
+import("MimeType_lib");
+import("Document_lib");
+import("system.vars");
+
+var upload = new FileUpload(vars.get("$local.value"));
+if (upload.mimeType == MimeTypes.ODT() || upload.mimeType == MimeTypes.DOCX())
+{
+    var content = text.parseDocument(upload.bindata);
+    neon.setFieldValue("$field.INFO", content.trim());
+}
diff --git a/entity/Activity_entity/entityfields/bindata/stateProcess.js b/entity/Activity_entity/entityfields/bindata/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..368b17176f16b9566daa025535cf7503790558e3
--- /dev/null
+++ b/entity/Activity_entity/entityfields/bindata/stateProcess.js
@@ -0,0 +1,9 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+
+if (vars.exists("$param.PresetDocuments_param") && vars.get("$param.PresetDocuments_param"))
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+else
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc b/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc
index 028aca9658879ec0a70be660d43f3b4c1aa5c3be..48189bd099eaec9aee0c943c78c0f796436f7c18 100644
--- a/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc
+++ b/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc
@@ -1,2 +1,4 @@
+= Activity_entity - LinkedObjects
+
 Provides records via ActivityLinks.
 Every Activity can have 0..n link-records. This provider can be used to retrieve Activity Records from another object that is linkable.(e.g. get all Activites of a specific contactperson)
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/maindocuments/stateProcess.js b/entity/Activity_entity/entityfields/maindocuments/stateProcess.js
index fb349d978f74911958575fd56fcf2cce34dee071..62c450720a9966720b34aee7a736dd6251526d06 100644
--- a/entity/Activity_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Activity_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("ACTIVITY", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("ACTIVITY", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Activity_entity/entityfields/responsible/valueProcess.js b/entity/Activity_entity/entityfields/responsible/valueProcess.js
index a95c59aa0b3b800aa722f4da67d502dd69d18ae9..fc2ffa0007b4a023a449394d06f5fb002edd00a7 100644
--- a/entity/Activity_entity/entityfields/responsible/valueProcess.js
+++ b/entity/Activity_entity/entityfields/responsible/valueProcess.js
@@ -3,5 +3,5 @@ import("system.vars");
 import("system.result");
 import("Employee_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
diff --git a/entity/Activity_entity/grantDeleteProcess.js b/entity/Activity_entity/grantDeleteProcess.js
index b8b033f79ad04aedecbc9ae7384b631d32c70c24..1611440cc9223c1db0fb43453d0d620bc7f661e0 100644
--- a/entity/Activity_entity/grantDeleteProcess.js
+++ b/entity/Activity_entity/grantDeleteProcess.js
@@ -2,4 +2,5 @@ import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("ACTIVITY", null, vars.get("$field.ACTIVITYID")));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("ACTIVITY", null, vars.get("$field.ACTIVITYID")));
diff --git a/entity/Activity_entity/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
index 9f488eeee91343b281765163cd04b54c0f48157c..c5efd80ad1e9b3cf7af09e80bdd641bae8d994cb 100644
--- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
@@ -23,7 +23,7 @@ if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.
                                                .andPrepareVars("ACTIVITYLINK.OBJECT_TYPE", "$param.ObjectId_param");
 
                                                             // TODO: more performant way than IN. Maybe a join??
-    cond.and(db.translateStatement(activityLinkCond.buildSql("ACTIVITY.ACTIVITYID in (select ACTIVITYLINK.ACTIVITY_ID from ACTIVITYLINK", "1=2", ")")))
+    cond.and(SqlUtils.translateStatementWithQuotes(activityLinkCond.buildSql("ACTIVITY.ACTIVITYID in (select ACTIVITYLINK.ACTIVITY_ID from ACTIVITYLINK", "1=2", ")")))
 }
     
 if(vars.getString("$param.OnlyInnate_param") == "true") 
@@ -41,7 +41,7 @@ if (loadNothing)
 }
 else
 {
-    //TODO: use a preparedCondition when available #1030812 #1034026
-    var resCond = db.translateCondition(cond.build("1 = 1"));
+    //TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+    var resCond = cond.translate("1 = 1");
 }
 result.string(resCond);
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/onDBInsert.js b/entity/Activity_entity/recordcontainers/db/onDBInsert.js
index c687b6e1624de972c662d31003d3dcdb31628893..054415bffa780180ce2bd4ed4b91b377a56431b4 100644
--- a/entity/Activity_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Activity_entity/recordcontainers/db/onDBInsert.js
@@ -1,10 +1,22 @@
+import("Document_lib");
 import("ActivityTask_lib");
 import("system.vars");
 import("system.db");
 
-var documents = vars.exists("$param.PresetDocuments_param") && vars.getString("$param.PresetDocuments_param");
-if (documents)
+var upload = new FileUpload(vars.get("$field.bindata"));
+if (upload.isFilled())
+{
+    documents = [
+        upload.filename,
+        upload.bindata,
+        false
+    ];
+}
+else
 {
-    documents = JSON.parse(documents);
+    var documents = vars.exists("$param.PresetDocuments_param") && vars.getString("$param.PresetDocuments_param");
+    if (documents)
+        documents = JSON.parse(documents);
+}
+if (documents)
     ActivityUtils.insertDocuments(vars.get("$local.uid"), documents);
-}
\ No newline at end of file
diff --git a/entity/AddressType_entity/AddressType_entity.aod b/entity/AddressType_entity/AddressType_entity.aod
index 3fbbc3eeaff693e01c33055c56ccd48f45fa0c32..235505e9fe286aaf07e875e8de02935d0c527310 100644
--- a/entity/AddressType_entity/AddressType_entity.aod
+++ b/entity/AddressType_entity/AddressType_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AddressType_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AddressType_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/AddressType_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -20,6 +21,7 @@
     <entityProvider>
       <name>ByCategory</name>
       <lookupIdfield>KEYID</lookupIdfield>
+      <documentation>%aditoprj%/entity/AddressType_entity/entityfields/bycategory/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>0956b1f3-8b67-4f82-b04a-70be88aff19f</name>
diff --git a/entity/AddressType_entity/documentation.adoc b/entity/AddressType_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1a4a9012a6231a43ccefd5eb46270153d3baa324
--- /dev/null
+++ b/entity/AddressType_entity/documentation.adoc
@@ -0,0 +1,7 @@
+= AddressType_entity
+
+Displays the AdressType Keyword ($KeywordRegistry.addressType()).
+In the condition of the recordcontainer the entity differs between organisation and contact.
+
+You need a own entty for this case because the KeywordEntry_entity 
+provides all information without checking conditions for KeywordAttribute.
\ No newline at end of file
diff --git a/entity/AddressType_entity/entityfields/bycategory/documentation.adoc b/entity/AddressType_entity/entityfields/bycategory/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6307043847f21381c4a63c12f79bfc884203b444
--- /dev/null
+++ b/entity/AddressType_entity/entityfields/bycategory/documentation.adoc
@@ -0,0 +1,3 @@
+= AddressType_entity - ByCategory
+
+Filter for a category in the $KeywordRegistry.addressType().
\ No newline at end of file
diff --git a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
index e7b6baeed0f6f3e3eab3d3330e4a3dcad360e7ce..c80d36420df3b630a081faca76cbb5e4207aed07 100644
--- a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
@@ -21,5 +21,5 @@ if (usageFilter)
                                                     from AB_KEYWORD_ATTRIBUTERELATION ", null, ")"));
 }
 
-cond = db.translateStatement(cond.build("1 = 2"));
+cond = SqlUtils.cond.translate("1 = 2");
 result.string(cond);
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/AddressValidation_entity.aod b/entity/AddressValidation_entity/AddressValidation_entity.aod
index 3b44b38b5d25db3aa2097bbb4ff5414881bc0ead..7aec3da723d945b233417af4cc03f58187a268af 100644
--- a/entity/AddressValidation_entity/AddressValidation_entity.aod
+++ b/entity/AddressValidation_entity/AddressValidation_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AddressValidation_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AddressValidation_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/AddressValidation_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>jdito</recordContainer>
   <entityFields>
@@ -15,6 +16,7 @@
     </entityField>
     <entityProvider>
       <name>ZipValidaton</name>
+      <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>fcfcbebe-260a-4773-a874-9791b4887ae2</name>
@@ -72,6 +74,7 @@
     </entityField>
     <entityProvider>
       <name>CityValidation</name>
+      <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>27114db7-8562-43b2-87d8-fa605bbf2319</name>
@@ -95,6 +98,7 @@
     </entityParameter>
     <entityProvider>
       <name>FullAddressValidation</name>
+      <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>10f700b5-1ac6-4d50-bcb8-aae55714fb43</name>
@@ -129,6 +133,7 @@
     </entityField>
     <entityProvider>
       <name>StreetValidation</name>
+      <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>3211d147-0867-4fc1-8640-34a1b8fdcf18</name>
diff --git a/entity/AddressValidation_entity/documentation.adoc b/entity/AddressValidation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f503e6ba7c906bdb9af756328ca887ca5ca73fda
--- /dev/null
+++ b/entity/AddressValidation_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= AddressValidation_entity
+
+The entity handling the logic of the address validation.
+For details see WsValidation_lib
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc b/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..737201e4059dea4f860ff33c9b2dc983a7dec9a5
--- /dev/null
+++ b/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc
@@ -0,0 +1,3 @@
+= AddressValidation_entity - CityValidation
+
+Provider for validating city only
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc b/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..2fc00e78a4808f28db0cf3b9f4e392f19cc0e580
--- /dev/null
+++ b/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc
@@ -0,0 +1,3 @@
+= AddressValidation_entity - FullAddressValidation
+
+Provider for validating the complete address
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc b/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..60a4b5ed2ae64bb767ba4de28fc83961c5faf82c
--- /dev/null
+++ b/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc
@@ -0,0 +1,3 @@
+= AddressValidation_entity - StreetValidation
+
+Provider for validating street only
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc b/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..9da7e51bd414bf8a92dee65a1e05211df58bb4da
--- /dev/null
+++ b/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc
@@ -0,0 +1,3 @@
+= AddressValidation_entity - ZipValidation
+
+Provider for validating zip only
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js b/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
index 08e0650767e3f17d79a07386a56db05c1e3bddb5..5e2e5870c7195119f5df38e56725201094ccb404 100644
--- a/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
@@ -2,30 +2,45 @@ import("system.result");
 import("WsValidation_lib");
 import("system.vars");
 
-var type = "";
-if (vars.exists("$param.Type_param") && vars.get("$param.Type_param"))
-    type = vars.get("$param.Type_param");
+if (vars.get("$local.idvalues") != null)
+{
+    // extract data from uid as it already contains everything
+    result.object(vars.get("$local.idvalues").map(function(pId)
+    {
+        var data = WsValidationUtils.parseJSONArray(pId)
+        return [
+            pId,
+        ].concat(data.slice(0, -1))
+    }))
+}
+else
+{
+    var type = "";
+    if (vars.exists("$param.Type_param") && vars.get("$param.Type_param"))
+        type = vars.get("$param.Type_param");
 
-var country = "";
-if (vars.exists("$param.Country_param") && vars.get("$param.Country_param"))
-    country = vars.get("$param.Country_param");
+    var country = "";
+    if (vars.exists("$param.Country_param") && vars.get("$param.Country_param"))
+        country = vars.get("$param.Country_param");
 
-var city = "";
-if (vars.exists("$param.City_param") && vars.get("$param.City_param"))
-    city = vars.get("$param.City_param");
+    var city = "";
+    if (vars.exists("$param.City_param") && vars.get("$param.City_param"))
+        city = vars.get("$param.City_param");
 
-// get the value typed by the user
-var filter = "";
-var localFilter = vars.get("$local.filter");
+    // get the value typed by the user
+    var filter = "";
+    var localFilter = vars.get("$local.filter");
 
-if(localFilter.filter != null) {
-    filter = localFilter.filter.childs[0].value;
-}
+    if(localFilter.filter != null) {
+        filter = localFilter.filter.childs[0].value;
+    }
 
-if (!filter && vars.exists("$param.CurrentValue_param") && vars.get("$param.CurrentValue_param"))
-    filter = vars.get("$param.CurrentValue_param");
+    if (!filter && vars.exists("$param.CurrentValue_param") && vars.get("$param.CurrentValue_param"))
+        filter = vars.get("$param.CurrentValue_param");
 
-var foundAddresses = WsValidationUtils.validate(filter, type, country, city);
-result.object(foundAddresses.map(function(row) {
-    return row.concat([filter])
-}));
\ No newline at end of file
+    var foundAddresses = WsValidationUtils.validate(filter, type, country, city);
+
+    result.object(foundAddresses.map(function(row) {
+        return row.concat([filter])
+    }));
+}
diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index e95cde07db7f979ea6d2538de6b18b2cb88b33c7..56de903b8168177cc0225dff4ab9d675c30f7a46 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -14,6 +14,7 @@
       <title>Street</title>
       <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/address/mandatoryProcess.js</mandatoryProcess>
       <textInputAllowed v="true" />
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/address/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Address_entity/entityfields/address/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/address/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/Address_entity/entityfields/address/onValueChange.js</onValueChange>
@@ -47,15 +48,11 @@
     </entityField>
     <entityField>
       <name>CITY</name>
+      <documentation>%aditoprj%/entity/Address_entity/entityfields/city/documentation.adoc</documentation>
       <title>City</title>
       <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/city/mandatoryProcess.js</mandatoryProcess>
       <textInputAllowed v="true" />
-      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/city/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/city/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Address_entity/entityfields/city/onValueChange.js</onValueChange>
-      <onValueChangeTypes>
-        <element>MASK</element>
-      </onValueChangeTypes>
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/city/stateProcess.js</stateProcess>
     </entityField>
     <entityField>
       <name>COUNTRY</name>
@@ -86,17 +83,12 @@
       <name>ZIP</name>
       <title>Postcode</title>
       <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/zip/mandatoryProcess.js</mandatoryProcess>
-      <textInputAllowed v="true" />
-      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zip/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/zip/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Address_entity/entityfields/zip/onValueChange.js</onValueChange>
-      <onValueChangeTypes>
-        <element>MASK</element>
-      </onValueChangeTypes>
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/zip/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Address_entity/entityfields/zip/onValidation.js</onValidation>
     </entityField>
     <entityProvider>
       <name>OrganisationAddresses</name>
+      <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>b484b43c-16f6-4875-9787-f0813dd200cb</name>
@@ -134,6 +126,7 @@
     </entityParameter>
     <entityProvider>
       <name>ContactAddresses</name>
+      <documentation>%aditoprj%/entity/Address_entity/entityfields/contactaddresses/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>efdb2f19-ab41-4f49-941a-843610e2b31b</name>
@@ -228,6 +221,7 @@
     </entityParameter>
     <entityProvider>
       <name>OrganisationAndContactAddresses</name>
+      <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>4d7e3b3a-abba-4429-9f1e-18e11788c0f2</name>
@@ -404,6 +398,49 @@
       <valueProcess>%aditoprj%/entity/Address_entity/entityfields/showdsgvomessage_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>Zip_ws</name>
+      <title>Postcode</title>
+      <consumer>ZipValidation</consumer>
+      <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js</mandatoryProcess>
+      <textInputAllowed v="true" />
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/Address_entity/entityfields/zip_ws/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+      <onValidation>%aditoprj%/entity/Address_entity/entityfields/zip_ws/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>City_ws</name>
+      <title>City</title>
+      <consumer>CityValidation</consumer>
+      <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js</mandatoryProcess>
+      <textInputAllowed v="true" />
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/Address_entity/entityfields/city_ws/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>Address_ws</name>
+      <title>Street</title>
+      <consumer>StreetValidation</consumer>
+      <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js</mandatoryProcess>
+      <textInputAllowed v="true" />
+      <stateProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/Address_entity/entityfields/address_ws/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -425,10 +462,12 @@
         <dbRecordFieldMapping>
           <name>ADDRESS.value</name>
           <recordfield>ADDRESS.ADDRESS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CITY.value</name>
           <recordfield>ADDRESS.CITY</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ADDRESSADDITION.value</name>
@@ -437,6 +476,7 @@
         <dbRecordFieldMapping>
           <name>COUNTRY.value</name>
           <recordfield>ADDRESS.COUNTRY</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ADDRESSID.value</name>
@@ -453,6 +493,7 @@
         <dbRecordFieldMapping>
           <name>DISTRICT.value</name>
           <recordfield>ADDRESS.DISTRICT</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>BUILDINGNO.value</name>
@@ -461,6 +502,7 @@
         <dbRecordFieldMapping>
           <name>REGION.value</name>
           <recordfield>ADDRESS.REGION</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACT_ID.value</name>
@@ -469,6 +511,7 @@
         <dbRecordFieldMapping>
           <name>STATE.value</name>
           <recordfield>ADDRESS.PROVINCE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ZIP.value</name>
diff --git a/entity/Address_entity/conditionProcess.js b/entity/Address_entity/conditionProcess.js
index fccfe75da2c5adf71d2f3fdbed4695f49ec76ea6..80ab73670379630d15912e5b02b3309e05ad117b 100644
--- a/entity/Address_entity/conditionProcess.js
+++ b/entity/Address_entity/conditionProcess.js
@@ -1,7 +1,6 @@
+import("Sql_lib");
+import("system.db");
 import("system.result");
-import("system.vars");
 
-if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
-    result.string("ADDRESS.CONTACT_ID = ('" + vars.getString("$param.ContactId_param") + "')");  
-else
-    result.string("1=1");  
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin().andPrepareVars("ADDRESS.CONTACT_ID", "$param.ContactId_param").translate("1=1"));  
diff --git a/entity/Address_entity/documentation.adoc b/entity/Address_entity/documentation.adoc
index 220e9378c43c2adb918743d0164aca799b0604a4..3df0a5a5e2cf38f12d0b280c605ac8670bc35644 100644
--- a/entity/Address_entity/documentation.adoc
+++ b/entity/Address_entity/documentation.adoc
@@ -1,5 +1,4 @@
-Address
-=======
+= Address_entity
 
 ----
 an entity for logic behind a postal address
@@ -8,3 +7,5 @@ an entity for logic behind a postal address
 The entity manages storing postal addresses and provides features like validation.
 
 Every `CONTACT` has one standard address value that is used by default for some actions. Keep in mind that this standard address has a special status and therefore may cannot be deleted.
+
+Webservice Validation: See WsValidation_lib
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address/mandatoryProcess.js b/entity/Address_entity/entityfields/address/mandatoryProcess.js
index 7c898f01828b8da4b9712687a66dac8914b3b137..c8c795a3080f3034b154cb73d55fb737a47dc7e1 100644
--- a/entity/Address_entity/entityfields/address/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/address/mandatoryProcess.js
@@ -1,5 +1,5 @@
-import("Entity_lib");
-import("system.result");
 import("AddressEntity_lib");
+import("system.result");
+import("WsValidation_lib");
 
-result.object(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.string(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address/onValueChange.js b/entity/Address_entity/entityfields/address/onValueChange.js
index abec5ca7ea53495f6a64fbb7eee7ed6fa3f53b25..9ec7eecebe1fdaed8182662d6d480784a96afcd0 100644
--- a/entity/Address_entity/entityfields/address/onValueChange.js
+++ b/entity/Address_entity/entityfields/address/onValueChange.js
@@ -1,5 +1,5 @@
 import("system.vars");
 import("WsValidation_lib");
 
-// use the code if address webservice is active
-//WsValidationUtils.setAddressFields(vars.get("$local.value"));
\ No newline at end of file
+if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_STREET_NOMINATIM))
+    WsValidationUtils.setAddressFields(vars.get("$local.value"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address/stateProcess.js b/entity/Address_entity/entityfields/address/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3644f13c625a21d01f132729ba0aa8b888166a02
--- /dev/null
+++ b/entity/Address_entity/entityfields/address/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_STREET_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/displayValueProcess.js b/entity/Address_entity/entityfields/address_ws/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b35f1422608f57b4dff8373df64951f85c1844c
--- /dev/null
+++ b/entity/Address_entity/entityfields/address_ws/displayValueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e9f416503faa722f6f1d37ca4cfdbada1f7f25c
--- /dev/null
+++ b/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("AddressEntity_lib");
+import("WsValidation_lib");
+import("system.result");
+
+result.object(WsValidationFieldUtils.wsFieldMandatoryProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, AddressEntityValidation.isMandatoryField("ADDRESS")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/onValueChange.js b/entity/Address_entity/entityfields/address_ws/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..02aee850189287dedc43fbfed13f53cfd5f26a84
--- /dev/null
+++ b/entity/Address_entity/entityfields/address_ws/onValueChange.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/stateProcess.js b/entity/Address_entity/entityfields/address_ws/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e20c40eb313f2a3ac9fa5bcea35d7665e4274744
--- /dev/null
+++ b/entity/Address_entity/entityfields/address_ws/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_STREET_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/valueProcess.js b/entity/Address_entity/entityfields/address_ws/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ccdf5a99f70f8b801158a56c1fa7b8136854130
--- /dev/null
+++ b/entity/Address_entity/entityfields/address_ws/valueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/displayValueProcess.js b/entity/Address_entity/entityfields/city/displayValueProcess.js
deleted file mode 100644
index 0738ded17951195fb9050da641ec78c256a3ee38..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/city/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-
-// Needed for instant refresh if set by neon.setFieldValue
-// use the code if address webservice is active
-//result.string(vars.get("$field.CITY"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/documentation.adoc b/entity/Address_entity/entityfields/city/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..42b8967311dc5c3a10c78915acaa451068a4339b
--- /dev/null
+++ b/entity/Address_entity/entityfields/city/documentation.adoc
@@ -0,0 +1,2 @@
+Address validation
+==
diff --git a/entity/Address_entity/entityfields/city/mandatoryProcess.js b/entity/Address_entity/entityfields/city/mandatoryProcess.js
index 7c898f01828b8da4b9712687a66dac8914b3b137..df67f6f85d7921e362daabb66453b4ecf258d262 100644
--- a/entity/Address_entity/entityfields/city/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/city/mandatoryProcess.js
@@ -1,5 +1,5 @@
-import("Entity_lib");
-import("system.result");
 import("AddressEntity_lib");
+import("system.result");
+import("WsValidation_lib");
 
-result.object(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.string(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/onValueChange.js b/entity/Address_entity/entityfields/city/onValueChange.js
deleted file mode 100644
index abec5ca7ea53495f6a64fbb7eee7ed6fa3f53b25..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/city/onValueChange.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("WsValidation_lib");
-
-// use the code if address webservice is active
-//WsValidationUtils.setAddressFields(vars.get("$local.value"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/stateProcess.js b/entity/Address_entity/entityfields/city/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2ef4a95e3c8fef0eb47912e2344bd35bad880f4
--- /dev/null
+++ b/entity/Address_entity/entityfields/city/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_CITY_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/valueProcess.js b/entity/Address_entity/entityfields/city/valueProcess.js
deleted file mode 100644
index 2c9d496185be419f31c762709ca97d83a1ae4bd4..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/city/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("WsValidation_lib");
-import("system.vars");
-
-// use the code if address webservice is active
-//result.string(WsValidationUtils.valueFromJSON(vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city_ws/displayValueProcess.js b/entity/Address_entity/entityfields/city_ws/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7cbee1a42ec8b179023281837013cc7b0efe4609
--- /dev/null
+++ b/entity/Address_entity/entityfields/city_ws/displayValueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7dba637e9dc830390f59d8f7f66fe63c019c0e98
--- /dev/null
+++ b/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("AddressEntity_lib");
+import("WsValidation_lib");
+import("system.result");
+
+result.object(WsValidationFieldUtils.wsFieldMandatoryProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, AddressEntityValidation.isMandatoryField("CITY")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city_ws/onValueChange.js b/entity/Address_entity/entityfields/city_ws/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..5938552243c97f173eaa35e938b3745fa9e23f66
--- /dev/null
+++ b/entity/Address_entity/entityfields/city_ws/onValueChange.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city_ws/stateProcess.js b/entity/Address_entity/entityfields/city_ws/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1017598abbdba0191d7b1e0da4496723a21aff9f
--- /dev/null
+++ b/entity/Address_entity/entityfields/city_ws/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_CITY_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city_ws/valueProcess.js b/entity/Address_entity/entityfields/city_ws/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..789a3b330381abc87c93a13ef767e578101513bc
--- /dev/null
+++ b/entity/Address_entity/entityfields/city_ws/valueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js
index 210aab5135161a47229a09613e2ed186ebf9528f..74c070329cde0f8edeabd0e80677b4105b3e256e 100644
--- a/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js
+++ b/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$this.value"))
\ No newline at end of file
+result.string(vars.get("$field.CITY"))
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/contactaddresses/documentation.adoc b/entity/Address_entity/entityfields/contactaddresses/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f26157c9021e19d07fb92d340999169d3328efaa
--- /dev/null
+++ b/entity/Address_entity/entityfields/contactaddresses/documentation.adoc
@@ -0,0 +1,3 @@
+= Address_entity - ContactAddresses
+
+Provides all addresses for contacts
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc b/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f61e376802558e84c91a7ddb96a3d06bb296bbb8
--- /dev/null
+++ b/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc
@@ -0,0 +1,3 @@
+= Address_entity - OrganisationAddresses
+
+Provides all addresses for organisations
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc b/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc
index 6eb2a8e848e21a2e53a9f31c53291dbb14a6d10c..56cf9413655f7379d32f14f38fab0472c2b7a1ce 100644
--- a/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc
+++ b/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc
@@ -1,3 +1,5 @@
+= Address_entity - OrganisationAddressesByContact
+
 Get the organisation addresses of a contact. The organisation is loaded by the contact of the contact.
 You have to provide the contact ID from the contact.
  
diff --git a/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc b/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5ab95ec35853505295897ac5896e6bc196190e64
--- /dev/null
+++ b/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc
@@ -0,0 +1,3 @@
+= Address_entity - OrganisationAndContactAdresses
+
+Provides all addresses for both organisations and contacts (without an filter)
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
index 6cd3c4544e56fa57ad04b119be620aa650f4a849..8e559d5146426a870e4f44bc529645bdf1770b5b 100644
--- a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
+++ b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$this.value"));
\ No newline at end of file
+result.string(vars.get("$field.ADDRESS"))
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/displayValueProcess.js b/entity/Address_entity/entityfields/zip/displayValueProcess.js
deleted file mode 100644
index 219ae2ffc092fe47ebcd3b427c2c4f28052cd0d4..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/zip/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-
-// Needed for instant refresh if set by neon.setFieldValue
-// use the code if address webservice is active
-//result.string(vars.get("$field.ZIP"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/mandatoryProcess.js b/entity/Address_entity/entityfields/zip/mandatoryProcess.js
index 7c898f01828b8da4b9712687a66dac8914b3b137..981aa78bf81d1892acc2f6e3874904c0e2598de4 100644
--- a/entity/Address_entity/entityfields/zip/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/zip/mandatoryProcess.js
@@ -1,5 +1,5 @@
-import("Entity_lib");
-import("system.result");
 import("AddressEntity_lib");
+import("WsValidation_lib");
+import("system.result");
 
-result.object(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.object(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/onValidation.js b/entity/Address_entity/entityfields/zip/onValidation.js
index d676d5911b0c9fbe9ad578821db2c08f56e1b5df..31896dfdfa22d31a9d0775a332f4160f6dcffe64 100644
--- a/entity/Address_entity/entityfields/zip/onValidation.js
+++ b/entity/Address_entity/entityfields/zip/onValidation.js
@@ -1,15 +1,11 @@
+import("WsValidation_lib");
 import("system.translate");
 import("system.result");
 import("system.vars");
 import("PostalAddress_lib");
 import("Entity_lib");
 
-
-var countryCode = vars.get("$field.COUNTRY");
-var zipCode = vars.get("local.value");
-var message = "";
-var isValid = AddressValidationUtils.isValidZip(countryCode, zipCode);
-if (!isValid)
-    message = translate.text("The ZIP code does not match the format of the country.");
-    
-result.string(message);
\ No newline at end of file
+if (!WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ZIP_NOMINATIM))
+{
+    result.string(AddressValidationUtils.validateZipField(vars.get("$field.COUNTRY"), vars.get("$local.value")));
+}
diff --git a/entity/Address_entity/entityfields/zip/onValueChange.js b/entity/Address_entity/entityfields/zip/onValueChange.js
deleted file mode 100644
index abec5ca7ea53495f6a64fbb7eee7ed6fa3f53b25..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/zip/onValueChange.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("WsValidation_lib");
-
-// use the code if address webservice is active
-//WsValidationUtils.setAddressFields(vars.get("$local.value"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/stateProcess.js b/entity/Address_entity/entityfields/zip/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1f5ba1ac1ff8909fb57d89236cf68be4a92d6d0
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/valueProcess.js b/entity/Address_entity/entityfields/zip/valueProcess.js
deleted file mode 100644
index 92c7fae75dc7a1b51668e4685fe75ed5d197a85b..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/zip/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-import("WsValidation_lib");
-
-// use the code if address webservice is active
-//result.string(WsValidationUtils.valueFromJSON(vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js b/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c1fea5790d67cb8180b615b525fd60dce99bef3
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM);
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a2dfbb85c858c9298c53c6e6ff4f7220ea09f86b
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("AddressEntity_lib");
+import("WsValidation_lib");
+import("system.result");
+
+result.object(WsValidationFieldUtils.wsFieldMandatoryProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, AddressEntityValidation.isMandatoryField("ZIP")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/onValidation.js b/entity/Address_entity/entityfields/zip_ws/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..bbbf2acbbc727130db98ae621e1db16ab3fad89e
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/onValidation.js
@@ -0,0 +1,17 @@
+import("WsValidation_lib");
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("PostalAddress_lib");
+import("Entity_lib");
+
+if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ZIP_NOMINATIM))
+{
+    var wsData = WsValidationUtils.parseJSONArray(vars.get("$local.value"));
+    
+    // If it comes from WS (not null as parsing succeeded), assume it's correct. If not: validate.
+    if (wsData == null)
+    {
+        result.string(AddressValidationUtils.validateZipField(vars.get("$field.COUNTRY"), vars.get("$local.value")));
+    }
+}
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/onValueChange.js b/entity/Address_entity/entityfields/zip_ws/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfd1bbf97d2944b0ffcec04d017e62138a3bb23f
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/onValueChange.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, "$field.ZIP");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/stateProcess.js b/entity/Address_entity/entityfields/zip_ws/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3aec65f49c1af2c53e7221499485909c8ad4ee78
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/stateProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("WsValidation_lib");
+
+result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip_ws/valueProcess.js b/entity/Address_entity/entityfields/zip_ws/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ecfd8b06e718cd095a3958212e60dcf0791e7a5
--- /dev/null
+++ b/entity/Address_entity/entityfields/zip_ws/valueProcess.js
@@ -0,0 +1,3 @@
+import("WsValidation_lib");
+
+WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, "$field.ZIP");
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
index 6cd3c4544e56fa57ad04b119be620aa650f4a849..d9e7983e6f2422f678b9a024ace857de80d1dc1c 100644
--- a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
+++ b/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$this.value"));
\ No newline at end of file
+result.string(vars.get("$field.ZIP"))
\ No newline at end of file
diff --git a/entity/Address_entity/recordcontainers/childgroup/query.js b/entity/Address_entity/recordcontainers/childgroup/query.js
index 4cf4bcc1d9115cf0e3f038deb2444c85fbd28c1e..17e6d413dd07573ab64f90b56924072230038dee 100644
--- a/entity/Address_entity/recordcontainers/childgroup/query.js
+++ b/entity/Address_entity/recordcontainers/childgroup/query.js
@@ -1,24 +1,20 @@
+import("Sql_lib");
+import("system.db");
 import("system.result");
 import("system.vars");
-import("system.db");
-
-var sqlQuery, queryCondition, affectedIds;
 
+var affectedIds;
 if (vars.exists("$local.idvalue")) {
     affectedIds = vars.get("$local.idvalue");
-    queryCondition = " where ADDRESS.ADDRESSID in ('" + affectedIds.map(function (v){return db.quote(v);}).join("', '") + "')";
-    //TODO: refactor this for incremental indexer (injections?)
 }
 
-sqlQuery = 'select ADDRESS.ADDRESSID as "_uid_"' 
-    + ', ADDRESS.ADDRESSID'
-    + ', ADDRESS.ZIP as ZIP' 
-    + ', ADDRESS.CITY as CITY' 
-    + ', ADDRESS.COUNTRY' 
-    + ', ADDRESS.ADDRESS' 
-    + ', ADDRESS.BUILDINGNO'
-    + " from ADDRESS"
-    + (queryCondition || "") 
-    + " order by ADDRESS.ADDRESSID ";
-
-result.string(sqlQuery);
\ No newline at end of file
+result.string(SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
+            .andIn("ADDRESS.ADDRESSID", affectedIds)
+            .buildSql("select \n\
+                        ADDRESS.ADDRESSID as \"_uid_\", \n\
+                        ADDRESS.ADDRESSID, \n\
+                        ADDRESS.ZIP as ZIP, \n\
+                        ADDRESS.CITY as CITY, \n\
+                        ADDRESS.COUNTRY, \n\
+                        ADDRESS.ADDRESS, \n\
+                        ADDRESS.BUILDINGNO from ADDRESS", "", "order by ADDRESS.ADDRESSID")));
\ No newline at end of file
diff --git a/entity/Address_entity/recordcontainers/db/conditionProcess.js b/entity/Address_entity/recordcontainers/db/conditionProcess.js
index 5f532688854461beb690033ea8e5a7fd2e6469d8..3494351fa8201c63d3d4574a6e47c4765d95dd68 100644
--- a/entity/Address_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Address_entity/recordcontainers/db/conditionProcess.js
@@ -17,6 +17,5 @@ if (organisationId)
     cond.orPrepare("ADDRESS.CONTACT_ID", organisationContactId);
 }
 
-cond = cond.build("1 = 2");
-cond = db.translateCondition(cond);
-result.string(cond);
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 2"));
\ No newline at end of file
diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
index 7ec5b609a00bb0b06b69797b29266df70521f709..fa2ff74000a4b5653b9a53fb943db3a0e909d725 100644
--- a/entity/AdminViewRow_entity/AdminViewRow_entity.aod
+++ b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AdminViewRow_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AdminViewRow_entity/documentation.adoc</documentation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -24,6 +25,7 @@
     </entityParameter>
     <entityProvider>
       <name>AdminViewRows</name>
+      <documentation>%aditoprj%/entity/AdminViewRow_entity/entityfields/adminviewrows/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>b5788fdf-1c82-45e2-8545-994c5e515476</name>
diff --git a/entity/AdminViewRow_entity/documentation.adoc b/entity/AdminViewRow_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a01f76066b9f89f526b61259333631610fc188dc
--- /dev/null
+++ b/entity/AdminViewRow_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= AdminViewRow_entity
+
+Displays the rows of administrative information of a entity.
+The entity "DefaultAdminView_entity" uses the data for display the rows (for example Person-ID, Contact-ID)
\ No newline at end of file
diff --git a/entity/AdminViewRow_entity/entityfields/adminviewrows/documentation.adoc b/entity/AdminViewRow_entity/entityfields/adminviewrows/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..9237cd755f8ca0c42a309c74d1fee743b72ddca9
--- /dev/null
+++ b/entity/AdminViewRow_entity/entityfields/adminviewrows/documentation.adoc
@@ -0,0 +1,3 @@
+= AdminViewRow_entity - AdminViewRows
+
+Provider for the administrative rows of a context
\ No newline at end of file
diff --git a/entity/Analyses_entity/Analyses_entity.aod b/entity/Analyses_entity/Analyses_entity.aod
index bc2c77e31f4cc4021ae69dbe62fa3434ef549b00..1f30121491f1833e449c53bda1fac4be1ffed0b2 100644
--- a/entity/Analyses_entity/Analyses_entity.aod
+++ b/entity/Analyses_entity/Analyses_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Analyses_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Analyses_entity/documentation.adoc</documentation>
   <icon>VAADIN:GRID_BIG_O</icon>
   <title>Analyses</title>
   <recordContainer>jdito</recordContainer>
@@ -39,6 +40,16 @@
       <name>openOverdueTasks</name>
       <onActionProcess>%aditoprj%/entity/Analyses_entity/entityfields/openoverduetasks/onActionProcess.js</onActionProcess>
     </entityActionField>
+    <entityField>
+      <name>TURNOVER_FORECAST</name>
+      <title>My Forecast</title>
+      <valueProcess>%aditoprj%/entity/Analyses_entity/entityfields/turnover_forecast/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>MYTURNOVER</name>
+      <title>My Turnover</title>
+      <valueProcess>%aditoprj%/entity/Analyses_entity/entityfields/myturnover/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Analyses_entity/documentation.adoc b/entity/Analyses_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..936ca160d91be72a00d119f4cf802b5df19fb3b6
--- /dev/null
+++ b/entity/Analyses_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Analyses_entity
+
+Logic and information for the ScoreCard displays openTasks, apointments, ... for the logged in user
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/myturnover/valueProcess.js b/entity/Analyses_entity/entityfields/myturnover/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c8e5ea68dc50dc8a1b7f3ddb63eeffa651d316f
--- /dev/null
+++ b/entity/Analyses_entity/entityfields/myturnover/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.datetime");
+import("system.db");
+import("system.result");
+import("system.vars");
+import("Date_lib");
+import("Sql_lib");
+import("system.SQLTYPES")
+
+var turnover = db.cell(SqlCondition.begin()
+                                   .andPrepare("SALESORDER.SALESORDERDATE", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER)
+                                   .buildSql("select sum(NET + VAT) from SALESORDER", "1=2"));
+                                  
+result.string(turnover);
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js b/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
index a0dfa7df8cc8a0a66dedfff78df476f6d4ad1884..8aa5325599c2c82547daca6456d57aebe5269313 100644
--- a/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
+++ b/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
@@ -1,11 +1,9 @@
-import("system.datetime");
+import("Employee_lib");
 import("system.db");
 import("system.result");
-import("system.vars");
-import("Date_lib");
-import("Sql_lib");
-import("system.SQLTYPES")
 
-var opentask = db.cell("select count(STATUS) from TASK join AB_KEYWORD_ENTRY on KEYID = STATUS and CONTAINER  = 'TaskStatus' and TITLE = 'new' group by KEYID, AB_KEYWORD_ENTRY.TITLE");                             
+var opentask = db.cell("select count(TASKID) "
+             + " from TASK "
+             + " where STATUS = 'NEW' and EDITOR_CONTACT_ID = '" + EmployeeUtils.getCurrentContactId() + "'");                             
                                   
-result.string(opentask);
+result.string(opentask);
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/opennewtasks/onActionProcess.js b/entity/Analyses_entity/entityfields/opennewtasks/onActionProcess.js
index e1dbd63270723442a80368afbf94557d6f692623..696d1e7e7cf42aea7dd618f8c87b3cca400ce57b 100644
--- a/entity/Analyses_entity/entityfields/opennewtasks/onActionProcess.js
+++ b/entity/Analyses_entity/entityfields/opennewtasks/onActionProcess.js
@@ -1,6 +1,9 @@
+import("Employee_lib");
 import("system.db");
 import("system.neon");
 
-var taskIds = db.table("select TASKID from TASK join AB_KEYWORD_ENTRY on KEYID = STATUS and CONTAINER  = 'TaskStatus' and TITLE = 'new'", "Data_alias")
+var taskIds = db.table("select TASKID  "
+             + " from TASK "
+             + " where STATUS = 'NEW' and EDITOR_CONTACT_ID = '" + EmployeeUtils.getCurrentContactId() + "'", "Data_alias");
 
 neon.openContext("Task", "TaskFilter_view", taskIds, neon.OPERATINGSTATE_SEARCH, null);
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/openoverduetasks/onActionProcess.js b/entity/Analyses_entity/entityfields/openoverduetasks/onActionProcess.js
index b01817317225f10abbfd6d319685fa8132965a62..a4a99abca7e87092c860c0b4345398aaa83615f3 100644
--- a/entity/Analyses_entity/entityfields/openoverduetasks/onActionProcess.js
+++ b/entity/Analyses_entity/entityfields/openoverduetasks/onActionProcess.js
@@ -1,3 +1,4 @@
+import("Employee_lib");
 import("system.vars");
 import("system.datetime");
 import("system.db");
@@ -6,7 +7,9 @@ import("Date_lib");
 import("Sql_lib");
 
 var overduetask = db.table(SqlCondition.begin()
-                                   .andPrepare("TASK.MATURITY_DATE", vars.get("$sys.date"), "# < ?")
-                                   .buildSql("select TASKID from TASK", "1=2"), "Data_alias");
+                    .andPrepare("TASK.MATURITY_DATE", vars.get("$sys.date"), "# < ?")
+                    .and("TASK.EDITOR_CONTACT_ID = '" + EmployeeUtils.getCurrentContactId() + "'")
+                    .and("TASK.STATUS NOT IN ('ENDED', 'ENDED-DONE', 'ENDED-ABANDONED')")
+                    .buildSql("select TASKID from TASK", "1=2"));
 
 neon.openContext("Task", "TaskFilter_view", overduetask, neon.OPERATINGSTATE_SEARCH, null);
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js b/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
index 53c3f09a944fe0289958650a43222d9c005db755..b179962d57663f5da1740a7c60c44832d0483613 100644
--- a/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
+++ b/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
@@ -1,3 +1,4 @@
+import("Employee_lib");
 import("system.db");
 import("system.datetime");
 import("system.result");
@@ -5,9 +6,10 @@ import("system.vars");
 import("Date_lib");
 import("Sql_lib");
 
-
 var overduetask = db.cell(SqlCondition.begin()
                                    .andPrepare("TASK.MATURITY_DATE", vars.get("$sys.date"), "# < ?")
+                                   .and("TASK.EDITOR_CONTACT_ID = '" + EmployeeUtils.getCurrentContactId() + "'")
+                                   .and("TASK.STATUS NOT IN ('ENDED', 'ENDED-DONE', 'ENDED-ABANDONED')")
                                    .buildSql("select count(TASKID) from TASK", "1=2"));
                                                                   
 result.string(overduetask);
diff --git a/entity/Analyses_entity/entityfields/turnover_forecast/valueProcess.js b/entity/Analyses_entity/entityfields/turnover_forecast/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6f89d038debab8b78a11020bdcc2b989341414d
--- /dev/null
+++ b/entity/Analyses_entity/entityfields/turnover_forecast/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.datetime");
+import("system.db");
+import("system.result");
+import("system.vars");
+import("Date_lib");
+import("Sql_lib");
+import("system.SQLTYPES")
+
+var forecast = db.cell(SqlCondition.begin()
+                                    .andPrepare("FORECAST.DATE_START", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER)
+                                    .buildSql("select sum(VOLUME) from FORECAST", "1=2"));
+                                  
+result.string(forecast);
\ No newline at end of file
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index 6f36172e79513e874e73272cc1ccdc7eabe2aec3..5c13950f189eeb6f23a365b179f2d515048778fc 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AnyContact_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AnyContact_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/AnyContact_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -146,6 +147,7 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
     </entityParameter>
     <entityProvider>
       <name>OnlySameCompany</name>
+      <documentation>%aditoprj%/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>28b19d6b-237c-4268-b6c6-323df408c94a</name>
diff --git a/entity/AnyContact_entity/documentation.adoc b/entity/AnyContact_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1d42f60ff4d56e68fc7f6d882656008181437c5e
--- /dev/null
+++ b/entity/AnyContact_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= AnyContact_entity
+
+Displays both a contact and organisation in one entity with the common denominator
\ No newline at end of file
diff --git a/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc b/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8dd8bf7c2b21ee759fdb1d1a27544cc84fcc170d
--- /dev/null
+++ b/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc
@@ -0,0 +1,3 @@
+= AnyContact_entity - OnlySameCompany
+
+Via the parameter "ContactId_param" the entity provides a filtered list of contacts
\ No newline at end of file
diff --git a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
index 72bf4814198ca16718074a516805a6d7c2c1565f..c0688f7572349158469b202d4416f8f856b89fa0 100644
--- a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
@@ -30,4 +30,5 @@ var cond = SqlCondition.begin()
                        .andSqlCondition(conditionPrivateOrganisation)
                        .andPrepareIfSet("CONTACT.ORGANISATION_ID", orgContactId);
 
-result.string(db.translateCondition(cond.build()));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate());
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
index 092996034c1a7593a76ee2e45d5735dafd69b16f..80e6f5e36150261e21027ca14c198bbbbde460fc 100644
--- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod
+++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AppointmentLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AppointmentLink_entity/documentation.adoc</documentation>
   <title>Connection</title>
   <titlePlural>Connections</titlePlural>
   <recordContainer>db</recordContainer>
@@ -48,6 +49,7 @@
       <name>Links</name>
       <targetContextField>OBJECTTYPE</targetContextField>
       <targetIdField>OBJECTID</targetIdField>
+      <documentation>%aditoprj%/entity/AppointmentLink_entity/entityfields/links/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
@@ -135,10 +137,6 @@
           <name>OBJECTTYPE.value</name>
           <recordfield>AB_APPOINTMENTLINK.OBJECT_TYPE</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECTID.displayValue</name>
-          <expression>%aditoprj%/entity/AppointmentLink_entity/recordcontainers/db/recordfieldmappings/objectid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>AB_APPOINTMENTLINKID.value</name>
           <recordfield>AB_APPOINTMENTLINK.AB_APPOINTMENTLINK_ID</recordfield>
diff --git a/entity/AppointmentLink_entity/documentation.adoc b/entity/AppointmentLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c78b5644c66029f07f432b4ca7da7ec7932040b9
--- /dev/null
+++ b/entity/AppointmentLink_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= AppointmentLink_entity
+
+Entity for handling the links to the "Appointment_entity"
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/entityfields/links/documentation.adoc b/entity/AppointmentLink_entity/entityfields/links/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..e612d086c4f8aaf4b9393f95a6c82768d13e9626
--- /dev/null
+++ b/entity/AppointmentLink_entity/entityfields/links/documentation.adoc
@@ -0,0 +1,3 @@
+= AppointmentLink_entity - LinkedAppointments
+
+Provides the information for the "Appointment_entity" to display the links connected to a Appointment
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js b/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
index b603d5545bf136c0f5ab87ec05c4ab83d3ac6cc0..e95adef18a9cb958af3277c59ad305d5d4a786b6 100644
--- a/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
+++ b/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
@@ -1,6 +1,11 @@
-import("system.db");
+import("system.neon");
 import("system.vars");
+import("system.db");
 import("system.result");
-import("Context_lib")
+import("Context_lib");
 
-result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECTTYPE"), vars.get("$field.OBJECTID"))));
\ No newline at end of file
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECTID")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECTTYPE") && vars.get("$field.OBJECTTYPE")) {
+    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECTTYPE"), vars.get("$field.OBJECTID"))));
+}
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js b/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
index d7165d6c76792d065fb967220830dc18f6dfb944..a49c8d231adf901a8380b6aca4d1aed941b13c0a 100644
--- a/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = SqlCondition.begin()
                        .andPrepareVars("AB_APPOINTMENTLINK.APPOINTMENT_ID", "$param.AppointmentId_param")
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/recordcontainers/db/recordfieldmappings/objectid.displayvalue/expression.js b/entity/AppointmentLink_entity/recordcontainers/db/recordfieldmappings/objectid.displayvalue/expression.js
deleted file mode 100644
index 33554680cccd2c3d363443686457c41e0c1c5729..0000000000000000000000000000000000000000
--- a/entity/AppointmentLink_entity/recordcontainers/db/recordfieldmappings/objectid.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index 8df4714f502f274317ac3494694e278133d4b0c0..3b28c8cec5eb986269135ce57b5cf8948f504213 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -200,6 +200,7 @@
     </entityParameter>
     <entityProvider>
       <name>LinkedAppointments</name>
+      <documentation>%aditoprj%/entity/Appointment_entity/entityfields/linkedappointments/documentation.adoc</documentation>
       <recordContainer>jdito</recordContainer>
       <dependencies>
         <entityDependency>
@@ -230,12 +231,16 @@
       <name>ALLDAY</name>
       <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/allday/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>CHECKUP</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
       <name>jdito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
       <contentProcess>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess>
       <onInsert>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onInsert.js</onInsert>
       <onUpdate>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
       <onDelete>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onDelete.js</onDelete>
diff --git a/entity/Appointment_entity/entityfields/begin/valueProcess.js b/entity/Appointment_entity/entityfields/begin/valueProcess.js
index f87cdc03567024fded757914d9ee6b1587f2a258..48c50b4d7e29af1841108d422834f2f7dddcc35a 100644
--- a/entity/Appointment_entity/entityfields/begin/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/begin/valueProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.neon");
 import("system.vars");
 import("system.calendars");
diff --git a/entity/Appointment_entity/entityfields/deleteseries/stateProcess.js b/entity/Appointment_entity/entityfields/deleteseries/stateProcess.js
index 2ca0974708bebf947414e02acea304389cdad456..36f56dfc2b21096558f40d38a2a0af3ff6bab8d0 100644
--- a/entity/Appointment_entity/entityfields/deleteseries/stateProcess.js
+++ b/entity/Appointment_entity/entityfields/deleteseries/stateProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.tools");
 import("system.vars");
 import("system.result");
diff --git a/entity/Appointment_entity/entityfields/linkedappointments/documentation.adoc b/entity/Appointment_entity/entityfields/linkedappointments/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0d787973d67000ab1724480d6142e15f2c41688b
--- /dev/null
+++ b/entity/Appointment_entity/entityfields/linkedappointments/documentation.adoc
@@ -0,0 +1,3 @@
+= Appointment_entity - LinkedAppointments
+
+Provides the information for the context, for example Person - Display all the appointments for the person
\ No newline at end of file
diff --git a/entity/Appointment_entity/entityfields/organizer/valueProcess.js b/entity/Appointment_entity/entityfields/organizer/valueProcess.js
index 6b6bc2ad590eb64263ab1584a2e78b7c1e3bfaea..f299a402079bfaa9dd5348921405bdee8ce64db6 100644
--- a/entity/Appointment_entity/entityfields/organizer/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/organizer/valueProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.neon");
 import("system.vars");
 import("system.calendars");
diff --git a/entity/Appointment_entity/entityfields/partstatactiongroup/stateProcess.js b/entity/Appointment_entity/entityfields/partstatactiongroup/stateProcess.js
index 015a529d23da92bac57d9bcfb999a727bd59b0b2..86a064a2eaffcb5f32075ec037868d645950a0eb 100644
--- a/entity/Appointment_entity/entityfields/partstatactiongroup/stateProcess.js
+++ b/entity/Appointment_entity/entityfields/partstatactiongroup/stateProcess.js
@@ -1,5 +1,4 @@
 import("system.calendars");
-import("system.logging");
 import("system.result");
 import("system.vars");
 import("system.tools");
diff --git a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
index 2d95082b91c6b532bed64f995ff13141ad8c9c27..ad79e4da1a4442679263baee900df37040397eac 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
@@ -1,5 +1,5 @@
+import("Employee_lib");
 import("system.tools");
-import("system.logging");
 import("system.db");
 import("Sql_lib");
 import("system.result");
@@ -9,12 +9,9 @@ import("system.datetime");
 import("system.eMath");
 import("system.util");
 import("system.neon");
-import("system.entities")
-
 
 var cond = SqlCondition.begin();
 var appointmentUids;
-var idscond;
 
 if(vars.get("$local.idvalues") != null && vars.get("$local.idvalues") != "")
 {
@@ -24,24 +21,22 @@ if(vars.get("$local.idvalues") != null && vars.get("$local.idvalues") != "")
 
 else if(vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
 {
-    var contactid = tools.getCurrentUser()["params"]["contactID"];
+    var contactid = EmployeeUtils.getCurrentContactId();
     
     cond.andPrepareIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", contactid)
-    idscond = db.translateCondition(cond.build("1 = 1"));
-   
-    appointmentUids = db.table("select APPOINTMENT_ID from AB_APPOINTMENTLINK where " + idscond);
+
+    appointmentUids = db.table(cond.buildSql("select APPOINTMENT_ID from AB_APPOINTMENTLINK"));
     result.object(buildEntriesFromUids(appointmentUids));
 }
 
 /**
- * Will be triggert if a module needs AppointmentFilter_view
+ * Will be triggered if a module needs AppointmentFilter_view
  */
 else if(vars.getString("$param.LinkedObjectId_param") != undefined)
 {
     cond.andPrepareVars("AB_APPOINTMENTLINK.OBJECT_ROWID", "$param.LinkedObjectId_param")
-    idscond = db.translateCondition(cond.build("1 = 1"));
    
-    appointmentUids = db.table("select APPOINTMENT_ID from AB_APPOINTMENTLINK where " + idscond);
+    appointmentUids = db.table(cond.buildSql("select APPOINTMENT_ID from AB_APPOINTMENTLINK"));
     result.object(buildEntriesFromUids(appointmentUids));
 }
 /**
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
index a10d6981b7cb7688e62071048e10588f7d1cfc58..426f6fef57e738300c2a731a791bd0fc118feca3 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
@@ -20,7 +20,6 @@ if (vars.exists("$param.Entry_param"))
      */
     var cond = SqlCondition.begin();
     cond.andPrepareIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", entry[calendars.ID])
-    var idscond = db.translateCondition(cond.build("1 = 2"));
     
-    db.deleteData("AB_APPOINTMENTLINK", idscond);
+    db.deleteData("AB_APPOINTMENTLINK", cond.build("1 = 2"));
 }
\ No newline at end of file
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
index 0fae64a0fc169097998751a3476c91180f32f7a6..a109e86f9257c3bbc84bea6922dad55d93f14f2c 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.neon");
 import("system.calendars");
 import("system.vars");
diff --git a/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js b/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..63e41b300e041444be45983da84cc9c3bd51507e
--- /dev/null
+++ b/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js
@@ -0,0 +1,32 @@
+import("system.db");
+import("Employee_lib");
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+var rowCount = "0";
+var cond = SqlCondition.begin();
+
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+    rowCount = "1";
+else if (vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
+{
+    cond.andPrepareIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", EmployeeUtils.getCurrentContactId());
+    rowCount = db.cell(cond.buildSql("select count(APPOINTMENT_ID) from AB_APPOINTMENTLINK", "1=1"));
+}
+
+/**
+ * Will be triggered if a module needs AppointmentFilter_view
+ */
+else if (vars.getString("$param.LinkedObjectId_param") != undefined)
+{
+    cond.andPrepareVars("AB_APPOINTMENTLINK.OBJECT_ROWID", "$param.LinkedObjectId_param");
+    rowCount = db.cell(cond.buildSql("select count(APPOINTMENT_ID) from AB_APPOINTMENTLINK", "1=1"));
+}
+/**
+ * Will be used, if the user is operating the calendar.
+ */
+else if (vars.exists("$param.Entry_param") && vars.get("$param.Entry_param"))
+    rowCount = "1";
+
+result.string(rowCount);
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
index 7d902eb40b03b991a7849f18053fed0c49458420..136544afa3ac4bf4b713456157294bbf5869cab3 100644
--- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod
+++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>AttributeRelation_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AttributeRelation_entity/documentation.adoc</documentation>
   <title>Attribute</title>
   <grantDeleteProcess>%aditoprj%/entity/AttributeRelation_entity/grantDeleteProcess.js</grantDeleteProcess>
   <titlePlural>Attributes</titlePlural>
@@ -29,6 +30,7 @@
     </entityParameter>
     <entityProvider>
       <name>TreeProvider</name>
+      <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>e0a7a4bc-ec7f-4f09-9b94-cbeb328cd7b8</name>
@@ -161,6 +163,7 @@
     </entityParameter>
     <entityProvider>
       <name>AttributeRelations</name>
+      <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>69560cc2-d92a-453c-9e64-fb712a538c4f</name>
@@ -285,7 +288,7 @@
       <expose v="true" />
     </entityParameter>
     <entityParameter>
-      <name>IsTheme_param</name>
+      <name>GetTheme_param</name>
       <expose v="true" />
     </entityParameter>
   </entityFields>
@@ -322,6 +325,18 @@
         <jDitoRecordFieldMapping>
           <name>ATTRIBUTE_TYPE.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/AttributeRelation_entity/documentation.adoc b/entity/AttributeRelation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..292349bb835fa328bc38b9bd409290075e60e9fb
--- /dev/null
+++ b/entity/AttributeRelation_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= AttributeRelation_entity
+
+Entity for handling the relation and the value when its set in an module
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc b/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8fd9b94d8459ea894dd74b0fe33f1ab58ba3458a
--- /dev/null
+++ b/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc
@@ -0,0 +1,3 @@
+= Attribute_entity - AttributeRelations
+
+Provides the information of all relations / Returns a list of relations
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc b/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a3e5357174df20d7c7704eba616a1722e2e29882
--- /dev/null
+++ b/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc
@@ -0,0 +1,3 @@
+= Attribute_entity - TreeProvider
+
+Provides the information for the attribute relation to display it via tree
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/contentProcess.js b/entity/AttributeRelation_entity/recordcontainers/jdito/contentProcess.js
index 691df5362c933e7f12bbad797908bfb221ff8cf9..74b4884a0568064dc50b9da5203ce04c79f36a10 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/contentProcess.js
@@ -8,46 +8,72 @@ import("Attribute_lib");
 import("Sql_lib");
 
 var objectType = vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param");
-var rowId = vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param");
+var objectRowId = vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param");
 
-//getTree: if true, the attribute groups are loaded as parents
-var getTree = vars.exists("$param.GetTree_param") && vars.getString("$param.GetTree_param") == "true";
+var idvalues = vars.exists("$local.idvalues") && vars.get("$local.idvalues");
 
-//showEmpty: if true, all selectable attributes are loaded as records, even if they don't have a attributeRelation
+var getTree = vars.exists("$param.GetTree_param") && vars.getString("$param.GetTree_param") == "true";
+var getTheme = vars.exists("$param.IsTheme_param") && vars.getString("$param.IsTheme_param") == "true";
 var showEmpty = vars.exists("$param.ShowEmpty_param") && vars.getString("$param.ShowEmpty_param") == "true";
+var displaySimpleName = vars.exists("$param.DisplaySimpleName_param") && vars.getString("$param.DisplaySimpleName_param") == "true";
+
+var defaultFields = [
+    "AB_ATTRIBUTERELATIONID",
+    "AB_ATTRIBUTE.AB_ATTRIBUTEID", 
+    "AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", 
+    "AB_ATTRIBUTE.ATTRIBUTE_TYPE", 
+    "AB_ATTRIBUTE.ATTRIBUTE_NAME", 
+    "AB_ATTRIBUTE.DROPDOWNDEFINITION", 
+    "COMBOVAL.ATTRIBUTE_NAME",
+    "AB_ATTRIBUTERELATION.DATE_NEW",
+    "AB_ATTRIBUTERELATION.USER_NEW",
+    "AB_ATTRIBUTERELATION.DATE_EDIT",
+    "AB_ATTRIBUTERELATION.USER_EDIT"
+];
 
-var displaySimpleName = vars.exists("$param.DisplaySimpleName_param") && vars.get("$param.DisplaySimpleName_param");
+//these fields hold the attributeRelation value, depending on the attribute type
+var valueFields = AttributeTypeUtil.getAllDatabaseFields();
+var attributeSql = SqlBuilder.begin()
+    .select(defaultFields.concat(valueFields))
+    .from("AB_ATTRIBUTE");
 
-var sqlCondition = new SqlCondition(); //where-condition (condition for the Attribute)
-var joinCondition = new SqlCondition(); //condition for the joined values (for AttributeRelation)
-//=> these are two distinct conditions because if showEmpty is true, a left join is used for the relations
+var attributeCond = SqlCondition.begin(); //where-condition (condition for the Attribute)
+var attributeRelationCond = SqlCondition.begin()
+    .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"); //condition for the joined values (for AttributeRelation)
 
-var possibleAttributes = AttributeUtil.getPossibleAttributes(objectType);
+var possibleAttributes;
 
-if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+if (idvalues)
 {
-    let idVals = vars.get("$local.idvalues");
-    let attrId = idVals.length === 1 && idVals[0].split(",")[1];
+    let attrId = idvalues.length === 1 && idvalues[0].split(",")[1];
     if (!attrId)
         showEmpty = false;
     
     if (showEmpty)
-        sqlCondition.andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attrId);
+        attributeCond.andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attrId);
     else
     {
-        sqlCondition.andIn("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", idVals);
-        rowId = null;
+        attributeCond.andIn("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", idvalues.map(function(pId) 
+        {
+            return pId[0] == "," ? pId.split(",")[1] : pId;
+        }));
+        objectRowId = null;
     }
     getTree = false;
 }
-else if (showEmpty || rowId)
+else if (showEmpty || objectRowId)
 {
+    if (getTheme)
+        attributeCond.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.THEME);
+    else
+        attributeCond.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.THEME, "# != ?");
     
     if (showEmpty)
     {
+        possibleAttributes = AttributeUtil.getPossibleAttributes(objectType);
         let filtered = vars.exists("$param.FilteredAttributeIds_param") && vars.getString("$param.FilteredAttributeIds_param");
         
-        sqlCondition.andIn("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes);
+        attributeCond.andIn("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes);
     }
     if (vars.exists("$param.FilteredAttributeIds_param") && vars.getString("$param.FilteredAttributeIds_param"))
     {
@@ -60,54 +86,36 @@ else if (showEmpty || rowId)
         filteredCondition.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
     
         // return nothing if filteredAttributeIds is an empty array. (--> and 1=2)
-        sqlCondition.andSqlCondition(filteredCondition, "1=2");
+        attributeCond.andSqlCondition(filteredCondition, "1=2");
     }
 }
 
-if (rowId)
+if (objectRowId)
 {
-    joinCondition.andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", rowId);
-    if (objectType != null)
-        joinCondition.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", objectType);
-    
-    // add condition to match all returned by joins (override default 1=2 of build)
-    sqlCondition.and("1=1");
+    attributeRelationCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", objectRowId);
+    if (objectType)
+        attributeRelationCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", objectType);
 }
 
-var isTheme = vars.exists("$param.IsTheme_param") && vars.getString("$param.IsTheme_param") == "true";
-if (isTheme)
-    sqlCondition.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.THEME);
-else
-    sqlCondition.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.THEME, "# != ?");
-
-joinCondition.and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID");
 
-var defaultFields = [
-    "AB_ATTRIBUTERELATIONID",
-    "AB_ATTRIBUTE.AB_ATTRIBUTEID", 
-    "AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", 
-    "AB_ATTRIBUTE.ATTRIBUTE_TYPE", 
-    "AB_ATTRIBUTE.ATTRIBUTE_NAME", 
-    "AB_ATTRIBUTE.DROPDOWNDEFINITION", 
-    "COMBOVAL.ATTRIBUTE_NAME"
-];
-//these fields hold the attributeRelation value, depending on the attribute type
-var valueFields = AttributeTypeUtil.getAllDatabaseFields();
-var attributeSql = SqlBuilder.begin()
-    .select(defaultFields.concat(valueFields))
-    .from("AB_ATTRIBUTE")
-    .where(sqlCondition);
+attributeSql.where(attributeCond);
     
 if (showEmpty)
-    attributeSql.leftJoin("AB_ATTRIBUTERELATION", joinCondition.build("1=2"));
+    attributeSql.leftJoin("AB_ATTRIBUTERELATION", attributeRelationCond);
 else
-    attributeSql.join("AB_ATTRIBUTERELATION", joinCondition.build("1=2"));
+    attributeSql.join("AB_ATTRIBUTERELATION", attributeRelationCond);
 
-attributeSql.leftJoin("AB_ATTRIBUTE", "COMBOVAL.AB_ATTRIBUTEID = " + $AttributeTypes.COMBO.databaseField, "COMBOVAL");
+attributeSql.leftJoin("AB_ATTRIBUTE", "COMBOVAL.AB_ATTRIBUTEID = " + $AttributeTypes.COMBO.databaseField, "COMBOVAL")
 
-var countCheck = {};
+//Builds an object containing the minimal counts of the attributes, this is required for
+//checking if an attribute is used not often enough or just often enough. When this is the case,
+//deletion of this attributeRelation will be prohibited.
+var minCountInsurance = {};
 if (getTree)
 {
+    if (!possibleAttributes)
+        possibleAttributes = AttributeUtil.getPossibleAttributes(objectType);
+    
     let minUsages = db.table(SqlCondition.begin()
         .andIn("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", possibleAttributes)
         .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", objectType)
@@ -119,74 +127,113 @@ if (getTree)
             count : 0,
             min : usage[1]
         };
-    }, countCheck);
+    }, minCountInsurance);
 }
 
-var attributeValues = db.table(attributeSql.build()).map(function (row) 
-{
-    var attributeId = row[1];
-    var attributeName = translate.text(row[4]);
-    var type = row[3].trim();
-    if (!getTree && !displaySimpleName && row[2])
+var attrRelations = db.table(attributeSql.build()).map(
+    function (row) 
     {
-        let parentName = AttributeUtil.getFullAttributeName(row[2]);
-        attributeName = (parentName ? parentName + " / " : "") + attributeName;
+        var [attrRelId, attrId, attrParentId, attrType, attrName, dropDownDef, comboViewVal, dateNew, userNew, dateEdit, userEdit] = row;
+        attrName = translate.text(attrName);
+        attrType = attrType.trim();
+        if (!getTree && !displaySimpleName && attrParentId)
+        {
+            let parentName = AttributeUtil.getFullAttributeName(attrParentId);
+            attrName = (parentName ? parentName + " / " : "") + attrName;
+        }
+        var value = row[AttributeTypeUtil.getTypeColumnIndex(attrType) + defaultFields.length];
+        var viewValue;
+        if (attrType == $AttributeTypes.COMBO)
+            viewValue = translate.text(comboViewVal);
+        else 
+            viewValue = AttributeTypeUtil.getAttributeViewValue(attrType, value, dropDownDef);
+
+        if (attrId in minCountInsurance)
+            minCountInsurance[attrId].count++;
+        
+        //TODO: what should be the uid if showEmpty is true?
+        //                                    V-- set "," to mark this as new generated UUID
+        return [
+            attrRelId || util.getNewUUID() + "," + attrId, 
+            attrParentId, 
+            value, 
+            viewValue, 
+            attrId, 
+            attrName, 
+            "", 
+            attrType.trim(), 
+            dateNew, 
+            userNew, 
+            dateEdit, 
+            userEdit
+        ];
     }
-    var value = row[AttributeTypeUtil.getTypeColumnIndex(row[3]) + defaultFields.length];
-    var viewValue;
-    if (type == $AttributeTypes.COMBO)
-        viewValue = translate.text(row[6]);
-    else 
-        viewValue = AttributeTypeUtil.getAttributeViewValue(type, value, row[5]);
-    
-    if (attributeId in countCheck)
-        countCheck[attributeId].count++;
-    
-    //TODO: what should be the uid if showEmpty is true?
-    //                 V-- set "," to mark this as new generated UUID
-    return [row[0] || util.getNewUUID() + "," + attributeId, row[2], value, viewValue, attributeId, attributeName, "", row[3].trim()];
-});
+);
 
-for (let i = 0; i < attributeValues.length; i++)
-{
-    let attrId = attributeValues[i][4];
-    if (attrId in countCheck && countCheck[attrId].min >= countCheck[attrId].count)
-        attributeValues[i][6] = "true";
-}
+ _protectMinCountAttributes(attrRelations, minCountInsurance);
 
-var parentAttributes = [];
-var attributeObj = {}; //object of attribute ids to avoid duplicates
+//object of attribute ids to avoid duplicates (more than one attribute can have the same parent)
+var attrCatalog = {}; 
 if (getTree)
-    _fetchAttributes(attributeValues.map(function (row) {return row[1]}));
+    attrRelations = _buildAttributeTree(attrRelations);
 
-allAttributes = TreeUtils.sortArrayForTree(parentAttributes, 0, 1).concat(attributeValues);
+result.object(attrRelations);
 
-result.object(allAttributes);
+/*
+ * loads the parents for a tree
+ */
+function _buildAttributeTree (pAttrRelations)
+{
+    var parentAttributes = [];
+    _fetchParentAttributes(pAttrRelations.map(function (row) {return row[1]}), parentAttributes);
+    return TreeUtils.sortArrayForTree(parentAttributes, 0, 1).concat(pAttrRelations);
+}
 
 /*
  * recursive function that loads all superordinate attributes for the tree
  */
-function _fetchAttributes (pAttributeIds)
+function _fetchParentAttributes (pAttributeIds, pParentAttributes)
 {
-    var sqlCondition = SqlCondition.begin();
+    var attributeCond = SqlCondition.begin();
     var nextIds = [];
     pAttributeIds.forEach(function (id)
     {
         if (!(id in this))
-            sqlCondition.orPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", id);
-    }, attributeObj);
-    db.table(sqlCondition.buildSql("select AB_ATTRIBUTEID, ATTRIBUTE_PARENT_ID, ATTRIBUTE_NAME from AB_ATTRIBUTE", "1=2"))
-        .forEach(function (row)
+            attributeCond.orPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", id);
+    }, attrCatalog);
+    db.table(attributeCond.buildSql("select AB_ATTRIBUTEID, ATTRIBUTE_PARENT_ID, ATTRIBUTE_NAME from AB_ATTRIBUTE", "1=2"))
+        .forEach(function ([attrId, parentId, attrName])
             {
-                this[row[0]] = true; //make entry in attributeObj to avoid duplicates
-                if (row[1])
-                    nextIds.push(row[1]);
-                else
-                    row[1] = null;
-                row[2] = translate.text(row[2]); //translate attribute name
-                parentAttributes.push([row[0], row[1], "", "", "", row[2], "true", ""]);
-            }, attributeObj);
+                this[attrId] = true; //make entry in attrCatalog to avoid duplicates
+                if (parentId)
+                    nextIds.push(parentId);
+                
+                pParentAttributes.push([
+                    attrId, 
+                    parentId, 
+                    "", 
+                    "", 
+                    "", 
+                    translate.text(attrName),  //translate attribute name
+                    "true", 
+                    "", 
+                    "", 
+                    "", 
+                    "", 
+                    ""
+                ]);
+            }, attrCatalog);
             
     if (nextIds.length)
-        _fetchAttributes(nextIds);
+        _fetchParentAttributes(nextIds, pParentAttributes);
+}
+
+function _protectMinCountAttributes (pAttrRelations, pMinCountInsurance)
+{
+    for (let i = 0; i < pAttrRelations.length; i++)
+    {
+        let attrId = pAttrRelations[i][4];
+        if (attrId in pMinCountInsurance && pMinCountInsurance[attrId].min >= pMinCountInsurance[attrId].count)
+            pAttrRelations[i][6] = "true";
+    }
 }
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onDelete.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onDelete.js
index 5323125f94e32ab1cc275eeb69922f0c574265c6..607a023f25cbeff1e916650381ecf5dfa3bb42bc 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onDelete.js
@@ -7,5 +7,4 @@ var rowData = vars.get("$local.rowdata");
 if (rowData["AB_ATTRIBUTE_ID.value"] && rowData["VALUE.value"])
 {
     db.deleteData("AB_ATTRIBUTERELATION", SqlCondition.equals("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", vars.get("$local.uid"), "1=2"));
-}
-neon.refresh();
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
index c0c1e90701b86f5651e518b6b188813182f82f7a..d082f34bf911e6b18d565cc873e5b1bb00c94055 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js
@@ -14,21 +14,22 @@ var columns = [
     "USER_NEW"
 ];
 
-var uid = vars.get("$field.UID");
+var rowdata = vars.get("$local.rowdata");
+var uid = rowdata["UID.value"];
 var values = [
     uid[0] == "," ? uid.substr(1) : uid, // if first char is "," it is a newly generated UUID
-    vars.get("$field.AB_ATTRIBUTE_ID"),
+    rowdata["AB_ATTRIBUTE_ID.value"],
     vars.get("$param.ObjectRowId_param"),
     vars.get("$param.ObjectType_param"),
-    vars.get("$field.DATE_NEW"),
-    vars.get("$field.USER_NEW")
+    rowdata["DATE_NEW.value"],
+    rowdata["USER_NEW.value"]
 ];
-var type = AttributeUtil.getAttributeType(vars.get("$field.AB_ATTRIBUTE_ID"));
+var type = AttributeUtil.getAttributeType(rowdata["AB_ATTRIBUTE_ID.value"]);
 var valueField = AttributeTypeUtil.getDatabaseField(type);
 if (valueField)
 {
     columns.push(valueField);
-    values.push(vars.get("$field.VALUE"));
+    values.push(rowdata["VALUE.value"]);
 }
 db.insertData("AB_ATTRIBUTERELATION", columns, null, values);
 
diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
index 682e3eea290e822bba2dd1ffbfa8d04edd68dd1a..493d61541c3c9e2825e7c3e030445184c81968ca 100644
--- a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js
@@ -5,7 +5,9 @@ import("system.db");
 import("system.vars");
 import("Attribute_lib");
 
-var type = AttributeUtil.getAttributeType(vars.get("$field.AB_ATTRIBUTE_ID"));
+var rowdata = vars.get("$local.rowdata");
+var attributeId = rowdata["AB_ATTRIBUTE_ID.value"]
+var type = AttributeUtil.getAttributeType(attributeId);
 var columns, values;
 var uid = vars.get("$local.uid").split(",");
 
@@ -18,9 +20,9 @@ if (uid.length === 1)
         "USER_EDIT"
     ];
     values = [
-        vars.get("$field.AB_ATTRIBUTE_ID"),
-        vars.get("$field.DATE_EDIT"),
-        vars.get("$field.USER_EDIT")
+        attributeId,
+        rowdata["DATE_EDIT.value"],
+        rowdata["USER_EDIT.value"]
     ];
 
     var dbFields = AttributeTypeUtil.getAllDatabaseFields();
@@ -29,10 +31,10 @@ if (uid.length === 1)
         columns.push(row);
         values.push(""); //set every field but the correct value field to null
     });
-    values[AttributeTypeUtil.getTypeColumnIndex(type) + 3] = vars.get("$field.VALUE");
+    values[AttributeTypeUtil.getTypeColumnIndex(type) + 3] = rowdata["VALUE.value"];
 
     db.updateData("AB_ATTRIBUTERELATION", columns, null, values, 
-        SqlCondition.equals("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", vars.get("$field.UID"), "1=2"));
+        SqlCondition.equals("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", uid[0], "1=2"));
 }
 else
 {
@@ -47,7 +49,7 @@ else
     
     values = [
         uid[0], // if first char is "," it is a newly generated UUID
-        vars.get("$field.AB_ATTRIBUTE_ID"),
+        attributeId,
         vars.get("$param.ObjectRowId_param"),
         vars.get("$param.ObjectType_param"),
         vars.get("$sys.date"),
diff --git a/entity/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
index f585a185e5427229444a837f3d15b2e53e9b7dbd..c29a1ebdc5aa95479078bb99fffbddc92f7338ca 100644
--- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod
+++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
@@ -32,6 +32,7 @@
     </entityField>
     <entityProvider>
       <name>SpecificAttribute</name>
+      <documentation>%aditoprj%/entity/AttributeUsage_entity/entityfields/specificattribute/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
@@ -70,7 +71,7 @@
       <dependency>
         <name>dependency</name>
         <entityName>Context_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
+        <fieldName>Exclusive</fieldName>
       </dependency>
       <children>
         <entityParameter>
@@ -78,12 +79,12 @@
           <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/getallcontexts_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
-          <name>UseExclusives_param</name>
-          <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/useexclusives_param/valueProcess.js</valueProcess>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/blacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
-          <name>ExclusiveContexts_param</name>
-          <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/exclusivecontexts_param/valueProcess.js</valueProcess>
+          <name>InvertBlacklist_param</name>
+          <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
diff --git a/entity/AttributeUsage_entity/documentation.adoc b/entity/AttributeUsage_entity/documentation.adoc
index 21f956b435a2e884450ee597a201e0e3c4c17867..798df3873b89b7fa113913b963a1586703307dd7 100644
--- a/entity/AttributeUsage_entity/documentation.adoc
+++ b/entity/AttributeUsage_entity/documentation.adoc
@@ -1,6 +1,5 @@
-Attribute Usage
-===============
-
-----
-an entity for defining in what contexts an attribute can be used
+= AttributeUsage_entity
+
+----
+an entity for defining in what contexts an attribute can be used
 ----
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/context/children/blacklist_param/valueProcess.js b/entity/AttributeUsage_entity/entityfields/context/children/blacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e85628ab0e9f4d61857da5f73c5461afe5f75de
--- /dev/null
+++ b/entity/AttributeUsage_entity/entityfields/context/children/blacklist_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("Attribute_lib");
+import("system.result");
+
+result.object(AttributeUtil.getPossibleUsageContexts());
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/context/children/exclusivecontexts_param/valueProcess.js b/entity/AttributeUsage_entity/entityfields/context/children/exclusivecontexts_param/valueProcess.js
deleted file mode 100644
index a304ae418593bf3e837ae999f81e3507125c0e16..0000000000000000000000000000000000000000
--- a/entity/AttributeUsage_entity/entityfields/context/children/exclusivecontexts_param/valueProcess.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("system.result");
-
-result.object([
-    "Organisation",
-    "Person",
-    "Contract",
-    "Product",
-    "Activity",
-    "Offer",
-    "Order",
-    "Employee",
-    "Salesproject",
-    "Campaign",
-    "DocumentTemplate",
-    "SupportTicket"
-]);
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/context/children/useexclusives_param/valueProcess.js b/entity/AttributeUsage_entity/entityfields/context/children/invertblacklist_param/valueProcess.js
similarity index 100%
rename from entity/AttributeUsage_entity/entityfields/context/children/useexclusives_param/valueProcess.js
rename to entity/AttributeUsage_entity/entityfields/context/children/invertblacklist_param/valueProcess.js
diff --git a/entity/AttributeUsage_entity/entityfields/specificattribute/documentation.adoc b/entity/AttributeUsage_entity/entityfields/specificattribute/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d8e6cdfea15b5813fb37754a038aff4a464e7712
--- /dev/null
+++ b/entity/AttributeUsage_entity/entityfields/specificattribute/documentation.adoc
@@ -0,0 +1,4 @@
+= AttributeUsage_entity - SpecificAttribute
+
+Returns the information for a specific Attribute.
+When you want a list of all AtributeUsage then use the #Provider
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js b/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
index f28818dcfa611f2cdae014095414c5ce2383a129..be0295177bfe08e538b7658becebe44a2991f8db 100644
--- a/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
@@ -1,7 +1,8 @@
+import("Sql_lib");
+import("system.db");
 import("system.result");
-import("system.vars");
 
-if(vars.exists("$param.AttributeId_param") && vars.get("$param.AttributeId_param"))
-    result.string("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = ('" + vars.getString("$param.AttributeId_param") + "')");  
-else
-    result.string("1 = 2");  
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin()
+        .andPrepareVars("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", "$param.AttributeId_param")
+        .translate("1=2"));  
diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod
index cc99164ec880429153f2d3fda1eaf2140fb7c9c6..a2dfefe141cb68badc759478f0df907e1a99581a 100644
--- a/entity/Attribute_entity/Attribute_entity.aod
+++ b/entity/Attribute_entity/Attribute_entity.aod
@@ -240,21 +240,6 @@
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
-    <entityActionGroup>
-      <name>AttributeActions</name>
-      <children>
-        <entityActionField>
-          <name>newChildAttribute</name>
-          <title>New attribute</title>
-          <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/onActionProcess.js</onActionProcess>
-          <isMenuAction v="true" />
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:FILE_TREE_SMALL</iconId>
-          <tooltipProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/tooltipProcess.js</tooltipProcess>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityParameter>
       <name>GetGroups_param</name>
       <expose v="true" />
@@ -318,6 +303,7 @@
       <name>ICON</name>
       <colorProcess>%aditoprj%/entity/Attribute_entity/entityfields/icon/colorProcess.js</colorProcess>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -344,31 +330,74 @@
       <name>expanded</name>
       <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/expanded/valueProcess.js</valueProcess>
     </entityField>
-    <entityActionField>
-      <name>openAdminView</name>
-      <title>Open admin view</title>
-      <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CURLY_BRACKETS</iconId>
-      <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/openadminview/stateProcess.js</stateProcess>
-    </entityActionField>
     <entityField>
       <name>DROPDOWNFILTER</name>
       <title>Filter</title>
       <contentType>FILTER_TREE</contentType>
+      <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/dropdownfilter/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
       <name>AttributeTypes_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityActionField>
-      <name>openDetails</name>
-      <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/opendetails/onActionProcess.js</onActionProcess>
-    </entityActionField>
     <entityParameter>
       <name>ObjectRowId_param</name>
-      <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/objectrowid_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>USAGE_FILTER</name>
+      <title>Usage</title>
+      <consumer>Contexts</consumer>
+    </entityField>
+    <entityConsumer>
+      <name>Contexts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>GetAllContexts_param</name>
+          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>InvertBlacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityActionGroup>
+      <name>AttributeActions</name>
+      <children>
+        <entityActionField>
+          <name>newChildAttribute</name>
+          <title>New attribute</title>
+          <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:FILE_TREE_SMALL</iconId>
+          <tooltipProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityActionField>
+      <name>openDetails</name>
+      <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/opendetails/onActionProcess.js</onActionProcess>
+      <state>INVISIBLE</state>
+    </entityActionField>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -421,6 +450,10 @@
         <jDitoRecordFieldMapping>
           <name>FULL_ATTRIBUTE_NAME.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USAGE_FILTER.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/Attribute_entity/documentation.adoc b/entity/Attribute_entity/documentation.adoc
index 645cba4e8c48f205c49c9d93d3ae80343ac6d6a7..c791a9b9cea3cbb3d60835b5c63433ac5a45474e 100644
--- a/entity/Attribute_entity/documentation.adoc
+++ b/entity/Attribute_entity/documentation.adoc
@@ -1,8 +1,7 @@
-Attribute
-=========
-
-----
-an entity for the definition of attributes
-----
-
+= Attribute_entity
+
+----
+an entity for the definition of attributes
+----
+
 The Attribute entity is for creating new attributes that can be used in different other entitys.
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
index 8c6709ec5b1ce2236dbb00e36c756b62b7e6bae4..6497e4914e1a22e0791b90958b14e81632de4976 100644
--- a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
+++ b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.db");
 import("system.neon");
 import("system.result");
@@ -17,7 +16,7 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.r
         var hasSubordinate = db.cell(SqlCondition.begin()
             .andPrepareVars("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", "$field.UID")
             .buildSql(
-                "select count(*) from AB_ATTRIBUTE", "1=2" //TODO: is there a way exists could be used?
+                "select count(*) from AB_ATTRIBUTE", "1=2" //TODO: is there a way exists could be used in all dbms?
                 )
             ) != "0";
         if (hasSubordinate)
diff --git a/entity/Attribute_entity/entityfields/contexts/children/blacklist_param/valueProcess.js b/entity/Attribute_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e85628ab0e9f4d61857da5f73c5461afe5f75de
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("Attribute_lib");
+import("system.result");
+
+result.object(AttributeUtil.getPossibleUsageContexts());
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js b/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js b/entity/Attribute_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/dropdownfilter/valueProcess.js b/entity/Attribute_entity/entityfields/dropdownfilter/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..83bdb17d2622ba877e06fa3ecca9d7d80cd57dc1
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/dropdownfilter/valueProcess.js
@@ -0,0 +1,14 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Attribute_lib");
+
+var thisValueNotValid = "{\"entity\":\"\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+
+if (vars.get("$field.DROPDOWNDEFINITION") == $AttributeTypes.OBJECTSELECTION 
+    && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && (vars.get("$this.value") == null || vars.get("$this.value") == thisValueNotValid)) 
+{
+    var entity = vars.getString("$field.DROPDOWNDEFINITION");
+    var condJson = JSON.stringify({entity: entity, filter: {type: "group", operator: "AND", childs: []}});
+    result.string(condJson);
+}
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/keywordattributetypes/children/whitelistids_param/valueProcess.js b/entity/Attribute_entity/entityfields/keywordattributetypes/children/whitelistids_param/valueProcess.js
index 7b6ff8c9c50d32b31512f753bbbb26440fc24382..2e9ce3a224e9ae6d35b6e7c591f1d0fe622de0de 100644
--- a/entity/Attribute_entity/entityfields/keywordattributetypes/children/whitelistids_param/valueProcess.js
+++ b/entity/Attribute_entity/entityfields/keywordattributetypes/children/whitelistids_param/valueProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.db");
 import("system.neon");
 import("system.result");
@@ -20,6 +19,5 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.re
             if ($AttributeTypes[attrType].toString() != $AttributeTypes.COMBOVALUE.toString())
                 possibleTypes.push($AttributeTypes[attrType].toString());
     }
-    logging.log(JSON.stringify(possibleTypes, null, "\t"))
     result.object(possibleTypes);
 }
\ No newline at end of file
diff --git a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
index e4fd9e63f9acbce13f072c6c5e3be46ed3285263..80d83fad229b4861db91aace94c85aeddfab0983 100644
--- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
@@ -86,7 +86,26 @@ if (vars.exists("$local.filter") && vars.get("$local.filter"))
 {
     var filter = vars.get("$local.filter");
     if (filter.filter)
-        condition.andSqlCondition(JditoFilterUtils.getSqlCondition(filter.filter, "AB_ATTRIBUTE"));
+        condition.andSqlCondition(JditoFilterUtils.getSqlCondition(filter.filter, "AB_ATTRIBUTE", undefined, {
+            // special filter for usage
+            USAGE_FILTER : function (pValue, pOperator)
+            {
+                var cond = new SqlCondition();
+                
+                switch (pOperator)
+                {
+                    case "EQUAL":
+                        return cond.andPrepare(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue, "exists (select 1 from AB_ATTRIBUTEUSAGE attrUse where attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID and # = ?)");
+                    case "NOT_EQUAL":
+                        return cond.andPrepare(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue, "not exists (select 1 from AB_ATTRIBUTEUSAGE attrUse where attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID and # = ?)");
+                    case "ISNULL":
+                        return cond.and("not exists (select 1 from AB_ATTRIBUTEUSAGE attrUse where attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTEID)");
+                    case "ISNOTNULL":
+                        return cond.and("exists (select 1 from AB_ATTRIBUTEUSAGE attrUse where attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTEID)");
+                }
+                return cond;
+            }
+        }));
 }
 
 var usages;
@@ -163,6 +182,7 @@ function _buildAttributeTable (pAttributes, pUsages)
         }
         rowData[10] = _getFullName(rowData[1]); //parent full name
         rowData[11] = _getFullName(rowData[0], displaySimpleName);
+        rowData[12] = "dummy"
         sortedArray[rows[i].index] = rowData;
     }
     
diff --git a/entity/Attribute_entity/recordcontainers/jdito/onUpdate.js b/entity/Attribute_entity/recordcontainers/jdito/onUpdate.js
index cc709a73a6100b8a5d991061e5d1119aa18f4092..6150eacfd7a0ae0c76d95332f55417eefa5de6b3 100644
--- a/entity/Attribute_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/Attribute_entity/recordcontainers/jdito/onUpdate.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("Sql_lib");
 import("system.db");
 import("system.vars");
@@ -22,6 +21,5 @@ var values = [
     rowdata["DROPDOWNFILTER.value"] || "",
     rowdata["SORTING.value"] || ""
 ];
-logging.log(JSON.stringify(values, null, "\t"))
 db.updateData("AB_ATTRIBUTE", columns, null, values, 
     SqlCondition.equals("AB_ATTRIBUTE.AB_ATTRIBUTEID", vars.get("$field.UID"), "1=2"));
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
index cad21609437cceb956e8ad82e0eb6a586addac78..6e69569dfef895f3c86e2b450ed0e29ab92cd355 100644
--- a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
+++ b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>BulkMailAddRecipients_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/documentation.adoc</documentation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -21,6 +22,7 @@
       <consumer>BulkMails</consumer>
       <linkedContext>BulkMail</linkedContext>
       <mandatory v="true" />
+      <displayValueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/bulkmail_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
       <name>BulkMails</name>
diff --git a/entity/BulkMailAddRecipients_entity/documentation.adoc b/entity/BulkMailAddRecipients_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..4742e061e147f07aff326def02037e5ddc681a41
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= BulkMailAddRecipients_entity
+
+This entity handling the serial action to add more than one organisation / person to a bulkmail.
+This action can´t be done with the BulkMailRecipient_entity, because a entity displays always one dataset.
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/bulkmail_id/displayValueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/bulkmail_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..697ac6b05dfa6d465e9235433e3b889489cb57dc
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/bulkmail_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("Sql_lib");
+import("system.db");
+import("system.result");
+
+if (vars.get("$this.value"))
+    result.string(db.cell(SqlCondition.begin().andPrepare("BULKMAIL.BULKMAILID", vars.get("$this.value")).buildSql("select NAME from BULKMAIL")));
+else
+    result.string("");
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
index cfdc84490dd7b9e30d2622127a94c2b6bb404a0f..6c1ceea94a76db2bd2596b78f2e24c4f2418a5ee 100644
--- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
+++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>BulkMailRecipient_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/BulkMailRecipient_entity/documentation.adoc</documentation>
   <title>Recipient</title>
   <siblings>
     <element>Communication_entity</element>
@@ -36,6 +37,7 @@
       <name>BulkMailRecipients</name>
       <targetContextField>TARGETCONTEXT</targetContextField>
       <targetIdField>CONTACT_ID</targetIdField>
+      <documentation>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/bulkmailrecipients/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>575e04ed-14aa-456c-8236-0bd284b1315f</name>
@@ -119,6 +121,10 @@
         </entityActionField>
       </children>
     </entityActionGroup>
+    <entityField>
+      <name>PROBLEM</name>
+      <title>Problem</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -208,6 +214,14 @@
           <name>EMAIL_ADDRESS.value</name>
           <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/email_address.value/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PROBLEM.value</name>
+          <recordfield>BULKMAILRECIPIENT.PROBLEM</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PROBLEM.displayValue</name>
+          <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/BulkMailRecipient_entity/documentation.adoc b/entity/BulkMailRecipient_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..88b46686edd773a06b0e89bf673228a37a6c3a76
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= BulkMailRecipients_entity
+
+Provides the information of the BulkMailRecipients.
+You can also remove recipients with comm restriction (via an action in the entity)
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/bulkmailrecipients/documentation.adoc b/entity/BulkMailRecipient_entity/entityfields/bulkmailrecipients/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..693d653e79790a7a25e1278bf65a3ef226847338
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/bulkmailrecipients/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailAddRecipients_entity - BulkMailRecipients
+
+Provides the informations of the Recipients to display them in the "BulkMail_entity"
\ 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 ca4a5c0748545f13847d1a5993051065553804f6..4c1c1c0723bdbf3a10f0ee85c8b613991ea5ee82 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
@@ -4,5 +4,6 @@ import("Sql_lib");
 
 var condition = SqlCondition.begin()
     .andPrepareVars("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param");
-    
-result.string(db.translateCondition(condition.build("1=2")));
\ No newline at end of file
+
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(condition.translate("1=1"));
\ 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
index 90504be5b25638a33ed874f432f724e97e3c3f2b..4ccc89e551dc740bee9a7fdeee8f0b3928598391 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
@@ -1,8 +1,9 @@
+import("Sql_lib");
 import("KeywordRegistry_basic");
 import("Contact_lib");
 import("system.db");
 import("system.result");
 
 var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()).build();
-var sql = "case when (" + db.translateStatement(commRestrictionCond) + ") then 'true' else 'false' end";
+var sql = "case when (" + SqlUtils.translateStatementWithQuotes(commRestrictionCond) + ") then 'true' else 'false' end";
 result.string(sql);
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ebe6375ca2a8aa560389d7de16cb6a19dd98298
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js
@@ -0,0 +1,8 @@
+import("Contact_lib");
+import("system.db");
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailProblem(), "BULKMAILRECIPIENT.STATUS");
+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 98b58af779470ff7f48e5947bf73833e4ccf6735..ec67de41bb9bfecc469999b40d6a77407c0168a8 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("Contact_lib");
 import("system.translate");
 import("system.db");
@@ -8,7 +9,7 @@ import("KeywordRegistry_basic");
 
 var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()).build();
 var keywordSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "BULKMAILRECIPIENT.STATUS");
-var sql = "case when (" + db.translateStatement(commRestrictionCond)
+var sql = "case when (" + SqlUtils.translateStatementWithQuotes(commRestrictionCond)
     + ") then '" + translate.text("Advertising ban")
     + "' else (" + keywordSql + ") end";
 result.string(sql);
diff --git a/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod b/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod
index fbcdd8dd9bd296ecb6d66f763651a557a5420d72..a52ded05513d34981d71549741c4731448c0c881 100644
--- a/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod
+++ b/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>BulkMailStatusChart_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/BulkMailStatusChart_entity/documentation.adoc</documentation>
   <title>Recipient status</title>
   <siblings>
     <element>BulkMailRecipient_entity</element>
@@ -29,6 +30,7 @@
     </entityField>
     <entityProvider>
       <name>RecipientStatusChart</name>
+      <documentation>%aditoprj%/entity/BulkMailStatusChart_entity/entityfields/recipientstatuschart/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>e2d96467-ec53-424b-b78c-c97c2db2bb8a</name>
diff --git a/entity/BulkMailStatusChart_entity/documentation.adoc b/entity/BulkMailStatusChart_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cdeb86c7c9cfdb4375f68dfa548f2f9adc462635
--- /dev/null
+++ b/entity/BulkMailStatusChart_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailStatusChart_entity
+
+This entity provides information for a status chart with informations out of the "BulkMail_entity".
\ No newline at end of file
diff --git a/entity/BulkMailStatusChart_entity/entityfields/recipientstatuschart/documentation.adoc b/entity/BulkMailStatusChart_entity/entityfields/recipientstatuschart/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5e97809ec14599df4c30d3ddadc8a0933584565b
--- /dev/null
+++ b/entity/BulkMailStatusChart_entity/entityfields/recipientstatuschart/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailStatusChart_entity
+
+Provides the information to display in the "BulkMail_entity"
\ No newline at end of file
diff --git a/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod b/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod
index da34a9438ea7faa052ff3b0a29f523d53aef2a46..cf36ab6a4ec652310839f970c0e56499691ffe2a 100644
--- a/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod
+++ b/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>BulkMailTesting_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/BulkMailTesting_entity/documentation.adoc</documentation>
   <siblings>
     <element>BulkMail_entity</element>
   </siblings>
diff --git a/entity/BulkMailTesting_entity/documentation.adoc b/entity/BulkMailTesting_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..00d4d58764bccd6658380c60c0aee376dca954b4
--- /dev/null
+++ b/entity/BulkMailTesting_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailStatusChart_entity
+
+This entity handling the testing of an bulk mail (test sending to a contact)
\ No newline at end of file
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index f85ae7712263ac0c501f7803c558e5ce4e6177ce..37304c70ef3ac32e943a9f22265892a12a2ae8d1 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -2,8 +2,10 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>BulkMail_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/BulkMail_entity/documentation.adoc</documentation>
   <icon>VAADIN:AT</icon>
   <title>Bulk mail</title>
+  <grantUpdateProcess>%aditoprj%/entity/BulkMail_entity/grantUpdateProcess.js</grantUpdateProcess>
   <contentTitleProcess>%aditoprj%/entity/BulkMail_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:AT</iconId>
   <titlePlural>Bulk mails</titlePlural>
@@ -22,6 +24,7 @@
     </entityProvider>
     <entityField>
       <name>BULKMAILID</name>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>NAME</name>
@@ -45,9 +48,13 @@
       <consumer>Templates</consumer>
       <mandatory v="false" />
       <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
     </entityField>
     <entityConsumer>
       <name>Recipients</name>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>BulkMailRecipient_entity</entityName>
@@ -89,11 +96,13 @@
       <name>SENDER</name>
       <title>Sender address</title>
       <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sender/valueProcess.js</valueProcess>
       <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/sender/onValidation.js</onValidation>
     </entityField>
     <entityField>
       <name>ICON</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
     <entityConsumer>
@@ -113,7 +122,13 @@
     <entityField>
       <name>bindata</name>
       <contentType>FILE</contentType>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/valueProcess.js</valueProcess>
+      <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+      </onValueChangeTypes>
+      <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/onValidation.js</onValidation>
     </entityField>
     <entityFieldGroup>
       <name>subjectPreview</name>
@@ -129,7 +144,10 @@
     <entityField>
       <name>content</name>
       <title>Content</title>
+      <contentType>HTML</contentType>
       <contentTypeProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js</contentTypeProcess>
+      <state>EDITABLE</state>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -173,6 +191,7 @@
       <title>Contact</title>
       <consumer>Contacts</consumer>
       <linkedContext>AnyContact</linkedContext>
+      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/testing_contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>TESTING_EMAIL_ADDRESS</name>
@@ -190,6 +209,24 @@
         <fieldName>#PROVIDER</fieldName>
       </dependency>
     </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
     <entityActionField>
       <name>sendMail</name>
       <title>Send</title>
@@ -204,6 +241,13 @@
       <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:CLIPBOARD_CHECK</iconId>
     </entityActionField>
+    <entityActionField>
+      <name>downloadTemplate</name>
+      <title>Download template</title>
+      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:FILE_FONT</iconId>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess>
+    </entityActionField>
     <entityActionField>
       <name>openAdminView</name>
       <title>Open admin view</title>
@@ -211,6 +255,45 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityField>
+      <name>preview</name>
+      <title>Preview</title>
+      <contentType>HTML</contentType>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/preview/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/preview/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>viewmode_preview</name>
+      <description></description>
+      <contentType>HTML</contentType>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/viewmode_preview/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/viewmode_preview/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USE_TEMPLATE_ATTACHMENTS</name>
+      <title>Use template attachments</title>
+      <contentType>BOOLEAN</contentType>
+      <dropDownProcess>%aditoprj%/entity/BulkMail_entity/entityfields/use_template_attachments/dropDownProcess.js</dropDownProcess>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/use_template_attachments/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/use_template_attachments/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>CountAttachments</name>
+      <title>Count template attachments</title>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/countattachments/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/countattachments/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionField>
+      <name>copyBulkmail</name>
+      <title>Copy bulkmail</title>
+      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:COPY</iconId>
+    </entityActionField>
+    <entityParameter>
+      <name>CopyBulkMailId_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -294,6 +377,10 @@
           <name>TESTING_CONTACT_ID.displayValue</name>
           <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/testing_contact_id.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USE_TEMPLATE_ATTACHMENTS.value</name>
+          <recordfield>BULKMAIL.USE_TEMPLATE_ATTACHMENTS</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/BulkMail_entity/documentation.adoc b/entity/BulkMail_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..7a4c2c1eaec12d178b7b9fbef6be2028fe2c5365
--- /dev/null
+++ b/entity/BulkMail_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= BulkMail_entity
+
+This entity provides the seriel mail letter function.
+You can add organisations or persons to the bulk mail.
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js b/entity/BulkMail_entity/entityfields/activities/children/objectid_param/valueProcess.js
similarity index 100%
rename from entity/Organisation_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js
rename to entity/BulkMail_entity/entityfields/activities/children/objectid_param/valueProcess.js
diff --git a/entity/BulkMail_entity/entityfields/activities/children/rowid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/activities/children/rowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a12b8389ba83e397d6b9ae10eb59989a25590fe
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/activities/children/rowid_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/bindata/onValidation.js b/entity/BulkMail_entity/entityfields/bindata/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bcd60e91c840a9fdf2052bbb73bf19a60523040
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bindata/onValidation.js
@@ -0,0 +1,15 @@
+//import("system.translate");
+//import("Bulkmail_lib");
+//import("system.result");
+//import("system.vars");
+//import("Document_lib");
+//
+//var bindata = vars.get("$local.value");
+//if (bindata)
+//{
+//    let mimeType = DocumentUtil.getMimeTypeFromUpload(bindata);
+//    if (!BulkMailUtils.isValidMimeType(mimeType))
+//        result.string(translate.text("Invalid file type"));
+//}
+
+//TODO: this should be validated with the code above, waiting for ticket #1042587
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/bindata/onValueChange.js b/entity/BulkMail_entity/entityfields/bindata/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..524732a96e95b73e360cde2bad90b6170c90dc27
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bindata/onValueChange.js
@@ -0,0 +1,14 @@
+import("DocumentTemplate_lib");
+import("system.neon");
+import("system.vars");
+import("Document_lib");
+
+// note: could not use only the valueProcess from $field.content because then it refreshed $field.content just before save.
+// --> only set in $field.content.valueProcess if $field.content is null and set it from here only if MASK triggered change
+if(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+{
+    [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$field.DOCUMENTTEMPLATE_ID"), new FileUpload(vars.get("$local.value")));
+
+    vars.set("$field.content", content);
+    vars.set("$context.currentTemplateType", type);
+}
diff --git a/entity/BulkMail_entity/entityfields/bindata/valueProcess.js b/entity/BulkMail_entity/entityfields/bindata/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..52dbdae3a4809478e2dacaa68176bc37eade3fd9
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bindata/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("Bulkmail_lib");
+import("system.vars");
+
+if (vars.get("$param.CopyBulkMailId_param") && vars.get("$this.value") == null)
+{
+    var template = BulkMailUtils.getBulkMailTemplate(vars.get("$param.CopyBulkMailId_param"), "", false, false)    
+    
+    result.string([template.filename, template.content, template.mimeType].join(";"));
+}
diff --git a/entity/BulkMail_entity/entityfields/bulkmailid/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..666ca1d3edadc9d16442625a76723f3ed168f0a9
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bulkmailid/valueProcess.js
@@ -0,0 +1,38 @@
+import("system.entities");
+import("system.vars");
+import("DocumentTemplate_lib");
+import("Bulkmail_lib");
+
+// if CopyBulkMailId_param is set, preset the fields:
+// this is done from here via vars.set to simplify data loading by system.entities
+if (!vars.exists("$context.dataCopied") && vars.get("$param.CopyBulkMailId_param"))
+{
+    var conf = entities.createConfigForLoadingRows()
+                       .entity("BulkMail_entity")
+                       .fields([
+                            "CREATEACTIVITIES",
+                            "DESCRIPTION",
+                            "DOCUMENTTEMPLATE_ID",
+                            "DOCUMENTTEMPLATE_ID.displayValue",
+                            "ICON",
+                            "NAME",
+                            "SENDER",
+                            "SUBJECT",
+                            "TESTING_CONTACT_ID",
+                            "TESTING_EMAIL_ADDRESS",
+                            "USE_TEMPLATE_ATTACHMENTS"
+                       ])
+                       .uid(vars.get("$param.CopyBulkMailId_param"));
+                       
+    if (entities.getRowCount(conf) > 0)
+    {
+        var data = entities.getRows(conf)[0];
+        
+        for (field in data)
+        {
+            vars.set("$field." + field, data[field]);
+        }
+        
+        vars.set("$context.dataCopied", true)
+    }
+}
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js b/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
index d1b6018ddd76af776cd9d21c31902a3c95ead3f6..49308df2f63a8fe57518af58217c92ea93baac4f 100644
--- a/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
@@ -1,21 +1,10 @@
-import("Bulkmail_lib");
-import("system.result");
-import("Document_lib");
-import("system.vars");
-import("DocumentTemplate_lib");
-
-var upload = vars.get("$field.bindata");
-var type;
-if (upload)
-{
-    type = DocumentUtil.getMimeTypeFromUpload(upload);
-    type = DocumentTemplate.types.fromMimeType(type);
-}
-else
-{
-    let template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
-    type = template.type;
-}
-result.string(type == DocumentTemplate.types.TXT
-    ? "LONG_TEXT" 
+import("system.neon");
+import("Bulkmail_lib");
+import("system.result");
+import("Document_lib");
+import("system.vars");
+import("DocumentTemplate_lib");
+
+result.string(vars.get("$context.currentTemplateType") == DocumentTemplate.types.TXT
+    ? "LONG_TEXT" 
     : "HTML");
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/content/displayValueProcess.js b/entity/BulkMail_entity/entityfields/content/displayValueProcess.js
index 33b1e10e22e8eb98f9041122f0f668c05200ccc5..eb9e6ef7f14579906731e58e54c7a667389e92ab 100644
--- a/entity/BulkMail_entity/entityfields/content/displayValueProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/displayValueProcess.js
@@ -2,18 +2,21 @@ import("Bulkmail_lib");
 import("system.text");
 import("Employee_lib");
 import("system.vars");
+import("system.util");
 import("system.result");
 import("system.neon");
 import("DocumentTemplate_lib");
 
-//if this was done for every row, like in a lookup, the performance would be very bad
+// if this was done for every row, like in a lookup, the performance would be very bad
 if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET) 
 {
-    var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    var template = new DocumentTemplate(util.encodeBase64String(vars.get("$field.content")), vars.get("$context.currentTemplateType"), undefined, true)
     
     var contactId = EmployeeUtils.getCurrentContactId();
-    var preview = template.getReplacedContentByContactId(contactId);
-
-    result.string(preview);
-}
-
+    var preview = template.getReplacedContentByContactId(contactId, false, true);
+    
+    if (vars.get("$context.currentTemplateType") == DocumentTemplate.types.TXT)
+        result.string(text.text2html(preview, false));
+    else
+        result.string(preview);
+}
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/content/stateProcess.js b/entity/BulkMail_entity/entityfields/content/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d48b2b6f0074a0be65f266402613082c57db6f84
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/content/stateProcess.js
@@ -0,0 +1,23 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("DocumentTemplate_lib");
+
+// in edit mode
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_VIEW && 
+    (vars.get("$context.currentTemplateType") == DocumentTemplate.types.EML
+      || vars.get("$context.currentTemplateType") == DocumentTemplate.types.HTML)) // TODO: invisible for html as there are problems with images which are removed by the html-editor
+{
+
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+// in view mode disable, show preview instead: directly after save (in edit view) the state is changed to OPERATINGSTATE_VIEW and this triggers the initionalisation of the html editor (if it is visible)
+// For EML-files or other large files this is very bad, as the editor needs a very long time to initialize
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/content/valueProcess.js b/entity/BulkMail_entity/entityfields/content/valueProcess.js
index 88d58ef83678d176d31d2efce461afe0cc40e7d7..90841e809f0b43e8b09c8c0955350da0f7e3a121 100644
--- a/entity/BulkMail_entity/entityfields/content/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/valueProcess.js
@@ -1,21 +1,22 @@
-import("system.neon");
-import("Document_lib");
-import("system.result");
-import("system.vars");
-import("system.db");
-import("DocumentTemplate_lib");
-import("Bulkmail_lib");
-
-if (vars.get("$this.value") == null && vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
-{
-    var upload = vars.get("$field.bindata");
-    var template;
-    if (upload)
-        template = DocumentTemplate.fromUpload(upload);
-    else
-        template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
-    
-    var content = template.getReplacedContent({});
-
-    result.string(content);
+import("system.neon");
+import("Document_lib");
+import("system.result");
+import("system.vars");
+import("system.db");
+import("system.util");
+import("DocumentTemplate_lib");
+import("Bulkmail_lib");
+
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && vars.get("$this.value") == null)
+{
+    var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"), false, new FileUpload(vars.get("$field.bindata")))
+    var content = util.decodeBase64String(template.content);
+    var type = template.type;
+    vars.set("$context.currentTemplateType", type);
+    result.string(content);
+} 
+else if (!vars.get("$field.DOCUMENTTEMPLATE_ID"))
+{
+    result.string("");
+    vars.set("$context.currentTemplateType", "");
 }
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js b/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c24cc7374403e24e5204ca5a945d3088da3fbe1
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js
@@ -0,0 +1,14 @@
+import("system.vars");
+import("system.neon");
+import("Bulkmail_lib");
+
+// How the copy works:
+// - the Bulkmail-context is called in NEW mode and CopyBulkMailId_param set to the current bulkmail id
+// - the valueProcess of field BULKMAILID is used to load the data via loadEntity and sets the fields
+//   (Note: I also could have done it like in offer / order and provide everything as parameter,
+//    but I tried if i it is possible to do it with less processes and a central process loading the data.
+// - The $field.bindata field is set seperately in it's value process
+// - The Recipients are added in onDBInsert of the record container
+
+BulkMailUtils.copy(vars.get("$field.BULKMAILID"));
+    
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/countattachments/stateProcess.js b/entity/BulkMail_entity/entityfields/countattachments/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d0cf7b95616b6b4c3ae9e5144b6cdff0b28c0af9
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/countattachments/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$field.USE_TEMPLATE_ATTACHMENTS") == "1")
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+else
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/countattachments/valueProcess.js b/entity/BulkMail_entity/entityfields/countattachments/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..11cf20076be6e7a6d1a9911be0fe82075222d9f4
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/countattachments/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("DocumentTemplate_lib");
+import("system.result");
+
+var template = DocumentTemplateUtils.getTemplate(vars.get("$field.DOCUMENTTEMPLATE_ID"), false);
+if (template)
+    result.string(template.getAttachments().length);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js b/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
index c2d0c4e5323ea1219d1f6f0085a624f996609e54..29a05d9cfbd66e9856c62942b74a976cecc696ec 100644
--- a/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
+++ b/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
@@ -5,10 +5,17 @@ import("system.mail");
 import("DocumentTemplate_lib");
 import("Entity_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 {
+    // note: could not use only the valueProcess from $field.content because then it refreshed $field.content just before save.
+    // --> only set in $field.content.valueProcess if $field.content is null and set it from here only if MASK triggered change
+    [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$local.value"), new FileUpload(vars.get("$field.bindata")));
+    vars.set("$context.currentTemplateType", type);
+    vars.set("$field.content", content);
+    
+    // TODO: load subject without loadTemplate again... maybe return with getTemplateContent() above?
     var templateId = vars.get("local.value");
-    var template = DocumentTemplate.loadTemplate(templateId);
+    var template = DocumentTemplate.loadTemplate(templateId, undefined, false);
     if (template.type == DocumentTemplate.types.EML)
     {
         let subject = mail.parseRFC(util.decodeBase64String(template.content))[mail.MAIL_SUBJECT];
diff --git a/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js b/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d90c7cd49058093d97421f57886570462b9bb7ac
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js
@@ -0,0 +1,13 @@
+import("Bulkmail_lib");
+import("system.neon");
+import("system.vars");
+
+// only in view mode it should use the extra uploaded file. In New and Edit mode it should only serve the original template file.
+var bulkmailId = "";
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
+    bulkmailId = vars.get("$field.BULKMAILID");
+
+var template = BulkMailUtils.getBulkMailTemplate(bulkmailId, vars.get("$field.DOCUMENTTEMPLATE_ID"), false)
+if (template.content)
+    neon.download(template.content, template.filename);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/bindata/stateProcess.js b/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
similarity index 52%
rename from entity/BulkMail_entity/entityfields/bindata/stateProcess.js
rename to entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
index aabc8ec3426af49c8dfc92204b26d794a914acc5..70de594731e17bc493caa964fc57efc0704c9193 100644
--- a/entity/BulkMail_entity/entityfields/bindata/stateProcess.js
+++ b/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
@@ -1,8 +1,8 @@
+import("system.neon");
 import("system.vars");
 import("system.result");
-import("system.neon");
 
-var state = neon.COMPONENTSTATE_EDITABLE;
 if (vars.get("$field.DOCUMENTTEMPLATE_ID"))
-    state = neon.COMPONENTSTATE_READONLY;
-result.string(state);
\ No newline at end of file
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+else
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/name/valueProcess.js b/entity/BulkMail_entity/entityfields/name/valueProcess.js
index 94a33c3fc3288465e8959ea57f74eb9b983d1787..829431cf9f199070dbd735ea9f6e391d49b59599 100644
--- a/entity/BulkMail_entity/entityfields/name/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/name/valueProcess.js
@@ -1,9 +1,10 @@
 import("system.result");
 import("Document_lib");
+import("system.entities");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if (!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
     var upload = vars.get("$field.bindata");
     if (upload)
@@ -11,4 +12,17 @@ if (vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPER
         var filename = DocumentUtil.getFilenameFromUpload(upload);
         result.string(filename.split(".")[0]);
     }
+    else
+    {
+        var conf = entities.createConfigForLoadingRows();
+        conf.entity("DocumentTemplate_entity")
+            .fields(["NAME"])
+            .uid(vars.get("$field.DOCUMENTTEMPLATE_ID"));
+        
+        var name = entities.getRows(conf);
+        if (name.length > 0)
+            name = name[0].NAME;
+        
+        result.string(name);
+    }
 }
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/preview/stateProcess.js b/entity/BulkMail_entity/entityfields/preview/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e08ac1b0648748bf4025f99f87fa726912698934
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/preview/stateProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$field.preview"))
+    result.string(neon.COMPONENTSTATE_READONLY)
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/preview/valueProcess.js b/entity/BulkMail_entity/entityfields/preview/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..03c92562f2268f628be6f866b95376c0ff732191
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/preview/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.content.displayValue"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/recipients/stateProcess.js b/entity/BulkMail_entity/entityfields/recipients/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e2b38fa2ad190ab5224e7a614c678073f0f5093
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/recipients/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("Bulkmail_lib");
+import("system.result");
+import("system.neon");
+
+if (BulkMailUtils.isStatusSendingOrSent(vars.get("$field.STATUS")))
+    result.string(neon.COMPONENTSTATE_READONLY);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/sender/valueProcess.js b/entity/BulkMail_entity/entityfields/sender/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d2d0aeedf3df91a3186eb64c2bb18582a2d1df4
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/sender/valueProcess.js
@@ -0,0 +1,5 @@
+import("Communication_lib");
+import("system.result");
+import("Employee_lib");
+
+result.string(CommUtil.getStandardMail(EmployeeUtils.getCurrentContactId()));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js b/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js
index 8fb06b7a1c02b912611222575069463cec2c368e..7618e1ae5f71c4fb3ea37b1b3f94d59fb510c2fc 100644
--- a/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js
+++ b/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js
@@ -1,9 +1,10 @@
 import("system.result");
 import("KeywordRegistry_basic");
+import("Bulkmail_lib");
 import("system.vars");
 import("system.neon");
 
 var state = neon.COMPONENTSTATE_EDITABLE;
-if (vars.get("$field.STATUS") == $KeywordRegistry.bulkMailStatus$beingSent())
+if (BulkMailUtils.isStatusSendingOrSent(vars.get("$field.STATUS")))
     state = neon.COMPONENTSTATE_DISABLED;
 result.string(state);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/subject/valueProcess.js b/entity/BulkMail_entity/entityfields/subject/valueProcess.js
index fb6c668dc4b4fdf20757a7a5db45de16f8ed8392..757195e1284583889268991bc23255d75d6d21ea 100644
--- a/entity/BulkMail_entity/entityfields/subject/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/subject/valueProcess.js
@@ -7,12 +7,7 @@ import("system.vars");
 
 if (vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    var upload = vars.get("$field.bindata");
-    if (upload)
-    {
-        var binData = DocumentUtil.getBindataFromUpload(upload);
-        var type = DocumentUtil.getMimeTypeFromUpload(upload);
-        if (DocumentTemplate.types.fromMimeType(type) == DocumentTemplate.types.EML)
-            result.string(Email.fromRFC(binData).subject);
-    }
+    var upload = new FileUpload(vars.get("$field.bindata"));
+    if (upload.isFilled() && DocumentTemplate.types.fromMimeType(upload.mimeType) == DocumentTemplate.types.EML)
+        result.string(Email.fromRFC(upload.bindata).subject);
 }
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/testing_contact_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/testing_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3cfd8a80f6d4914aa8636462e5fa8aaa63cb702e
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/testing_contact_id/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+result.string(ContactUtils.getTitleByContactId(vars.get("$field.TESTING_CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/use_template_attachments/dropDownProcess.js b/entity/BulkMail_entity/entityfields/use_template_attachments/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3373b8a886df7267c9205c206442cb2e091128fb
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/use_template_attachments/dropDownProcess.js
@@ -0,0 +1,7 @@
+import("system.translate");
+import("system.result");
+
+result.object([
+    ["1", translate.text("Yes")],
+    ["0", translate.text("No")]
+]);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/use_template_attachments/stateProcess.js b/entity/BulkMail_entity/entityfields/use_template_attachments/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..06525bbf87b3926e4dbc75bb06041f3d4466873c
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/use_template_attachments/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (!vars.get("$field.DOCUMENTTEMPLATE_ID"))
+    result.string(neon.COMPONENTSTATE_DISABLED);
+else
+    result.string(neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/use_template_attachments/valueProcess.js b/entity/BulkMail_entity/entityfields/use_template_attachments/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f58d101d4189619bd142b2498691c1906b8a270
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/use_template_attachments/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 && vars.get("$field.DOCUMENTTEMPLATE_ID"))
+{
+    result.string("1");
+}
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/viewmode_preview/stateProcess.js b/entity/BulkMail_entity/entityfields/viewmode_preview/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bd814b3e19067118cc2c861ea05b8795a9b6271
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/viewmode_preview/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/viewmode_preview/valueProcess.js b/entity/BulkMail_entity/entityfields/viewmode_preview/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..03c92562f2268f628be6f866b95376c0ff732191
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/viewmode_preview/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.content.displayValue"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/grantUpdateProcess.js b/entity/BulkMail_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..25e2b4db25ef91c5f9c3f6b787c757b854993533
--- /dev/null
+++ b/entity/BulkMail_entity/grantUpdateProcess.js
@@ -0,0 +1,5 @@
+import("Bulkmail_lib");
+import("system.vars");
+import("system.result");
+
+result.object(!BulkMailUtils.isStatusSendingOrSent(vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js b/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js
index 71625c5c712cab7e76569fb406a17ae5a47fbce8..8ae5ed9a343fa515dd660cbf3446edac2bf36c41 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js
@@ -3,7 +3,7 @@ import("Sql_lib");
 import("system.db");
 
 db.deleteData("BULKMAILRECIPIENT", SqlCondition.equals("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$local.uid"), "1=2"));
-var SYSALIAS = SqlUtils.getSystemAlias();
+var SYSALIAS = SqlUtils.getBinariesAlias();
 var binaryId = db.cell(SqlCondition.begin(SYSALIAS)
     .andPrepareVars("ASYS_BINARIES.ROW_ID", "$local.uid")
     .buildSql("select ID from ASYS_BINARIES"), SYSALIAS);
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
index 124d083b49c0f9e023aaa6f730b170fc427a550f..93eba9d8b97d65649f4be9e3407c9dbb3544d914 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
@@ -2,29 +2,51 @@ import("Sql_lib");
 import("DocumentTemplate_lib");
 import("system.result");
 import("system.vars");
+import("system.entities");
 import("system.db");
 import("system.util");
 import("Document_lib");
 import("Bulkmail_lib");
 
-var content = vars.get("$field.content");
+if (vars.get("$context.currentTemplateType") != DocumentTemplate.types.EML)
+    var content = vars.get("$field.content");
+
 var bindata = vars.get("$field.bindata");
 var rowdata = vars.get("$local.rowdata");
 var bulkMailId = rowdata["BULKMAIL.BULKMAILID"];
 var templateId = rowdata["BULKMAIL.DOCUMENTTEMPLATE_ID"];
 var bulkMailName = rowdata["BULKMAIL.NAME"];
 
-var template = DocumentTemplate.getSelectedTemplate(templateId, bindata, content, DocumentTemplate.types.HTML);
+var template = DocumentTemplate.getSelectedTemplate(templateId, new FileUpload(bindata), content, DocumentTemplate.types.HTML);
 
 if (template.content)
 {
     if (!template.filename)
         template.filename = bulkMailName + ".html";
     db.insertBinary("BULKMAIL", "DOCUMENT", bulkMailId, 
-        "", template.content, template.filename, "", "", SqlUtils.getSystemAlias());
+        "", template.content, template.filename, "", "", SqlUtils.getBinariesAlias());
+}
+
+var contactIds = [];
+
+if (vars.get("$param.CopyBulkMailId_param"))
+{
+    var config = entities.createConfigForLoadingRows()
+                         .entity("BulkMailRecipient_entity")
+                         .provider("BulkMailRecipients")
+                         .addParameter("BulkMailId_param", vars.get("$param.CopyBulkMailId_param"))
+                         .fields(["CONTACT_ID"]);
+                         
+    var copiedRecipients = entities.getRows(config);
+
+    contactIds = copiedRecipients.map(function(pRecipient) 
+    {
+        return pRecipient["CONTACT_ID"];
+    });
 }
 
-var contactIds = JSON.parse(vars.getString("$param.PresetRecipients_param"));
+if (vars.getString("$param.PresetRecipients_param"))
+    contactIds = contactIds.concat(JSON.parse(vars.getString("$param.PresetRecipients_param")));
 
 if (contactIds && contactIds.length > 0)
     BulkMailUtils.addRecipients(bulkMailId, BulkMailUtils.filterNewRecipients(bulkMailId, contactIds));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
index e6ca5e9a03194feedeba892cd5c5359deb0e9894..053ba668100f674c227a29969e40c41c2b0eadd8 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
@@ -7,20 +7,23 @@ import("system.db");
 import("Document_lib");
 import("Bulkmail_lib");
 
-var content = vars.get("$field.content");
+// eml is not editable
+if (vars.get("$context.currentTemplateType") != DocumentTemplate.types.EML)
+    var content = vars.get("$field.content");
+
 var bindata = vars.get("$field.bindata");
 var rowdata = vars.get("$local.rowdata");
 var bulkMailId = rowdata["BULKMAIL.BULKMAILID"];
 var templateId = rowdata["BULKMAIL.DOCUMENTTEMPLATE_ID"];
 var bulkMailName = rowdata["BULKMAIL.NAME"];
 
-var template = DocumentTemplate.getSelectedTemplate(templateId, bindata, content, DocumentTemplate.types.HTML);
+var template = DocumentTemplate.getSelectedTemplate(templateId, new FileUpload(bindata), content, DocumentTemplate.types.HTML);
 
 if (template.content)
 {
     if (!template.filename)
         template.filename = bulkMailName + ".html";
-    let sysAlias = SqlUtils.getSystemAlias();
+    let sysAlias = SqlUtils.getBinariesAlias();
     var binaryId = db.cell(SqlCondition.begin(sysAlias)
         .andPrepareVars("ASYS_BINARIES.ROW_ID", "$local.uid")
         .buildSql("select ID from ASYS_BINARIES", "1=2"), sysAlias);
diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
index 9c2216cde824c0f250245b40f4f63f99a4fd961f..14fc24a958742dc46290deaf3622290c466c78e1 100644
--- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
+++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignAddParticipants_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignAddParticipants_entity/documentation.adoc</documentation>
   <title>Add participants to Campaign</title>
   <onValidation>%aditoprj%/entity/CampaignAddParticipants_entity/onValidation.js</onValidation>
   <recordContainer>jdito</recordContainer>
diff --git a/entity/CampaignAddParticipants_entity/documentation.adoc b/entity/CampaignAddParticipants_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f64f77a53c274d3afd2fd16c2885a44f75505537
--- /dev/null
+++ b/entity/CampaignAddParticipants_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= CampaignAddRecipients_entity
+
+This entity handling the seriel action to add more than one organisation / person to a campaign (campaignparticipant).
+This action can´t be done with the CampaignParticipant_entity, because a entity displays always one dataset.
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
index 7232e9b7806fe94ddb279962715a35820ed89a1b..77b64092bdb0a66d9dab7725677aef4290e5d74d 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("Campaign_lib");
 import("system.result");
 import("system.translate");
@@ -29,7 +30,7 @@ if(selectedCampaignId != '')
     var countParticipantsAlreadyInCampaign = 0;
     var countParticipantsToAdd = 0;
     var countValidParticipantsToAdd = 0;
-    var whereCondition = "";
+    var whereCondition = SqlCondition.begin();
     var rowIdsComparisonField = "";
         
     //if theres a selection, we have to use it, otherwise use the condition
@@ -47,15 +48,15 @@ if(selectedCampaignId != '')
          */
         if(isUpdate == "true")
         {
-            rowIdsComparisonField = "CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID";
-            whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = '" + selectedCampaignStepId + "'";
+            whereCondition.andPrepare("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", selectedCampaignStepId);
+            whereCondition.andIn("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", selectionRowIds)
         }
         else
         {
-            rowIdsComparisonField = "CAMPAIGNPARTICIPANT.CONTACT_ID";
-            whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + selectedCampaignId + "'";
+            whereCondition.andPrepare("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", selectedCampaignId);
+            whereCondition.andIn("CAMPAIGNPARTICIPANT.CONTACT_ID", selectionRowIds)
         }
-        countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByRowId(whereCondition, rowIdsComparisonField, selectionRowIds);
+        countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsCountByCondition(whereCondition);
     }
     else
     {
@@ -80,11 +81,12 @@ if(selectedCampaignId != '')
          * step because one participant can be in a campaign just once.
          */
         if(isUpdate == "true")
-            whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = '" + selectedCampaignStepId + "'";
+            whereCondition.andPrepare("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", selectedCampaignStepId);
         else
-            whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + selectedCampaignId + "'";
+            whereCondition.andPrepare("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", selectedCampaignId);
 
-        countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByCondition(whereCondition, participantCondition, useRightJoinToGetOrgs);
+        whereCondition.and(participantCondition);
+        countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByCondition(whereCondition, useRightJoinToGetOrgs);
     }
     countValidParticipantsToAdd = countParticipantsToAdd - countParticipantsAlreadyInCampaign;
     
diff --git a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
index 1c36b1046e43d1a63d85676b70e12380e5bd0413..751ca0aaf2a99c64b4ac13dac3c98e77ac44ce4c 100644
--- a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
+++ b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignAnalysis_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignAnalysis_entity/documentation.adoc</documentation>
   <siblings>
     <element>CampaignCost_entity</element>
   </siblings>
@@ -12,6 +13,7 @@
     </entityProvider>
     <entityProvider>
       <name>CampaignAnalysisProvider</name>
+      <documentation>%aditoprj%/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>bd130613-f0e4-4591-8035-2c2491b08c50</name>
diff --git a/entity/CampaignAnalysis_entity/documentation.adoc b/entity/CampaignAnalysis_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..733c726f09cd230b8bd9d95f7723e25b956dfded
--- /dev/null
+++ b/entity/CampaignAnalysis_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= BulkMailAnalysis_entity
+
+Calculates some information for charts for the campaign like amount of participants.
+There are separate charts for cost and participant.
\ No newline at end of file
diff --git a/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc b/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1ede275abd9b5fc8550b4780219faa50464d6e13
--- /dev/null
+++ b/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignAnalysis_entity - CampaignAnalysisProvider
+
+Provides the information so they can be consumed inside the campaign to display the chart
\ No newline at end of file
diff --git a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
index b4cf94c82b38cf54ec79af1a5af77e86847dea75..85862fbb9a2a28c1d045dd50ecae494294cf6dd4 100644
--- a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
+++ b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignCostChart_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignCostChart_entity/documentation.adoc</documentation>
   <siblings>
     <element>CampaignCost_entity</element>
   </siblings>
@@ -31,6 +32,7 @@
     </entityParameter>
     <entityProvider>
       <name>CostChart</name>
+      <documentation>%aditoprj%/entity/CampaignCostChart_entity/entityfields/costchart/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>e519262b-ff42-4c26-9d28-4d9566eafcdc</name>
diff --git a/entity/CampaignCostChart_entity/documentation.adoc b/entity/CampaignCostChart_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b93dab7485a8be466ef9eead2a1770b9c4df0669
--- /dev/null
+++ b/entity/CampaignCostChart_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignCostChart_entity
+
+Provides the information for the chart to display the campaign costs
\ No newline at end of file
diff --git a/entity/CampaignCostChart_entity/entityfields/costchart/documentation.adoc b/entity/CampaignCostChart_entity/entityfields/costchart/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..7e4b83de9e5a4bfcf310eb5968a6453852081af9
--- /dev/null
+++ b/entity/CampaignCostChart_entity/entityfields/costchart/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignCostChart_entity - CostChart
+
+Provider to display the chart in the campaign-view
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/CampaignCost_entity.aod b/entity/CampaignCost_entity/CampaignCost_entity.aod
index 54ea032fe2337da9be23f221dd7bd64371540d1b..c77346a598971ef0925db5fa2536f93830594e11 100644
--- a/entity/CampaignCost_entity/CampaignCost_entity.aod
+++ b/entity/CampaignCost_entity/CampaignCost_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignCost_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignCost_entity/documentation.adoc</documentation>
   <siblings>
     <element>CampaignAnalysis_entity</element>
     <element>CampaignCostChart_entity</element>
@@ -77,6 +78,7 @@
     </entityField>
     <entityProvider>
       <name>CampaignCosts</name>
+      <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
@@ -107,6 +109,7 @@
     </entityProvider>
     <entityProvider>
       <name>StepCosts</name>
+      <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
diff --git a/entity/CampaignCost_entity/documentation.adoc b/entity/CampaignCost_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..49e8f28a87e2fc67f8cb400408a35a83ca2effd3
--- /dev/null
+++ b/entity/CampaignCost_entity/documentation.adoc
@@ -0,0 +1,6 @@
+= CampaignCost_entity
+
+Calculates all the information for the costs of an campaign.
+There is also a entity "CampaignCostChart_entity" to display this information via charts.
+
+There are different providers for costs of the campaign itself and for costs of campaignsteps.
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc b/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8b75071b3edfb15e96806b643dd78d5bc5155776
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignCost_entity - CampaignCost
+
+Provides the information for the chart to display the campaign costs
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js b/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
index ee615b672f09af762e082d55eb0dfae53be9a87d..d3cf82ce61b477071d1d697dd3ac713d61569483 100644
--- a/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
+++ b/entity/CampaignCost_entity/entityfields/campaignstep_id/displayValueProcess.js
@@ -13,8 +13,4 @@ if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
         var campaignStepName = CampaignUtils.getCampaignStepNameById(campaignStepId);
         result.string(translate.text("Step") + ": " + campaignStepName);
     }
-    else
-    {
-            result.string(translate.text("Fix cost"));    
-    }
 }
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js b/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
index f9fdcc7295ca3443a1ba782155d529cc5f8103a6..aab867d773215c3d8721fb02878ca7b34c173dc1 100644
--- a/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
+++ b/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
@@ -15,4 +15,4 @@ else
 if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
     cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$field.CAMPAIGNCOSTID", "# <> ?");
 
-result.string(db.translateStatement(cond.buildSql("select CATEGORY from CAMPAIGNCOST", "1=2", "group by CATEGORY")));
\ No newline at end of file
+result.string(SqlUtils.translateStatementWithQuotes(cond.buildSql("select CATEGORY from CAMPAIGNCOST", "1=2", "group by CATEGORY")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc b/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..39d7eeabf264e9740b7a0a277b7fda2d2d8078c4
--- /dev/null
+++ b/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignCost_entity - StepCost
+
+Provides the information for the chart to display the step costs
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
index ff7f94167b0fbafce7189b2facf299ae60849832..ae648de52138a58672e04d6d71882c944c4a2e1f 100644
--- a/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
@@ -19,4 +19,5 @@ else
     cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null");
 }
 
-result.string(db.translateCondition(cond.build("1=2")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1=2"));
\ No newline at end of file
diff --git a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
index 757e4b633760c6df973760d30fd9c2da6e19f491..36676daf0101acf2fdc23f8c4e4ddf81eab594ff 100644
--- a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
+++ b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignParticipantChart_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignParticipantChart_entity/documentation.adoc</documentation>
   <siblings>
     <element>CampaignParticipant_entity</element>
     <element>CampaignStep_entity</element>
@@ -14,6 +15,7 @@
     </entityProvider>
     <entityProvider>
       <name>ParticipantChart</name>
+      <documentation>%aditoprj%/entity/CampaignParticipantChart_entity/entityfields/participantchart/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>59e7c7ff-a649-4efe-89dd-8fdb7967261b</name>
diff --git a/entity/CampaignParticipantChart_entity/documentation.adoc b/entity/CampaignParticipantChart_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8c7410d8353e1b5f0cd78894d976875b62fa1d77
--- /dev/null
+++ b/entity/CampaignParticipantChart_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= CampaignParticipantChart_entity
+
+Provides the information for the chart to display the participant information combined with steps.
+The information is stored in the campaignparticipantlog db table.
\ No newline at end of file
diff --git a/entity/CampaignParticipantChart_entity/entityfields/participantchart/documentation.adoc b/entity/CampaignParticipantChart_entity/entityfields/participantchart/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1c2e38d172833cd0c25accc998c61ee809f2026a
--- /dev/null
+++ b/entity/CampaignParticipantChart_entity/entityfields/participantchart/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignParticipantChart_entity - ParticipantChart
+
+Provides the information for the chart to display the participant chart
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index c215f745c25cf6bf3daee3d3990e3a51539adfee..7bf19a25fec42ab0a3e83504179d2fef51b5782d 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignParticipant_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignParticipant_entity/documentation.adoc</documentation>
   <title>Participant</title>
   <siblings>
     <element>CampaignAddParticipants_entity</element>
@@ -18,6 +19,7 @@
       <name>CampaignParticipantsProvider</name>
       <targetContextField>CONTACTCONTEXT</targetContextField>
       <targetIdField>CONTACT_ID</targetIdField>
+      <documentation>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>f28945cd-4613-4dfa-91f7-a7d9d64cef58</name>
diff --git a/entity/CampaignParticipant_entity/documentation.adoc b/entity/CampaignParticipant_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5a673f7efc690de4b0d39973dce1b1666d15e1db
--- /dev/null
+++ b/entity/CampaignParticipant_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= CampaignParticipant_entity
+
+Handling of the information and logic of an campaign participant.
+A campaign participant can be a organisation or a person.
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc b/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..bca19c7edd45658eb16326e0a7f70485ae26bdc4
--- /dev/null
+++ b/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignCostChart_entity - CampaignParticipantsProvider
+
+Provider to display the campaign participants in the campaign itself
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
index 1b654090c3c0fffd96c2eb836be6cbb10cdb4661..0af663a72b49fe6bba0cef31244c320786ba6fa7 100644
--- a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
+++ b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
@@ -1,5 +1,6 @@
 import("system.result");
 import("Communication_lib");
+import("Sql_lib");
 
 var res = CommUtil.getStandardSubSqlPhone(SqlCondition.begin().and("COMMUNICATION.CONTACT_ID = CAMPAIGNPARTICIPANT.CONTACT_ID"));
 result.string(res);
\ No newline at end of file
diff --git a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
index f3a29a7c24402e085c1ce01cdfa5f00abd36664f..e0c3b7b18030cbe04e8791d93978e6690301c0f6 100644
--- a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
+++ b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignPlanning_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignPlanning_entity/documentation.adoc</documentation>
   <title>Campaign planning</title>
   <siblings>
     <element>Campaign_entity</element>
diff --git a/entity/CampaignPlanning_entity/documentation.adoc b/entity/CampaignPlanning_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..29b4ae8cd0f52fa2238d1294820a1c2cd0e989e7
--- /dev/null
+++ b/entity/CampaignPlanning_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignPlanning_entity
+
+Provides the information an logic to display all campaigns via a gantt chart.
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 1e4b903793c15424b8f256f6af23a1df3017861f..454bc23d4098333cb6df105f57d924f33aa02cdf 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CampaignStep_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CampaignStep_entity/documentation.adoc</documentation>
   <icon>NEON:GROUP_APPOINTMENT</icon>
   <title>Campaign Step</title>
   <siblings>
@@ -111,6 +112,7 @@
     </entityField>
     <entityProvider>
       <name>CampaignSteps</name>
+      <documentation>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
diff --git a/entity/CampaignStep_entity/documentation.adoc b/entity/CampaignStep_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b8d90cd642d12d96188a69a16efcdf83c262eb5f
--- /dev/null
+++ b/entity/CampaignStep_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= CampaignStep_entity
+
+Provides the information for campaignsteps, consumed by the campaign itself and 360Degree for one participant (organisation / person)
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc b/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..516ab6a7e28396d044b2b4d147b40c0ca958a1d6
--- /dev/null
+++ b/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc
@@ -0,0 +1,4 @@
+= CampaignStep_entity - CampaignSteps
+
+Provider for the campaign steps used by campaign.
+The "CampaignStep_entity" consumes this provider by itself to fill the "PREDECESSORSTEP_ID"
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/grantDeleteProcess.js b/entity/CampaignStep_entity/grantDeleteProcess.js
index 87f22c8c68e951b1986bc106010ce589753244be..e10f390c21f8c66a8d190cdd88dac9d88260fd0c 100644
--- a/entity/CampaignStep_entity/grantDeleteProcess.js
+++ b/entity/CampaignStep_entity/grantDeleteProcess.js
@@ -1,7 +1,9 @@
+import("system.neon");
 import("Context_lib");
 import("system.vars");
 import("ActivityTask_lib");
 import("system.result");
 
-result.string(!TaskUtils.hasTasks(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!TaskUtils.hasTasks(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId()));
diff --git a/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js b/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
index 1049e6cdec0f35e2915051b645b193f32ae8cd51..957728e87b5c717165dc1ea24fdd80892678115a 100644
--- a/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
@@ -8,5 +8,5 @@ var cond = SqlCondition.begin()
 
 cond.andPrepareIfSet("CAMPAIGNSTEP.SORTING", vars.getString("$param.maxSort_param"), "# <= ?");
 
-
-result.string(db.translateCondition(cond.build("1=1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1=1"));
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index 364f0019d3722dc74cd8a005c51f3a17e64b3c5a..eb4a718cf7d9824efce4926564c5611496887e35 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Campaign_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Campaign_entity/documentation.adoc</documentation>
   <icon>VAADIN:GROUP</icon>
   <title>Campaign</title>
   <siblings>
@@ -136,6 +137,7 @@
     </entityConsumer>
     <entityProvider>
       <name>Campaigns</name>
+      <documentation>%aditoprj%/entity/Campaign_entity/entityfields/campaigns/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
diff --git a/entity/Campaign_entity/documentation.adoc b/entity/Campaign_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..07e81d7dd25d7e2b39c95b4a95cf8dde4ee41344
--- /dev/null
+++ b/entity/Campaign_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= Campaign_entity
+
+Provides the main-function for working with campaigns.
+The campaign itself consumes other entitys for participants, costs an the standard entities like activity, task, ...
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/campaigns/documentation.adoc b/entity/Campaign_entity/entityfields/campaigns/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5045e49c13f2a10ff13915c46348d8e6fce999c8
--- /dev/null
+++ b/entity/Campaign_entity/entityfields/campaigns/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailStatusChart_entity - Campaigns
+
+Provides a list of campaigns for displaying in contact or organisation (360Degree or in activities)
\ No newline at end of file
diff --git a/entity/Campaign_entity/grantDeleteProcess.js b/entity/Campaign_entity/grantDeleteProcess.js
index 8f6dbd3f5f48448ca0c78b7240fbbd715828a6bd..1c14ed3fc37da781a0422de1688f362223fe1ae2 100644
--- a/entity/Campaign_entity/grantDeleteProcess.js
+++ b/entity/Campaign_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CAMPAIGN", null, vars.get("$field.CAMPAIGNID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("CAMPAIGN", null, vars.get("$field.CAMPAIGNID"))
+//    && !TaskUtils.hasTasks(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/conditionProcess.js b/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
index 35564fcfc97e9cbfd34ef204697547e186e56a9f..48e7a6cbbddcac3d8fe7def09dcc51fc47240d78 100644
--- a/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
@@ -6,6 +6,6 @@ import("system.vars");
 
 if(vars.get("$param.ShowOnlyCurrentUsersCampaigns_param") == 'true')
 {
-    //TODO: use a preparedCondition when available #1030812 #1034026
+    //TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
     result.string("CAMPAIGN.EMPLOYEE_CONTACT_ID = '" + EmployeeUtils.getCurrentContactId() + "'");
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
index be89d052752f9821aba3165aa52fd8ad0d417a99..3bdffddaae5ecd6dea93fb0feeda4e5760bab6fc 100644
--- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
+++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
@@ -8,28 +8,11 @@
   <contentTitleProcess>%aditoprj%/entity/ClassificationAdmin_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:LIST_OL</iconId>
   <titlePlural>Classifications</titlePlural>
-  <recordContainer>jdito</recordContainer>
+  <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
     </entityProvider>
-    <entityField>
-      <name>UID</name>
-      <title>Usage</title>
-      <consumer>KeywordClassificationTypes</consumer>
-      <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/uid/displayValueProcess.js</displayValueProcess>
-    </entityField>
-    <entityField>
-      <name>CLASSIFICATIONID</name>
-      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationid/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>CLASSIFICATIONSCORE_ID</name>
-      <title>Selection</title>
-      <consumer>ClassificationScores</consumer>
-      <titleProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/titleProcess.js</titleProcess>
-      <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/displayValueProcess.js</displayValueProcess>
-    </entityField>
     <entityParameter>
       <name>ClassificationType_param</name>
       <expose v="true" />
@@ -62,18 +45,6 @@
       <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js</displayValueProcess>
       <onValidation>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js</onValidation>
     </entityField>
-    <entityField>
-      <name>CLASSIFICATIONTYPE_ID</name>
-      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtype_id/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>OBJECT_ROWID</name>
-      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/object_rowid/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>OBJECT_TYPE</name>
-      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js</valueProcess>
-    </entityField>
     <entityConsumer>
       <name>KeywordClassificationTypes</name>
       <dependency>
@@ -129,51 +100,37 @@
     </entityField>
   </entityFields>
   <recordContainers>
-    <jDitoRecordContainer>
-      <name>jdito</name>
-      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
-      <isFilterable v="true" />
-      <isRequireContainerFiltering v="true" />
-      <contentProcess>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
-      <onInsert>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js</onInsert>
-      <onUpdate>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
-      <onDelete>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js</onDelete>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <orderClauseProcess>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>2f70bf47-42e3-40a2-b076-0da34cfb80d9</name>
+          <tableName>CLASSIFICATIONTYPE</tableName>
+          <primaryKey>CLASSIFICATIONTYPEID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
       <recordFieldMappings>
-        <jDitoRecordFieldMapping>
-          <name>UID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLASSIFICATIONID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
+        <dbRecordFieldMapping>
           <name>CLASSIFICATIONGROUP.value</name>
-          <isFilterable v="false" />
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLASSIFICATIONSCORE_ID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLASSIFICATIONTYPEID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CLASSIFICATIONTYPE_ID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>OBJECT_TYPE.value</name>
-          <isFilterable v="false" />
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>OBJECT_ROWID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
+          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONGROUP</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
           <name>SCORETYPE.value</name>
-          <isFilterable v="true" />
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
+          <recordfield>CLASSIFICATIONTYPE.SCORETYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
           <name>CLASSIFICATIONTYPE.value</name>
-          <isFilterable v="true" />
-        </jDitoRecordFieldMapping>
+          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONTYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONTYPEID.value</name>
+          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
-    </jDitoRecordContainer>
+    </dbRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/ClassificationAdmin_entity/contentTitleProcess.js b/entity/ClassificationAdmin_entity/contentTitleProcess.js
index 552a186ab33275b9d36c32b996dfca794988584c..2031cfeaec00a131c455e4152bb6917b74d6e85f 100644
--- a/entity/ClassificationAdmin_entity/contentTitleProcess.js
+++ b/entity/ClassificationAdmin_entity/contentTitleProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.UID.displayValue"))
\ No newline at end of file
+result.string(vars.get("$field.CLASSIFICATIONTYPE.displayValue"))
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/documentation.adoc b/entity/ClassificationAdmin_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f54fafb3971823af90b05751146b05b0840ba92e
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationAdmin_entity
+
+The administrative representation of the classification which is used among other things in the sales project (see also Classification_entity)
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
index b20aec8464c2cf6ef40ac4cca818b4a99105a6f6..6c4ff0ba3d89251bc6d64bbce56aed7d53932d33 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("Classification_lib");
 import("system.neon");
 import("system.vars");
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
index b22708772a0282ee6afb72989395043a5a80ff50..52077bf9d455c013960c8ec4d139b1fb1be0861b 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
@@ -18,7 +18,7 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 
         if (groups.indexOf(newGroup, 0) != -1 && ClassificationUtils.getGroupFromDb(vars.get("$field.CLASSIFICATIONTYPEID")) != newGroup)
         {
-            result.string(translate.text("The new Classification name already exists."));
+            //result.string(translate.text("The new Classification name already exists."));
         }
     }
     else
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/displayValueProcess.js
deleted file mode 100644
index 70cf0982fcbe50bb94b9b063b5d02e70acf43c3d..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/displayValueProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.vars");
-import("system.translate");
-import("Sql_lib");
-import("system.db");
-import("system.result");
-
-if (vars.get("$field.CLASSIFICATIONSCORE_ID"))
-{
-    // TODO: loadEntity / #Title
-    result.string(translate.text(db.cell(SqlCondition.begin()
-            .andPrepareVars("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", "$field.CLASSIFICATIONSCORE_ID")
-            .buildSql("select TITLE from CLASSIFICATIONSCORE", "1=2"))));
-}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/titleProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/titleProcess.js
deleted file mode 100644
index 7865e4544cd6eaba5d15e15937bffca31e2675fa..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationscore_id/titleProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.neon");
-import("system.result");
-import("system.vars");
-import("system.translate");
-
-if (vars.get("$sys.recordstate") && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_VIEW)
-{
-    result.string(translate.text(vars.get("$field.SCORETYPE")));
-}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..519d6f1ab431849ac7f43915cf1e4a5756e1f193
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.db");
+
+result.object({
+    "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP": db.ASCENDING
+})
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
index 5a78999dea25b300de3f031341e56276f932906e..f167296c2f4e6427feff8e970d10fc84f3bcd302 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
@@ -37,8 +37,8 @@ if (vars.exists("$local.filter") && vars.get("$local.filter"))
 
 var masking = new SqlMaskingUtils();
 result.object(db.table(cond.buildSql("select CLASSIFICATIONTYPEID, CLASSIFICATIONID, CLASSIFICATIONGROUP, CLASSIFICATIONSCORE_ID, CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE_ID, OBJECT_TYPE, OBJECT_ROWID, SCORETYPE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPE from CLASSIFICATION \n\
-                right join CLASSIFICATIONTYPE on " + db.translateCondition(SqlCondition.begin()
+                right join CLASSIFICATIONTYPE on " + SqlCondition.begin()
                     .and("CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPEID")
                     .andPrepareVars("CLASSIFICATION.OBJECT_TYPE", "$param.ObjectType_param")
-                    .andPrepareVars("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param").build()), "1=1", "order by CLASSIFICATIONGROUP asc"))
+                    .andPrepareVars("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param").translate(), "1=1", "order by CLASSIFICATIONGROUP asc"))
                 );
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
index 40b75f026eb05878e322d9d15b141dee90152b91..2e4243249985e4135deedaf41b24428fb3aeab81 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
@@ -11,7 +11,7 @@ if (1 < db.cell(SqlCondition.begin()
                         .andPrepare("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", vars.get("$field.CLASSIFICATIONTYPE"))
                         .buildSql("select count(*) from CLASSIFICATIONTYPE", "1=2")))
 {
-    db.deleteData("CLASSIFICATION", "CLASSIFICATION.CLASSIFICATIONTYPE_ID in (" + db.translateStatement(
+    db.deleteData("CLASSIFICATION", "CLASSIFICATION.CLASSIFICATIONTYPE_ID in (" + SqlUtils.translateStatementWithQuotes(
                        SqlCondition.begin()
                                    .andPrepare("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId)
                                    .buildSql("select CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID from CLASSIFICATIONTYPE", "1=2")) + ")");
diff --git a/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod b/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod
index e7a8808ba546564d7f4565de131191311bc07bcc..9d6991a1d08c42cd867e5e55cdb44eac5f9f879b 100644
--- a/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod
+++ b/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ClassificationGroupAnalyses_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ClassificationGroupAnalyses_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/ClassificationGroupAnalyses_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>jdito</recordContainer>
   <entityFields>
@@ -31,6 +32,7 @@
     </entityParameter>
     <entityProvider>
       <name>GroupAnalyses</name>
+      <documentation>%aditoprj%/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>c20a7d8b-00ab-4edf-adf5-89fc94385e65</name>
diff --git a/entity/ClassificationGroupAnalyses_entity/documentation.adoc b/entity/ClassificationGroupAnalyses_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ba6c7d1f310c1eb7fd791cd0bc612c80d4aa8a66
--- /dev/null
+++ b/entity/ClassificationGroupAnalyses_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationGroupAnalyses_entity
+
+This entity is there for grouping the information in the classification_entity
\ No newline at end of file
diff --git a/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc b/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f5014870cb87669b987f575b44ecc6c0c15638ad
--- /dev/null
+++ b/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationGroupAnalyses_entity - GroupAnalyses
+
+Provides the information to display them in the Classification
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/ClassificationScore_entity.aod b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
index cb85bf9e4154e3f55d8cf04c48addf35054e2f17..1c02586388398a429888d2aafafbc255c1636208 100644
--- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod
+++ b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ClassificationScore_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ClassificationScore_entity/documentation.adoc</documentation>
   <title>Possible Value</title>
   <contentTitleProcess>%aditoprj%/entity/ClassificationScore_entity/contentTitleProcess.js</contentTitleProcess>
   <titlePlural>Possible Values</titlePlural>
@@ -40,6 +41,7 @@
     </entityField>
     <entityProvider>
       <name>ClassificationScores</name>
+      <documentation>%aditoprj%/entity/ClassificationScore_entity/entityfields/classificationscores/documentation.adoc</documentation>
       <children>
         <entityParameter>
           <name>ClassificationGroup_param</name>
diff --git a/entity/ClassificationScore_entity/documentation.adoc b/entity/ClassificationScore_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..89c3ea4f996f8537873b516195a6e80cdb00fe15
--- /dev/null
+++ b/entity/ClassificationScore_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationScore_entity
+
+Presentation of the grouping via ScoreCard
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationscores/documentation.adoc b/entity/ClassificationScore_entity/entityfields/classificationscores/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..244b8883b0b3655de6360e89f0e1148543ab64a1
--- /dev/null
+++ b/entity/ClassificationScore_entity/entityfields/classificationscores/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationScore_entity - ClassificationScores
+
+Provides the ClassificationScore information
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
index 0bb207b74cc66f85a0d9ba9c76b2d30b3e569197..d56a9f5bfc8c9d85a8b4ae236c83531ab921c30f 100644
--- a/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
@@ -3,6 +3,7 @@ import("Sql_lib");
 import("system.db");
 import("system.result");
 
-result.string(db.translateCondition(SqlCondition.begin()
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin()
                   .andPrepareVars("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", "$param.ClassificationTypeId_param")
-                  .build("1=2")));
\ No newline at end of file
+                  .translate("1=2"));
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod
index eff736c9316a2e0e8d4d609fa74ac6d0753639eb..abbab15ddb212585098b495f0353323e7c14d9c1 100644
--- a/entity/ClassificationType_entity/ClassificationType_entity.aod
+++ b/entity/ClassificationType_entity/ClassificationType_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ClassificationType_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ClassificationType_entity/documentation.adoc</documentation>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
diff --git a/entity/ClassificationType_entity/documentation.adoc b/entity/ClassificationType_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..4b63abbd0ed13d766d3a223ac89f4707a3555f9b
--- /dev/null
+++ b/entity/ClassificationType_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ClassificationType_entity
+
+Defines types for the classifications (see Classification_entity)
\ No newline at end of file
diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod
index 70d4f2038f27e04d5188e7629d9eeb5cd639fe3f..a8bbe20cd50a885f9417802f89bf2211856d7e54 100644
--- a/entity/Classification_entity/Classification_entity.aod
+++ b/entity/Classification_entity/Classification_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Classification_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Classification_entity/documentation.adoc</documentation>
   <title>Classification</title>
   <grantDelete v="false" />
   <afterOperatingState>%aditoprj%/entity/Classification_entity/afterOperatingState.js</afterOperatingState>
@@ -41,6 +42,7 @@
     </entityParameter>
     <entityProvider>
       <name>Classifications</name>
+      <documentation>%aditoprj%/entity/Classification_entity/entityfields/classifications/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>6274acfa-3dbf-4a9b-8926-2a2d1ff80d6d</name>
diff --git a/entity/Classification_entity/afterOperatingState.js b/entity/Classification_entity/afterOperatingState.js
index a94093073f1d90cd4d112f5e93eb90f853d2f4fd..09213cf5619c0ad05c151b3eb5bcb3db792aba72 100644
--- a/entity/Classification_entity/afterOperatingState.js
+++ b/entity/Classification_entity/afterOperatingState.js
@@ -1,7 +1,8 @@
 import("system.vars");
 import("system.neon");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) 
+// "$local.value" contains the previous operationg state
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$local.value") == neon.OPERATINGSTATE_EDIT) 
 {
-    neon.refreshAll();
+    neon.refreshAll()
 }
diff --git a/entity/Classification_entity/documentation.adoc b/entity/Classification_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a233f0ddd65b389f852dd38257a5a091755c6da4
--- /dev/null
+++ b/entity/Classification_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Classification_entity
+
+Offers the possibility to flexibly classify sales projects. The classification can be dynamically configured at runtime.
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/objectrowid_param/valueProcess.js b/entity/Classification_entity/entityfields/classifications/documentation.adoc
similarity index 100%
rename from entity/Attribute_entity/entityfields/objectrowid_param/valueProcess.js
rename to entity/Classification_entity/entityfields/classifications/documentation.adoc
diff --git a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
index 1fc228180126c76ef7ffa696dd0323d8995d87e9..ec5ab1675e3112be2f54f359c75704c276bdfd9b 100644
--- a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
@@ -49,10 +49,10 @@ if (vars.exists("$local.filter") && vars.get("$local.filter"))
 
 var masking = new SqlMaskingUtils();
 result.object(db.table(cond.buildSql("select case when CLASSIFICATIONID is not null then " + masking.concat(["'C,'", "CLASSIFICATIONID"], "", false) + " else " + masking.concat(["'T,'", "CLASSIFICATIONTYPEID"], "", false) + " end, CLASSIFICATIONID, CLASSIFICATIONGROUP, CLASSIFICATIONSCORE_ID, CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE_ID, OBJECT_TYPE, OBJECT_ROWID, SCORETYPE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPE from CLASSIFICATION \n\
-                right join CLASSIFICATIONTYPE on " + db.translateCondition(SqlCondition.begin()
+                right join CLASSIFICATIONTYPE on " + SqlCondition.begin()
                     .and("CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPEID")
                     .andPrepareVars("CLASSIFICATION.OBJECT_TYPE", "$param.ObjectType_param")
-                    .andPrepareVars("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param").build()), "1=2", "order by CLASSIFICATIONGROUP asc"))
+                    .andPrepareVars("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param").translate(), "1=2", "order by CLASSIFICATIONGROUP asc"))
                 .map(function(pRow)
                 {
                     pRow.push(scores);
diff --git a/entity/CommRestriction_Entity/CommRestriction_Entity.aod b/entity/CommRestriction_Entity/CommRestriction_Entity.aod
index ac6b66211199b6399f29d5678b612d5d03d2c14e..cb183a4c45ca2822f35ee73b43b33071468d45d4 100644
--- a/entity/CommRestriction_Entity/CommRestriction_Entity.aod
+++ b/entity/CommRestriction_Entity/CommRestriction_Entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>CommRestriction_Entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/CommRestriction_Entity/documentation.adoc</documentation>
   <title>Advertising ban</title>
   <titlePlural>Advertising bans</titlePlural>
   <recordContainer>db</recordContainer>
@@ -77,13 +78,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>PersonId_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ContactId_param</name>
diff --git a/entity/CommRestriction_Entity/documentation.adoc b/entity/CommRestriction_Entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6f8d10cfd46c4028c918f04efaaff2b59bb7a0a8
--- /dev/null
+++ b/entity/CommRestriction_Entity/documentation.adoc
@@ -0,0 +1,3 @@
+= CommRestriction_Entity
+
+Entity to manage and display the consent of communication
\ No newline at end of file
diff --git a/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js b/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
index 24b69f8a551eaa0f8d9d9a0b65efbaad1eb1f220..d760344b91a0c779413d74c31aa2b4cf74c8f355 100644
--- a/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("COMMRESTRICTION.CONTACT_ID", "$param.ContactId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod
index c9d117fe06fd0f181bd4e136b7e4d2cba56fae64..73141ededd44f14f8303db1ef5f6ba3e633516bd 100644
--- a/entity/Communication_entity/Communication_entity.aod
+++ b/entity/Communication_entity/Communication_entity.aod
@@ -3,6 +3,7 @@
   <name>Communication_entity</name>
   <description>former Comm</description>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Communication_entity/documentation.adoc</documentation>
   <title>Communication</title>
   <contentTitleProcess>%aditoprj%/entity/Communication_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
@@ -234,6 +235,9 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <expose v="true" />
       <documentation>%aditoprj%/entity/Communication_entity/entityfields/address_param/documentation.adoc</documentation>
     </entityParameter>
+    <entityField>
+      <name>SEARCHADDR</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -264,6 +268,7 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>ADDR.value</name>
           <recordfield>COMMUNICATION.ADDR</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>MEDIUM_ID.value</name>
@@ -317,8 +322,15 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <indexRecordFieldMapping>
           <name>ADDR.value</name>
           <indexFieldType>COMMUNICATION</indexFieldType>
+          <additionalFieldNameAliases />
           <isMultiValued v="true" />
         </indexRecordFieldMapping>
+        <indexRecordFieldMapping>
+          <name>SEARCHADDR.value</name>
+          <indexFieldType>STRING</indexFieldType>
+          <isStored v="true" />
+          <isGlobalSearchField v="false" />
+        </indexRecordFieldMapping>
       </indexFieldMappings>
     </indexRecordContainer>
   </recordContainers>
diff --git a/entity/Communication_entity/documentation.adoc b/entity/Communication_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..472a1b4da4fe0ca593877bb20160138eb9732764
--- /dev/null
+++ b/entity/Communication_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Communication_entity
+
+Management of the communication data of a contact or company
\ No newline at end of file
diff --git a/entity/Communication_entity/entityfields/addr/valueProcess.js b/entity/Communication_entity/entityfields/addr/valueProcess.js
index 64ebd499996180f558787e6a291620ef0a6f8e05..2a497dc2fe3ebf609965ae757041b482dea378be 100644
--- a/entity/Communication_entity/entityfields/addr/valueProcess.js
+++ b/entity/Communication_entity/entityfields/addr/valueProcess.js
@@ -30,8 +30,7 @@ if (recordstate == neon.OPERATINGSTATE_NEW || recordstate == neon.OPERATINGSTATE
             case "TELEPHONE": // Phone
                 if(addr.length > 5)
                 {
-                    var formatted = cti.formatPhoneNumber(addr, true, vars.get("$param.ContactsMainCountry_param"))
-                    result.string(cti.formatPhoneNumber(addr, true, vars.get("$param.ContactsMainCountry_param")))
+                    result.string(cti.formatPhoneNumber(addr, true, vars.get("$param.ContactsMainCountry_param")));
                 }
                 break;
             default:
diff --git a/entity/Communication_entity/recordcontainers/db/conditionProcess.js b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
index 37c61938b1dbac04b6054ddcc63ebb26a8bed8db..559ccb068f163ac4d4385046693c2e65c4cf82b9 100644
--- a/entity/Communication_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
@@ -14,4 +14,5 @@ if (vars.exists("$param.CommMediumIds_param"))
     if(mediumIds.length > 0) 
         cond.andIn("COMMUNICATION.MEDIUM_ID", mediumIds);
 }
-result.string(db.translateCondition(cond.build("1 = 2")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 2"));
\ No newline at end of file
diff --git a/entity/Communication_entity/recordcontainers/groupextension/query.js b/entity/Communication_entity/recordcontainers/groupextension/query.js
index 175c25d9aa7ea3eb64603cbec5ff91a1f143ccf6..90e60238b1ad27ca57afabc7df7bf51780197377 100644
--- a/entity/Communication_entity/recordcontainers/groupextension/query.js
+++ b/entity/Communication_entity/recordcontainers/groupextension/query.js
@@ -10,7 +10,8 @@ if (vars.exists("$local.idvalue")) {
     //TODO: refactor this for incremental indexer (injections?)
 }
 
-sqlQuery = "select COMMUNICATION.COMMUNICATIONID" 
+sqlQuery = "select COMMUNICATION.COMMUNICATIONID"
+ + ', COMMUNICATION.COMMUNICATIONID as "_uid_"'
     + ", COMMUNICATION.ADDR" 
     + " from COMMUNICATION"
  + (queryCondition || "") 
diff --git a/entity/Competition_entity/Competition_entity.aod b/entity/Competition_entity/Competition_entity.aod
index ff1e4363a8bf6c313c032c77c11ca071ce84fd79..7ddb1e9d00f9028ed2267ec246131684684e862b 100644
--- a/entity/Competition_entity/Competition_entity.aod
+++ b/entity/Competition_entity/Competition_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Competition_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Competition_entity/documentation.adoc</documentation>
   <title>Competition</title>
   <titlePlural>Competition</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/Competition_entity/documentation.adoc b/entity/Competition_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1989ea6fe2f8d1c8d7e76745749cd95147f0bd7e
--- /dev/null
+++ b/entity/Competition_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Competition_entity
+
+Concrete use of the classification (classification_entity) in the sales project
\ No newline at end of file
diff --git a/entity/Competition_entity/recordcontainers/db/conditionProcess.js b/entity/Competition_entity/recordcontainers/db/conditionProcess.js
index 36a6c0309824b2784d53f43c171dd189b2ef7f5b..52236b9cc27c8779af71788cfc43fd674638bc2c 100644
--- a/entity/Competition_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Competition_entity/recordcontainers/db/conditionProcess.js
@@ -6,6 +6,5 @@ var cond = new SqlCondition();
 cond.andPrepareVars("COMPETITION.OBJECT_ROWID", "$param.ObjectRowId_param"),
 cond.andPrepareVars("COMPETITION.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-
-result.string(db.translateCondition(cond.build("1 = 1")));
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
diff --git a/entity/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod
index 38b5ede02171c98390b2cee907bcf1a5b5b43dee..30fbeeaef562a1ac2f9276b6221cb12f9f0486e8 100644
--- a/entity/Contact_entity/Contact_entity.aod
+++ b/entity/Contact_entity/Contact_entity.aod
@@ -4,6 +4,10 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Contact_entity/documentation.adoc</documentation>
   <title>Contact</title>
+  <grantCreateProcess>%aditoprj%/entity/Contact_entity/grantCreateProcess.js</grantCreateProcess>
+  <grantUpdateProcess>%aditoprj%/entity/Contact_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/Contact_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <contentTitleProcess>%aditoprj%/entity/Contact_entity/contentTitleProcess.js</contentTitleProcess>
   <onValidation>%aditoprj%/entity/Contact_entity/onValidation.js</onValidation>
   <iconId>VAADIN:USERS</iconId>
   <titlePlural>Contacts</titlePlural>
@@ -27,9 +31,10 @@
       <name>ORGANISATION_ID</name>
       <title>Company</title>
       <consumer>Organisations</consumer>
+      <linkedContext>Organisation</linkedContext>
       <mandatory v="false" />
+      <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/organisation_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Contact_entity/entityfields/organisation_id/displayValueProcess.js</displayValueProcess>
-      <onValidation>%aditoprj%/entity/Contact_entity/entityfields/organisation_id/onValidation.js</onValidation>
     </entityField>
     <entityField>
       <name>PERSON_ID</name>
@@ -77,6 +82,16 @@
     </entityParameter>
     <entityProvider>
       <name>PersonRelated</name>
+      <targetContextField>targetContext</targetContextField>
+      <targetIdField>CONTACTID</targetIdField>
+      <dependencies>
+        <entityDependency>
+          <name>14975dad-907c-4f8c-bd39-243508ede721</name>
+          <entityName>PrivatePerson_entity</entityName>
+          <fieldName>Persons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
       <children>
         <entityParameter>
           <name>OwnContactId_param</name>
@@ -212,6 +227,25 @@
       <name>DATE_EDIT</name>
       <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/date_edit/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>ORGANISATION_CONTACTID</name>
+      <title>Company</title>
+      <consumer>Organisations</consumer>
+      <linkedContextProcess>%aditoprj%/entity/Contact_entity/entityfields/organisation_contactid/linkedContextProcess.js</linkedContextProcess>
+      <displayValueProcess>%aditoprj%/entity/Contact_entity/entityfields/organisation_contactid/displayValueProcess.js</displayValueProcess>
+      <onValidation>%aditoprj%/entity/Contact_entity/entityfields/organisation_contactid/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>ContactLink</name>
+      <linkedContext>Person</linkedContext>
+      <stateProcess>%aditoprj%/entity/Contact_entity/entityfields/contactlink/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/contactlink/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Contact_entity/entityfields/contactlink/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityParameter>
+      <name>Readonly_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -222,19 +256,26 @@
       <orderClauseProcess>%aditoprj%/entity/Contact_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
       <linkInformation>
         <linkInformation>
-          <name>31dbd8d8-b10c-4621-ab45-b735216f078f</name>
+          <name>86ded52f-1b55-4d3d-b89d-23c465f20566</name>
           <tableName>CONTACT</tableName>
           <primaryKey>CONTACTID</primaryKey>
           <isUIDTable v="true" />
           <readonly v="false" />
         </linkInformation>
         <linkInformation>
-          <name>31948bfb-2fe9-4345-a65c-14ad49ffbc0e</name>
+          <name>61f92ee5-db46-4e17-a90d-02223e0df942</name>
           <tableName>ORGANISATION</tableName>
           <primaryKey>ORGANISATIONID</primaryKey>
           <isUIDTable v="false" />
           <readonly v="true" />
         </linkInformation>
+        <linkInformation>
+          <name>e74fd752-ef38-414d-adda-11e21258c5d4</name>
+          <tableName>PERSON</tableName>
+          <primaryKey>PERSONID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
       </linkInformation>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -293,6 +334,18 @@
           <name>ORGANISATION_ID.displayValue</name>
           <recordfield>ORGANISATION.NAME</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACTID.value</name>
+          <expression>%aditoprj%/entity/Contact_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACTID.displayValue</name>
+          <recordfield>ORGANISATION.NAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACTID.displayValue</name>
+          <expression>%aditoprj%/entity/Contact_entity/recordcontainers/db/recordfieldmappings/contactid.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Contact_entity/contentTitleProcess.js b/entity/Contact_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7bcf6f86770c77e6ab03abc04da3e7a7da93d56
--- /dev/null
+++ b/entity/Contact_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.PERSON_TITLE"))
\ No newline at end of file
diff --git a/entity/Contact_entity/documentation.adoc b/entity/Contact_entity/documentation.adoc
index 46715c6b8ede44d2f5fd9939abccce23b71dcf63..0d02f16097e4550a414328f833e51a548b546bd5 100644
--- a/entity/Contact_entity/documentation.adoc
+++ b/entity/Contact_entity/documentation.adoc
@@ -1 +1,3 @@
+= Contact_entity
+
 Represents a Contact without detail information to Organisations/Persons
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/contactlink/displayValueProcess.js b/entity/Contact_entity/entityfields/contactlink/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..62574e8a0223ab125ea6c747bfd71e5f79499622
--- /dev/null
+++ b/entity/Contact_entity/entityfields/contactlink/displayValueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.#CONTENTTITLE"))
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/contactlink/stateProcess.js b/entity/Contact_entity/entityfields/contactlink/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3afd02855e08c622ff99594ab3cf436e9b4ae6f6
--- /dev/null
+++ b/entity/Contact_entity/entityfields/contactlink/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_VIEW)
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE)
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE)
+}
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js b/entity/Contact_entity/entityfields/contactlink/valueProcess.js
similarity index 52%
rename from entity/Organisation_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js
rename to entity/Contact_entity/entityfields/contactlink/valueProcess.js
index 7b6137b4d105e9ba592cf8ef6e796fb838a32b09..9529d58b24d5acfcb00d4648a1fb5e81e0f0667f 100644
--- a/entity/Organisation_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js
+++ b/entity/Contact_entity/entityfields/contactlink/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
+result.string(vars.get("$field.CONTACTID"))
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/organisation_contactid/displayValueProcess.js b/entity/Contact_entity/entityfields/organisation_contactid/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8538bcbb3881fa9bdca94b8f4b74e7ea7ad26995
--- /dev/null
+++ b/entity/Contact_entity/entityfields/organisation_contactid/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Contact_lib");
+
+var orgContactId = vars.get("$field.ORGANISATION_CONTACTID");
+var res = OrganisationUtils.getNameByContactId(orgContactId);
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/organisation_contactid/linkedContextProcess.js b/entity/Contact_entity/entityfields/organisation_contactid/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8109a73904f005b84aad16997a6bd8e22bb3a7e6
--- /dev/null
+++ b/entity/Contact_entity/entityfields/organisation_contactid/linkedContextProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+
+if(vars.get("$field.ORGANISATION_ID").trim() != "0")
+    result.string("Organisation");
+
+
diff --git a/entity/Contact_entity/entityfields/organisation_contactid/onValidation.js b/entity/Contact_entity/entityfields/organisation_contactid/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..94865c1d50a90d9c07c3cc5edd7ad5bded069ab4
--- /dev/null
+++ b/entity/Contact_entity/entityfields/organisation_contactid/onValidation.js
@@ -0,0 +1,26 @@
+import("Contact_lib");
+import("system.translate");
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Entity_lib");
+import("Sql_lib");
+
+var personId = vars.getString("$field.PERSON_ID");
+var organisationId;
+var orgContactId = vars.get("$local.value");
+var organisationIds = ContactUtils.getPersOrgIds(orgContactId)
+    
+if (organisationIds.length > 0 && organisationIds[2])
+{
+    organisationId = organisationIds[2];
+    
+    var contactId = null;
+    if (vars.get("$field.CONTACTID"))
+        contactId = vars.get("$field.CONTACTID");
+
+    var validationMsg = ContactUtils.validateIfAlreadyExists(personId, organisationId, contactId);
+    if (validationMsg)
+        result.string(validationMsg);
+}
+
diff --git a/entity/Contact_entity/entityfields/organisation_id/onValidation.js b/entity/Contact_entity/entityfields/organisation_id/onValidation.js
deleted file mode 100644
index 2d8449de821c3519c108f09d553f73d05a70be1a..0000000000000000000000000000000000000000
--- a/entity/Contact_entity/entityfields/organisation_id/onValidation.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("Contact_lib");
-import("system.translate");
-import("system.result");
-import("system.db");
-import("system.vars");
-import("Entity_lib");
-import("Sql_lib");
-
-var personId = vars.getString("$field.PERSON_ID");
-var organisationId = vars.get("$local.value");
-
-//a entry within the Contact_enity can never be edited only created (it's edited within the Person_entity)
-//so no need to provide our own CONTACTID since it does not exist in the database right now => provide null instead
-var validationMsg = ContactUtils.validateIfAlreadyExists(personId, organisationId, null);
-if (validationMsg)
-    result.string(validationMsg);
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/organisation_id/valueProcess.js b/entity/Contact_entity/entityfields/organisation_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3771ef7f2a21107b978f25667f92be8609b941c
--- /dev/null
+++ b/entity/Contact_entity/entityfields/organisation_id/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+var orgContactId = vars.get("$field.ORGANISATION_CONTACTID");
+var organisationIds = ContactUtils.getPersOrgIds(orgContactId)
+    
+if (organisationIds.length > 0 && organisationIds[2])
+{
+    result.string(organisationIds[2])
+}
diff --git a/entity/Contact_entity/grantCreateProcess.js b/entity/Contact_entity/grantCreateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbc1514f0c084cfa90702bbf6a4003ed49ca3c66
--- /dev/null
+++ b/entity/Contact_entity/grantCreateProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$param.Readonly_param") != "true" && vars.get("$param.Readonly_param") != "1")
diff --git a/entity/Contact_entity/grantDeleteProcess.js b/entity/Contact_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbc1514f0c084cfa90702bbf6a4003ed49ca3c66
--- /dev/null
+++ b/entity/Contact_entity/grantDeleteProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$param.Readonly_param") != "true" && vars.get("$param.Readonly_param") != "1")
diff --git a/entity/Contact_entity/grantUpdateProcess.js b/entity/Contact_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbc1514f0c084cfa90702bbf6a4003ed49ca3c66
--- /dev/null
+++ b/entity/Contact_entity/grantUpdateProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$param.Readonly_param") != "true" && vars.get("$param.Readonly_param") != "1")
diff --git a/entity/Contact_entity/recordcontainers/db/conditionProcess.js b/entity/Contact_entity/recordcontainers/db/conditionProcess.js
index 2433febc9615e28b2ca3a7d32b136122038e2aed..26fac7ff087ae3f410cdb0bff013750721ad7cc8 100644
--- a/entity/Contact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Contact_entity/recordcontainers/db/conditionProcess.js
@@ -7,5 +7,5 @@ var cond = new SqlCondition();
 cond.andPrepareVars("CONTACT.CONTACTID", "$param.OwnContactId_param", "# != ?");
 cond.andPrepareVars("CONTACT.PERSON_ID", "$param.PersonId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 2")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 2"));
\ No newline at end of file
diff --git a/entity/Contact_entity/recordcontainers/db/fromClauseProcess.js b/entity/Contact_entity/recordcontainers/db/fromClauseProcess.js
index f1b7f857628de43f0e06daf553421d7758a099ff..2a1676782e0d967718af1f31e79cb9761ba19723 100644
--- a/entity/Contact_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Contact_entity/recordcontainers/db/fromClauseProcess.js
@@ -1,4 +1,6 @@
 import("system.result");
 
-result.string("CONTACT\n\
-        join ORGANISATION on CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID");
\ No newline at end of file
+result.string("CONTACT \n\
+    join PERSON on (PERSON.PERSONID = CONTACT.PERSON_ID) \n\
+    join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID) \n\
+    left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)");
diff --git a/entity/Contact_entity/recordcontainers/db/recordfieldmappings/contactid.displayvalue/expression.js b/entity/Contact_entity/recordcontainers/db/recordfieldmappings/contactid.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5f6d2a4902ec5e2ffaa71188b089757bb66701e
--- /dev/null
+++ b/entity/Contact_entity/recordcontainers/db/recordfieldmappings/contactid.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Person_lib");
+import("system.result");
+
+result.string(PersUtils.getDisplaySqlExpression());
\ No newline at end of file
diff --git a/entity/Contact_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js b/entity/Contact_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e62e1b81eeae4f98f847c4ba99aec94b41747ab
--- /dev/null
+++ b/entity/Contact_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("select CONTACT.CONTACTID from CONTACT where CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID and CONTACT.PERSON_ID is null")
\ No newline at end of file
diff --git a/entity/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod
index 95285692f1ee0c680ec64642e56e851d99d2d4fc..3b2944a9987dd5b6b92b56195e447aab43793cec 100644
--- a/entity/Context_entity/Context_entity.aod
+++ b/entity/Context_entity/Context_entity.aod
@@ -3,7 +3,9 @@
   <name>Context_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Context_entity/documentation.adoc</documentation>
+  <title>Private person</title>
   <contentTitleProcess>%aditoprj%/entity/Context_entity/contentTitleProcess.js</contentTitleProcess>
+  <titlePlural>Private persons</titlePlural>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -16,12 +18,6 @@
           <fieldName>Context</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>f1eebe8c-93d2-4977-b619-b6315f843f7a</name>
-          <entityName>AttributeUsage_entity</entityName>
-          <fieldName>Context</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
@@ -59,28 +55,20 @@
           <fieldName>Contexts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>420468aa-c237-4e29-a24f-8851e56343b9</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>Contexts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>98695ca8-7f46-489d-a479-f856f6d2b5ca</name>
-          <entityName>Order_entity</entityName>
-          <fieldName>Contexts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
-          <name>ExclusiveContexts_param</name>
+          <name>InvertBlacklist_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>Blacklist_param</name>
           <expose v="false" />
         </entityParameter>
       </children>
     </entityProvider>
     <entityParameter>
-      <name>ExclusiveContexts_param</name>
+      <name>Blacklist_param</name>
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
@@ -96,8 +84,8 @@
       </dependencies>
       <children>
         <entityParameter>
-          <name>ExclusiveContexts_param</name>
-          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js</valueProcess>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/activitylinkable/children/blacklist_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
       </children>
@@ -114,8 +102,8 @@
       </dependencies>
       <children>
         <entityParameter>
-          <name>ExclusiveContexts_param</name>
-          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js</valueProcess>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/tasklinkable/children/blacklist_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
       </children>
@@ -126,14 +114,39 @@
       <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
-      <name>UseExclusives_param</name>
+      <name>InvertBlacklist_param</name>
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
-    <entityParameter>
-      <name>Whitelist</name>
-      <expose v="true" />
-    </entityParameter>
+    <entityProvider>
+      <name>Exclusive</name>
+      <dependencies>
+        <entityDependency>
+          <name>2fb3e0df-0372-4ba4-acde-210432517ee8</name>
+          <entityName>Offer_entity</entityName>
+          <fieldName>Contexts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>66a69b09-d02a-4de6-a2dd-d11ce1467e01</name>
+          <entityName>Order_entity</entityName>
+          <fieldName>Contexts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>b48df8c7-9d56-40f2-8269-b749afc92af5</name>
+          <entityName>Attribute_entity</entityName>
+          <fieldName>Contexts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>9ad799f1-6303-4119-9bea-8e559850541b</name>
+          <entityName>AttributeUsage_entity</entityName>
+          <fieldName>Context</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Context_entity/documentation.adoc b/entity/Context_entity/documentation.adoc
index b70499460540837e47eeebbeff55abc8f2243b91..ae5d55be6ff969efaa54bbd3abc422a32bc252aa 100644
--- a/entity/Context_entity/documentation.adoc
+++ b/entity/Context_entity/documentation.adoc
@@ -1,4 +1,4 @@
-== Context_entity ==
+= Context_entity
 
 This Entity provides access to contexts.
 
diff --git a/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js b/entity/Context_entity/entityfields/activitylinkable/children/blacklist_param/valueProcess.js
similarity index 100%
rename from entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js
rename to entity/Context_entity/entityfields/activitylinkable/children/blacklist_param/valueProcess.js
diff --git a/entity/Context_entity/entityfields/dummyyy/valueProcess.js b/entity/Context_entity/entityfields/dummyyy/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c705ff52951c0e86b46d5b2ed2edaea260f0313
--- /dev/null
+++ b/entity/Context_entity/entityfields/dummyyy/valueProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.string("asdf")
\ No newline at end of file
diff --git a/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js b/entity/Context_entity/entityfields/tasklinkable/children/blacklist_param/valueProcess.js
similarity index 100%
rename from entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js
rename to entity/Context_entity/entityfields/tasklinkable/children/blacklist_param/valueProcess.js
diff --git a/entity/Context_entity/recordcontainers/jdito/contentProcess.js b/entity/Context_entity/recordcontainers/jdito/contentProcess.js
index 724a3ee8aaa0fe195d5e26ad33af184ef7cefbd2..25682212551e2b430d137096dd04818e97fbfb5f 100644
--- a/entity/Context_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Context_entity/recordcontainers/jdito/contentProcess.js
@@ -2,11 +2,25 @@ import("system.vars");
 import("system.result");
 import("Context_lib");
 
-var excludeContexts = vars.getString("$param.ExclusiveContexts_param");
-if (excludeContexts)
-    excludeContexts = JSON.parse(excludeContexts);
-var filterContexts = !(vars.exists("$param.GetAllContexts_param") && vars.get("$param.GetAllContexts_param") == "true");
-var useExclusives = vars.exists("$param.UseExclusives_param") && vars.get("$param.UseExclusives_param") == "true";
-var whitelist = vars.exists("$param.Whitelist") && vars.get("$param.Whitelist") ? JSON.parse(vars.get("$param.Whitelist")) : undefined;
+var blacklist
+var invertBlacklist
+var filterContexts = vars.get("$param.GetAllContexts_param") != "true";
+var whitelist;
 
-result.object(ContextUtils.getContexts(filterContexts, excludeContexts, useExclusives, whitelist));
\ No newline at end of file
+if (vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0)
+{
+    blacklist = vars.get("$local.idvalues")
+    invertBlacklist = true;
+}
+else
+{
+    blacklist = vars.getString("$param.Blacklist_param");
+    if (blacklist)
+        blacklist = JSON.parse(blacklist);
+    else
+        blacklist = undefined;
+    
+    invertBlacklist = vars.get("$param.InvertBlacklist_param") == "true";
+}
+
+result.object(ContextUtils.getContexts(filterContexts, blacklist, invertBlacklist));
\ No newline at end of file
diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod
index 52283a9db64a6e7fb6d341afbd64cd2076ce3bf8..a3f94750a83b31999ba354cd7364a75f21098bef 100644
--- a/entity/Contract_entity/Contract_entity.aod
+++ b/entity/Contract_entity/Contract_entity.aod
@@ -124,6 +124,7 @@
     <entityField>
       <name>IMAGE</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/image/valueProcess.js</valueProcess>
     </entityField>
     <entityFieldGroup>
diff --git a/entity/Contract_entity/entityfields/maindocuments/stateProcess.js b/entity/Contract_entity/entityfields/maindocuments/stateProcess.js
index d22f90760a8cc65ddc9c0752d92c11bb48cfe947..496be2b2db76049d7730c4a2dc25060ec8fa62d5 100644
--- a/entity/Contract_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Contract_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("CONTRACT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("CONTRACT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Contract_entity/grantDeleteProcess.js b/entity/Contract_entity/grantDeleteProcess.js
index 36b39de07882145d3528ad277b799a36d79c4a6e..551b9b070c74e265757521c7a47c460816cc1b77 100644
--- a/entity/Contract_entity/grantDeleteProcess.js
+++ b/entity/Contract_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTRACT", null, vars.get("$field.CONTRACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("CONTRACT", null, vars.get("$field.CONTRACTID"))
+//    && !TaskUtils.hasTasks(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/db/conditionProcess.js b/entity/Contract_entity/recordcontainers/db/conditionProcess.js
index efee86e66ac2e77e2cdd918f417113223a973b47..4557e1b43f7d3aed3b96c6834ba9868a8136282e 100644
--- a/entity/Contract_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Contract_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 
 var cond = SqlCondition.begin().andPrepareVars("CONTRACT.CONTACT_ID", "$param.ContactId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1"))); 
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1")); 
diff --git a/entity/Countries_Entity/documentation.adoc b/entity/Countries_Entity/documentation.adoc
index 4555bf1dfd8350985bc3d22d1c65005d245f4085..6af57c1dc49b08cdba1a7586222917ca872fd5dd 100644
--- a/entity/Countries_Entity/documentation.adoc
+++ b/entity/Countries_Entity/documentation.adoc
@@ -1,4 +1,4 @@
-=== Purpose of this Entity
+= Countries_Entity
 
 The `Countries_Entity` is used for keeping information about the Countries of the world.
 It could be easily extend to hold information like:
diff --git a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
index 63799aa5b51f135558faf9a76e2e1521d47936b5..3a93c868fef2e8cad9751279d37f2494b489eb04 100644
--- a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
+++ b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DSGVOInfo_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DSGVOInfo_entity/documentation.adoc</documentation>
   <onValidation>%aditoprj%/entity/DSGVOInfo_entity/onValidation.js</onValidation>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -20,8 +21,8 @@
       <name>GUARANTEE</name>
       <title>Guarantees</title>
       <consumer>KeywordGuarantee</consumer>
-      <mandatoryProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/garantee/mandatoryProcess.js</mandatoryProcess>
-      <stateProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/garantee/stateProcess.js</stateProcess>
+      <mandatoryProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/guarantee/mandatoryProcess.js</mandatoryProcess>
+      <stateProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/guarantee/stateProcess.js</stateProcess>
     </entityField>
     <entityField>
       <name>DATASOURCE</name>
diff --git a/entity/DSGVOInfo_entity/documentation.adoc b/entity/DSGVOInfo_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b97729c5d48b5fb0134b0f1e9f8e529152d17814
--- /dev/null
+++ b/entity/DSGVOInfo_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DSGVOInfo_entity
+
+Entity for mapping the logic for DSGVO Report
\ No newline at end of file
diff --git a/entity/DSGVOInfo_entity/entityfields/garantee/mandatoryProcess.js b/entity/DSGVOInfo_entity/entityfields/guarantee/mandatoryProcess.js
similarity index 100%
rename from entity/DSGVOInfo_entity/entityfields/garantee/mandatoryProcess.js
rename to entity/DSGVOInfo_entity/entityfields/guarantee/mandatoryProcess.js
diff --git a/entity/DSGVOInfo_entity/entityfields/garantee/stateProcess.js b/entity/DSGVOInfo_entity/entityfields/guarantee/stateProcess.js
similarity index 100%
rename from entity/DSGVOInfo_entity/entityfields/garantee/stateProcess.js
rename to entity/DSGVOInfo_entity/entityfields/guarantee/stateProcess.js
diff --git a/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js b/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
index f0bdb7475688526b0d705c146f30a8081f545f8c..6f0d35228e884a8086cfd94186cf1e6b0337aeee 100644
--- a/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
@@ -2,8 +2,7 @@ import("system.db");
 import("system.result");
 import("Sql_lib");
 
-result.string(db.translateCondition(
-    SqlCondition.begin()
+result.string(SqlCondition.begin()
                .andPrepareVars("DSGVOINFO.CONTACT_ID", "$param.ContactId_param")
-               .build("1=1")))
+               .translate("1=1"))
                
\ No newline at end of file
diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod
index 0d673ba4b18194ec6f895509d890ab1cf87e32f1..9a7495a7006c35cd38abae711306219ee914bf40 100644
--- a/entity/DSGVO_entity/DSGVO_entity.aod
+++ b/entity/DSGVO_entity/DSGVO_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DSGVO_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DSGVO_entity/documentation.adoc</documentation>
   <icon>VAADIN:LOCK</icon>
   <title>Data Privacy</title>
   <siblings>
diff --git a/entity/DSGVO_entity/documentation.adoc b/entity/DSGVO_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f9d086c2576e5633040cbe6b7c58b605e5cff768
--- /dev/null
+++ b/entity/DSGVO_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DSGVO_entity
+
+Entity for mapping the logic for DSGVO
\ No newline at end of file
diff --git a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
index 93080c0b9269dc99f9f0aad73e6d7fda37bc0df4..a27d79f64fd64d52017b29866be2b681e30255b9 100644
--- a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
+++ b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DefaultAdminView_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DefaultAdminView_entity/documentation.adoc</documentation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/DefaultAdminView_entity/documentation.adoc b/entity/DefaultAdminView_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..abb00576a250a54aa5bf206968f5b3aad56a1e28
--- /dev/null
+++ b/entity/DefaultAdminView_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= DefaultAdminView_entity
+
+Views the rows of the entity "AdminViewRow_entity" and will open via actions out of other entity.
+For example: The "Person_entity" has a action "openAdminView" which opens the view and logic of this entity.
\ No newline at end of file
diff --git a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
index a363513e906fc4d0ed343a4e325d5c2b28c8ec71..1e60fad3fa04f8aac3f4d253969b2b0887e1c770 100644
--- a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
+++ b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DescriptionTranslation_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DescriptionTranslation_entity/documentation.adoc</documentation>
   <title>Description</title>
   <titlePlural>Descriptions</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/DescriptionTranslation_entity/documentation.adoc b/entity/DescriptionTranslation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c267619bf66e401654b1b876843ceb1766971e1d
--- /dev/null
+++ b/entity/DescriptionTranslation_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DescriptionTranslation_entity
+
+Used for translations at runtime. Concrete use in product descriptions (Product_entity)
\ No newline at end of file
diff --git a/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js b/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
index 59b16d3684e1267b5ac40e6cb6bc9e926ffca60c..a3f2489e6856fc2df4add98949246935c03b7f7d 100644
--- a/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
@@ -6,4 +6,5 @@ var cond = SqlCondition.begin()
                        .andPrepareVars("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "$param.ObjectType_param")
                        .andPrepareVars("DESCRIPTIONTRANSLATION.OBJECT_ROWID", "$param.ObjectRowid_param");
                        
-result.string(db.translateCondition(cond.build("1 = 2")))
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"))
\ No newline at end of file
diff --git a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
index cf36cf798beb709571f6badf82127b08418cf767..1e875d50aea9c0d4684abf673de5bf3fc4a9e248 100644
--- a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
+++ b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DocumentTemplateLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DocumentTemplateLink_entity/documentation.adoc</documentation>
   <title>Attachment</title>
   <recordContainer>db</recordContainer>
   <entityFields>
diff --git a/entity/DocumentTemplateLink_entity/documentation.adoc b/entity/DocumentTemplateLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..74990aab42f4c882f17680807b0a66bf2c530bff
--- /dev/null
+++ b/entity/DocumentTemplateLink_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DocumentTemplateLink_entity
+
+Links of document templates to other modules
\ No newline at end of file
diff --git a/entity/DocumentTemplateLink_entity/entityfields/opendocument/onActionProcess.js b/entity/DocumentTemplateLink_entity/entityfields/opendocument/onActionProcess.js
index c943e852369cd24ce58978071cd6917b197414e1..2000c11bdfc242091707529e9500896f728ec98e 100644
--- a/entity/DocumentTemplateLink_entity/entityfields/opendocument/onActionProcess.js
+++ b/entity/DocumentTemplateLink_entity/entityfields/opendocument/onActionProcess.js
@@ -5,8 +5,8 @@ import("system.neon");
 
 var fileInformation = db.array(db.ROW, SqlCondition.begin()
     .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.DOCUMENTTEMPLATE_ID_CHILD")
-    .buildSql("select ID, FILENAME from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-var data = db.getBinaryContent(fileInformation[0], SqlUtils.getSystemAlias());
+    .buildSql("select ID, FILENAME from ASYS_BINARIES"), SqlUtils.getBinariesAlias());
+var data = db.getBinaryContent(fileInformation[0], SqlUtils.getBinariesAlias());
 neon.download(data, fileInformation[1]);
 
 
diff --git a/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
index 71ea6e3b7429b2c32f14f376e501a3dc7ce29180..42bd0124d8b04c8af7aa44139283277c30bb99d6 100644
--- a/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
@@ -5,4 +5,5 @@ import("Sql_lib");
 var cond = SqlCondition.begin()
                        .andPrepareVars("DOCUMENTTEMPLATELINK.DOCUMENTTEMPLATE_ID_PARENT", "$param.DocumentId_param")
 
-result.string(db.translateCondition(cond.build("1=2")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1=2"));
\ No newline at end of file
diff --git a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
index 3b69d2d67f8871f88a416e7728cc2cc582fa2ebb..376d96687f33e05737616b4e3adcdbee6709650c 100644
--- a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
+++ b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
@@ -2,11 +2,14 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DocumentTemplateTypeCategory_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <lookupIdfield>KEYID</lookupIdfield>
+      <recordContainer>db</recordContainer>
     </entityProvider>
     <entityParameter>
       <name>usageFilter_param</name>
@@ -21,10 +24,13 @@
     </entityField>
     <entityField>
       <name>TITLE</name>
+      <title>Classification</title>
+      <displayValueProcess>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/entityfields/title/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityProvider>
       <name>ByCategory</name>
       <lookupIdfield>KEYID</lookupIdfield>
+      <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
           <name>5eb6b17c-8c13-48df-84d5-a949b7d21cf3</name>
@@ -46,6 +52,7 @@
       <name>db</name>
       <alias>Data_alias</alias>
       <conditionProcess>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
       <linkInformation>
         <linkInformation>
           <name>6cfa2424-b81b-4750-ae43-e3b1126eab0a</name>
diff --git a/entity/DocumentTemplateTypeCategory_entity/documentation.adoc b/entity/DocumentTemplateTypeCategory_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c1189dd7d68ec14885ab34fecbb3cc7d0c668420
--- /dev/null
+++ b/entity/DocumentTemplateTypeCategory_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DocumentTemplateTypeCategory_entity
+
+Dynamic categorization of document templates depending on the type
\ No newline at end of file
diff --git a/entity/DocumentTemplateTypeCategory_entity/entityfields/title/displayValueProcess.js b/entity/DocumentTemplateTypeCategory_entity/entityfields/title/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..554c806f6eba1b0e1f71ea1b1b1b9dc8f032b094
--- /dev/null
+++ b/entity/DocumentTemplateTypeCategory_entity/entityfields/title/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+result.string(translate.text(vars.get("$field.TITLE")));
\ No newline at end of file
diff --git a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
index fbec14ab9a8ee34a4266a0dee44f95c8cc88326f..005177e8142faf31e9e609defe3acc8b9de77a0f 100644
--- a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
@@ -20,5 +20,5 @@ if (usageFilter)
                                                     from AB_KEYWORD_ATTRIBUTERELATION ", null, ")"));
 }
 
-cond = db.translateStatement(cond.build("1 = 2"));
+cond = cond.translate("1 = 2");
 result.string(cond);
\ No newline at end of file
diff --git a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e32403dc6e2df5902c3faeaf8f155a3b41a0f405
--- /dev/null
+++ b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,8 @@
+import("system.db");
+import("system.result");
+
+result.object({
+     "AB_KEYWORD_ENTRY.CONTAINER": db.ASCENDING
+    ,"AB_KEYWORD_ENTRY.SORTING": db.ASCENDING
+    ,"AB_KEYWORD_ENTRY.TITLE": db.ASCENDING
+});
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
index 8d4b79be20e1cb9bd76b48e48bf772199977214e..b9833b9b82be70c6fbddeef2c69bb87c21118e6f 100644
--- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
+++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
@@ -2,10 +2,12 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>DocumentTemplate_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/DocumentTemplate_entity/documentation.adoc</documentation>
   <icon>VAADIN:FILE_FONT</icon>
   <title>Document Template</title>
   <contentTitleProcess>%aditoprj%/entity/DocumentTemplate_entity/contentTitleProcess.js</contentTitleProcess>
   <afterUiInit>%aditoprj%/entity/DocumentTemplate_entity/afterUiInit.js</afterUiInit>
+  <onValidation>%aditoprj%/entity/DocumentTemplate_entity/onValidation.js</onValidation>
   <iconId>VAADIN:FILE_FONT</iconId>
   <titlePlural>Document templates</titlePlural>
   <recordContainer>db</recordContainer>
@@ -50,8 +52,12 @@
       <groupable v="true" />
       <mandatory v="true" />
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/kind/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/kind/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/kind/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/DocumentTemplate_entity/entityfields/kind/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
     </entityField>
     <entityField>
       <name>USER_EDIT</name>
@@ -67,11 +73,16 @@
       <title>Language</title>
       <consumer>Languages</consumer>
       <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/isolanguage/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>BINDATA</name>
       <contentType>FILE</contentType>
+      <onValueChange>%aditoprj%/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
     </entityField>
     <entityConsumer>
       <name>Documents</name>
@@ -134,22 +145,26 @@
       </children>
     </entityConsumer>
     <entityField>
-      <name>texText</name>
+      <name>Content</name>
       <title>Text</title>
       <contentType>LONG_TEXT</contentType>
-      <state>INVISIBLE</state>
-      <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/textext/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/textext/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/textext/displayValueProcess.js</displayValueProcess>
+      <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/content/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/content/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/content/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>CLASSIFICATION</name>
       <title>Classification</title>
       <consumer>DocumentTemplateTypeCategory</consumer>
       <groupable v="true" />
-      <state>DISABLED</state>
+      <mandatoryProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/classification/mandatoryProcess.js</mandatoryProcess>
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/classification/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/classification/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/classification/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/DocumentTemplate_entity/entityfields/classification/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
     </entityField>
     <entityConsumer>
       <name>DocumentTemplateTypeCategory</name>
@@ -277,6 +292,23 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityField>
+      <name>REPLACEMENTNAME</name>
+      <title>Replacement name</title>
+      <mandatoryProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/replacementname/mandatoryProcess.js</mandatoryProcess>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/replacementname/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/replacementname/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>Preview</name>
+      <title>Preview</title>
+      <description>This field is needed until the html editor does not remove pictures.</description>
+      <contentType>HTML</contentType>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/preview/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/preview/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -340,6 +372,10 @@
           <recordfield>DOCUMENTTEMPLATE.ISOLANGUAGE</recordfield>
           <isFilterable v="true" />
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>REPLACEMENTNAME.value</name>
+          <recordfield>DOCUMENTTEMPLATE.REPLACEMENTNAME</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/DocumentTemplate_entity/documentation.adoc b/entity/DocumentTemplate_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8a79901fced0d4b5f22a3b83f12dd8d24892d432
--- /dev/null
+++ b/entity/DocumentTemplate_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DocumentTemplate_entity
+
+Administration of document templates in the system
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/attributes/onValidation.js b/entity/DocumentTemplate_entity/entityfields/attributes/onValidation.js
index 37bb493f7803388fce9a592b674e4891ea56842e..b9ac3dbcb5c9e67a2961ce39d2732265ad02bdf5 100644
--- a/entity/DocumentTemplate_entity/entityfields/attributes/onValidation.js
+++ b/entity/DocumentTemplate_entity/entityfields/attributes/onValidation.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Attribute_lib");
 import("system.result");
 
-result.string(AttributeRelationUtils.validateAttributeCount(vars.get("$field.DOCUMENTTEMPLATEID"), ContextUtils.getCurrentContextId(), "Attributes"));
\ No newline at end of file
+//result.string(AttributeRelationUtils.validateAttributeCount(vars.get("$field.DOCUMENTTEMPLATEID"), ContextUtils.getCurrentContextId(), "Attributes"));
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js b/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..65023ac01660847511633352c0b28e9228d7ee66
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js
@@ -0,0 +1,13 @@
+import("DocumentTemplate_lib");
+import("system.neon");
+import("system.vars");
+
+// note: could not use only the valueProcess from $field.Content because then it refreshed $field.Content just before save.
+// --> only set in $field.Content.valueProcess if $field.Content is null and set it from here only if MASK triggered change
+if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW))
+{
+    [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$field.DOCUMENTTEMPLATEID"), new FileUpload(vars.get("$local.value")));
+
+    vars.set("$context.currentTemplateType", type);
+    vars.set("$field.Content", content)
+}
diff --git a/entity/DocumentTemplate_entity/entityfields/classification/mandatoryProcess.js b/entity/DocumentTemplate_entity/entityfields/classification/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6725a540edf2aa0e44bce526b568c8ed7df916f
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/classification/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$field.KIND") != $KeywordRegistry.documentTemplateType$attachment())
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/classification/onValueChange.js b/entity/DocumentTemplate_entity/entityfields/classification/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..289c2fbba4ee2ce4cc7bd50c04160869e267d204
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/classification/onValueChange.js
@@ -0,0 +1,11 @@
+import("system.vars");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("DocumentTemplate_lib");
+
+vars.set("$field.REPLACEMENTNAME", null);
+
+if (vars.get("$local.value") != $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate() && vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$textModular())
+{
+    vars.set("$context.currentTemplateType", DocumentTemplate.types.TXT);
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/classification/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/classification/stateProcess.js
index a53a086f62b6eeb071e03166dfc52489fc02cd62..549deaaa181e05318b957c59a6c3b9e54ab90a77 100644
--- a/entity/DocumentTemplate_entity/entityfields/classification/stateProcess.js
+++ b/entity/DocumentTemplate_entity/entityfields/classification/stateProcess.js
@@ -1,8 +1,13 @@
+import("KeywordRegistry_basic");
+import("DocumentTemplate_lib");
 import("system.vars");
 import("system.result");
 import("system.neon");
 
-if(vars.get("$field.KIND") != "")
-{
+if(vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$attachment() 
+|| vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$letter() && vars.exists("$context.currentTemplateType") && vars.get("$context.currentTemplateType") != DocumentTemplate.types.ODT)
+    result.string(neon.COMPONENTSTATE_DISABLED);
+else if(vars.get("$field.KIND") != "")
     result.string(neon.COMPONENTSTATE_EDITABLE);
-}
\ No newline at end of file
+else
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/classification/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/classification/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9a054a068c8e63b0f9fa1e4ae66adc9dc3146f8
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/classification/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("DocumentTemplate_lib");
+
+if (vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$letter() 
+        && vars.exists("$context.currentTemplateType") 
+        && vars.get("$context.currentTemplateType") != DocumentTemplate.types.ODT 
+        && !vars.get("$this.value"))
+    result.string($KeywordRegistry.documentTemplateTypeCategory$single());
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/content/displayValueProcess.js b/entity/DocumentTemplate_entity/entityfields/content/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bda330861ca3bf3b4f02ab666ec3aff48a1f059
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/content/displayValueProcess.js
@@ -0,0 +1,29 @@
+import("Bulkmail_lib");
+import("system.text");
+import("Employee_lib");
+import("system.vars");
+import("system.util");
+import("system.result");
+import("system.neon");
+import("DocumentTemplate_lib");
+
+if (vars.exists("$context.currentTemplateType"))
+{
+    var type = vars.get("$context.currentTemplateType");
+
+    // if this was done for every row, like in a lookup, the performance would be very bad
+    if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && type != null && type != DocumentTemplate.types.DOCX && type != DocumentTemplate.types.ODT) 
+    {        
+        var template = new DocumentTemplate(util.encodeBase64String(vars.get("$field.Content")), type, "unknown", true)
+
+        var contactId = EmployeeUtils.getCurrentContactId();
+        var preview = template.getReplacedContentByContactId(contactId, false, true);
+
+        if (type == DocumentTemplate.types.TXT)
+            result.string(text.text2html(preview, false));
+        else
+            result.string(preview);
+    }
+    else
+        result.string("");
+}
diff --git a/entity/DocumentTemplate_entity/entityfields/content/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/content/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..668475b8e0c15465ecd13fdef69e564b0e9a3055
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/content/stateProcess.js
@@ -0,0 +1,15 @@
+import("DocumentTemplate_lib");
+import("KeywordRegistry_basic");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+if (vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$textModular() 
+    && vars.get("$field.CLASSIFICATION") != $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate())
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/content/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/content/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5158388e7c2042154859ba89649d91e398eb12da
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/content/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("system.neon");
+import("system.neon");
+import("DocumentTemplate_lib");
+import("system.vars");
+
+if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) && vars.get("$this.value") == null)
+{
+    [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$field.DOCUMENTTEMPLATEID"), new FileUpload(vars.get("$field.BINDATA")));
+    vars.set("$context.currentTemplateType", type);
+    result.string(content);
+}
diff --git a/entity/DocumentTemplate_entity/entityfields/isolanguage/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/isolanguage/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a23b1ac729496cd74e1b9c59801f610f98246d0
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/isolanguage/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    result.string("deu");
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/kind/onValueChange.js b/entity/DocumentTemplate_entity/entityfields/kind/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3504bc661812088d04445f888633a66f646cec1
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/kind/onValueChange.js
@@ -0,0 +1,3 @@
+import("system.vars");
+
+vars.set("$field.CLASSIFICATION", null);
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/kind/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/kind/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..261fb39d2f183accb86d1799e73333e714cc0d59
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/kind/valueProcess.js
@@ -0,0 +1,31 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("Entity_lib");
+import("Document_lib");
+import("MimeType_lib");
+import("KeywordRegistry_basic");
+
+if (vars.get("$this.value") == null && vars.get("$field.BINDATA"))
+{
+    var mimeType = DocumentUtil.getMimeTypeFromUpload(vars.get("$field.BINDATA"));
+    var kind = null;
+    
+    //preset the type depending on the mime type, e. g. 'Mail' for eml files
+    switch (mimeType)
+    {
+        case MimeTypes.EML():
+        case MimeTypes.HTML():
+        case MimeTypes.TXT():
+        case MimeTypes.MSG():
+            kind = $KeywordRegistry.documentTemplateType$mail(); 
+            break;
+        case MimeTypes.ODT():
+        case MimeTypes.DOCX():
+            kind = $KeywordRegistry.documentTemplateType$letter();
+            break;
+    }
+    
+    if (kind)
+        result.string(kind);
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/links/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/links/stateProcess.js
index 42093844e7492876f8a41515b1de9668fd10b805..d3d519af79dab457a4f0ec911aa477791ce74026 100644
--- a/entity/DocumentTemplate_entity/entityfields/links/stateProcess.js
+++ b/entity/DocumentTemplate_entity/entityfields/links/stateProcess.js
@@ -6,4 +6,8 @@ import("system.neon");
 if(vars.get("$field.KIND") != $KeywordRegistry.documentTemplateType$mail())
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
 }
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/name/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/name/valueProcess.js
index 65117fc5b8e553ef7764c9957e30b236b7174229..30d57cc9e2a965d91187f9647264cad96a6a7b5b 100644
--- a/entity/DocumentTemplate_entity/entityfields/name/valueProcess.js
+++ b/entity/DocumentTemplate_entity/entityfields/name/valueProcess.js
@@ -1,15 +1,16 @@
 import("system.result");
 import("system.vars");
-import("system.neon");
 import("Entity_lib");
 import("Document_lib");
 
-if (vars.get("$this.value") == null && vars.get("$field.BINDATA"))
+if (!vars.get("$this.value") && vars.get("$field.BINDATA"))
 {
     var uploadValue = DocumentUtil.getFilenameFromUpload(vars.get("$field.BINDATA"));
     
+    uploadValue = uploadValue.replace(/\.[^/.]+$/, "")
+    
     if (uploadValue.length > 40)
         uploadValue = uploadValue.substr(0, 40);
     
-    neon.setFieldValue("$field.NAME", uploadValue);
-}
\ No newline at end of file
+    result.string(uploadValue);
+}
diff --git a/entity/DocumentTemplate_entity/entityfields/preview/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/preview/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..46dcf5eb451a72db8a48e2f46608b714f9cb683b
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/preview/stateProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$field.Preview"))
+    result.string(neon.COMPONENTSTATE_READONLY)
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/preview/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/preview/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..946cf5a3112d7150d39fdafbb77ae29d06ee8c4f
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/preview/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.Content.displayValue"));
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/replacementname/mandatoryProcess.js b/entity/DocumentTemplate_entity/entityfields/replacementname/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3efdc8e0d8d427c849ce05ab299318058f6d31a3
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/replacementname/mandatoryProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+
+result.object(vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$textModular() && 
+    vars.get("$field.CLASSIFICATION") == $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate())
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/replacementname/onValidation.js b/entity/DocumentTemplate_entity/entityfields/replacementname/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..efa6426e89fed59dac4d1e3512104e425ce80cf7
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/replacementname/onValidation.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+import("system.db");
+
+var count = parseInt(db.cell(SqlCondition.begin()
+                    .andPrepare("DOCUMENTTEMPLATE.REPLACEMENTNAME", vars.get("$local.value"))
+                    .andPrepare("DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID", vars.get("$field.DOCUMENTTEMPLATEID"), "# <> ?")
+                    .buildSql("select count(*) from DOCUMENTTEMPLATE", "1=2")));
+                    
+if (count > 0)
+{
+    result.string(translate.text("The replacement name has to be unique."));
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/replacementname/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/replacementname/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bebf80416cf1f3d62d2da7d7d5a01c36c0ed950
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/replacementname/stateProcess.js
@@ -0,0 +1,13 @@
+import("system.vars");
+import("MimeType_lib");
+import("Document_lib");
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.result");
+
+if(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_TABLE || 
+    (vars.get("$field.KIND") == $KeywordRegistry.documentTemplateType$textModular() && 
+    vars.get("$field.CLASSIFICATION") == $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate()))
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/textext/stateProcess.js b/entity/DocumentTemplate_entity/entityfields/textext/stateProcess.js
deleted file mode 100644
index 41188aaad45f111652458bd4548d0a195486fd72..0000000000000000000000000000000000000000
--- a/entity/DocumentTemplate_entity/entityfields/textext/stateProcess.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import("Document_lib");
-import("system.neon");
-import("system.result");
-import("system.vars");
-
-if(vars.get("$field.KIND").trim() == "TEX" && vars.get("$field.BINDATA") == "")
-{
-    var fileExtension = DocumentUtil.getFileExtensionFromUpload(vars.get("$field.NAME"));
-        
-    if(fileExtension == "txt" || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
-    {
-        result.string(neon.COMPONENTSTATE_EDITABLE);
-    }
-}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/textext/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/textext/valueProcess.js
deleted file mode 100644
index 4723c73981af398bf75eb3cb0f4b5a440bc2ef03..0000000000000000000000000000000000000000
--- a/entity/DocumentTemplate_entity/entityfields/textext/valueProcess.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import("Sql_lib");
-import("Document_lib");
-import("system.util");
-import("system.db");
-import("system.neon");
-import("system.result");
-import("system.vars");
-
-if(vars.get("$field.KIND").trim() == "TEX" && vars.get("$field.BINDATA") == "" && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
-{
-    var fileExtension = DocumentUtil.getFileExtensionFromUpload(vars.get("$field.NAME"));
-    
-    if(fileExtension == "txt")
-    {
-        var binaryId      = db.cell(SqlCondition.begin()
-            .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.DOCUMENTTEMPLATEID")
-            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-        result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getSystemAlias())));
-    }
-}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/onValidation.js b/entity/DocumentTemplate_entity/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..001768435bafd335685a74bde7725f3a37e707ff
--- /dev/null
+++ b/entity/DocumentTemplate_entity/onValidation.js
@@ -0,0 +1,46 @@
+import("system.neon");
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("Bulkmail_lib");
+import("DocumentTemplate_lib");
+import("KeywordRegistry_basic");
+
+if (vars.exists("$context.currentTemplateType") && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+{
+    var kind = vars.get("$field.KIND");
+    var classification = vars.get("$field.CLASSIFICATION");
+    
+    var type;
+    if (vars.exists("$context.currentTemplateType"))
+        type = vars.get("$context.currentTemplateType");
+    
+    if (type == "undefined")
+        type = undefined;
+    
+    if (type != undefined)
+    {
+        // Bulkmail
+        if (kind == $KeywordRegistry.documentTemplateType$mail() && classification == $KeywordRegistry.documentTemplateTypeCategory$serial() 
+                && !BulkMailUtils.isValidTemplateType(type)
+        // Single mail
+         || kind == $KeywordRegistry.documentTemplateType$mail() && classification == $KeywordRegistry.documentTemplateTypeCategory$single() 
+                && type != DocumentTemplate.types.EML && type != DocumentTemplate.types.HTML && type != DocumentTemplate.types.PLAIN && type != DocumentTemplate.types.TXT
+        // Single letter
+         || kind == $KeywordRegistry.documentTemplateType$letter() && classification == $KeywordRegistry.documentTemplateTypeCategory$single()
+                && type != DocumentTemplate.types.DOCX && type != DocumentTemplate.types.ODT && type != DocumentTemplate.types.PLAIN && type != DocumentTemplate.types.TXT
+        // Bulkletter
+         || kind == $KeywordRegistry.documentTemplateType$letter() && classification == $KeywordRegistry.documentTemplateTypeCategory$serial()
+                && type != DocumentTemplate.types.ODT
+        // Modular HTML template
+         || kind == $KeywordRegistry.documentTemplateType$textModular() && classification == $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate()
+                && type != DocumentTemplate.types.HTML
+        // Modular - all except HTML template
+         || kind == $KeywordRegistry.documentTemplateType$textModular() && classification != $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate()
+                && type != DocumentTemplate.types.PLAIN && type != DocumentTemplate.types.TXT
+        )
+        {
+            result.string(translate.text("Wrong filetype for the current document template type and classification."))
+        }
+    }
+}
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplate_entity/recordcontainers/db/conditionProcess.js
index bb44f99ca8914bbd59283b8fb393c27332f3182f..edcb27db9be3a2e3b082dd36852fba43398f3738 100644
--- a/entity/DocumentTemplate_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DocumentTemplate_entity/recordcontainers/db/conditionProcess.js
@@ -7,4 +7,4 @@ var cond = SqlCondition.begin()
                        .andPrepareVars("DOCUMENTTEMPLATE.KIND", "$param.DocumentTemplateType_param")
                        .andPrepareVars("DOCUMENTTEMPLATE.CLASSIFICATION", "$param.DocumentTemplateTypeClassification_param");
 
-result.string(db.translateStatement(cond.build("1=1")));
\ No newline at end of file
+result.string(cond.translate("1=1"));
diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js
index 95cf3f9a66491bacbe72d4968928043043d2445c..a451edb3381eb59d71e300713010b153f846d279 100644
--- a/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js
@@ -1,9 +1,8 @@
-import("Sql_lib");
-import("system.vars");
-import("system.db");
-
-var binaryId      = db.cell(SqlCondition.begin()
-            .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.DOCUMENTTEMPLATEID")
-            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-
-db.deleteBinary(binaryId, SqlUtils.getSystemAlias());
\ No newline at end of file
+import("Sql_lib");
+import("system.vars");
+import("system.db");
+
+var binaryId = db.cell(SqlCondition.begin(SqlUtils.getBinariesAlias())
+            .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.DOCUMENTTEMPLATEID")
+            .buildSql("select ID from ASYS_BINARIES", "1=2"), SqlUtils.getBinariesAlias());
+db.deleteBinary(binaryId, SqlUtils.getBinariesAlias());
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBInsert.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBInsert.js
index daf8ed24ded549d06dd867118abadbdad497eff1..05dbb4ec89aa2104f2ea127ebc93f2501ef207bc 100644
--- a/entity/DocumentTemplate_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/DocumentTemplate_entity/recordcontainers/db/onDBInsert.js
@@ -1,30 +1,9 @@
-import("system.result");
+import("DocumentTemplate_lib");
 import("system.vars");
-import("system.db");
-import("system.util");
 import("Document_lib");
-import("Sql_lib");
 
-//TODO - Function
 var rowdata = vars.get("$local.rowdata");
+var upload = new FileUpload(vars.get("$field.BINDATA"));
+var rowId = vars.get("$local.uid");
 
-var bindataUpload = DocumentUtil.getBindataFromUpload(vars.get("$field.BINDATA"));
-var filename = "";
-var bindata = "";
-
-if(bindataUpload != "")
-{
-    filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.BINDATA"));
-    bindata  = bindataUpload;
-}
-else if(rowdata["DOCUMENTTEMPLATE.KIND"].trim() == "TEX" && vars.get("$field.texText") != "")
-{
-    filename = rowdata["DOCUMENTTEMPLATE.NAME"] + ".txt";
-    bindata  = util.encodeBase64String(vars.get("$field.texText"));
-}
-
-if(bindata != "" && filename != "")
-{
-    db.insertBinary("DOCUMENTTEMPLATE", "DOCUMENT", vars.get("$local.uid"), 
-                    "", bindata, filename, "", "", SqlUtils.getSystemAlias());
-}
\ No newline at end of file
+DocumentTemplateUtils.insertTemplateData(rowId, upload, rowdata["DOCUMENTTEMPLATE.KIND"], vars.get("$field.Content"), rowdata["DOCUMENTTEMPLATE.CLASSIFICATION"], rowdata["DOCUMENTTEMPLATE.NAME"]);
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js
index 58d13c2ae560227626e58c523453fa9072343102..8cf4c2ee7634bcfcf931de73176e62104b15b6ec 100644
--- a/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js
@@ -1,40 +1,10 @@
-import("Binary_lib");
-import("system.util");
+import("DocumentTemplate_lib");
 import("system.vars");
-import("system.db");
 import("Document_lib");
-import("Sql_lib");
-
-//TODO - Function
 
 var rowdata = vars.get("$local.rowdata");
+var content = vars.get("$field.Content");
+var upload = new FileUpload(vars.get("$field.BINDATA"));
+var rowId = vars.get("$local.uid");
 
-var bindataUpload = DocumentUtil.getBindataFromUpload(vars.get("$field.BINDATA"));
-var filename      = "";
-var bindata       = "";
-
-if(bindataUpload != "")
-{
-    bindata = bindataUpload;
-    filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.BINDATA"));
-    
-    if(filename != null && filename != "")
-        filename = rowdata["DOCUMENTTEMPLATE.NAME"] + ".txt";
-}
-else if(rowdata["DOCUMENTTEMPLATE.KIND"].trim() == "TEX" && vars.get("$field.texText") != "")
-{
-    filename = rowdata["DOCUMENTTEMPLATE.NAME"] + ".txt";
-    bindata  = util.encodeBase64String(vars.get("$field.texText"));
-}
-
-if(bindata != "" && filename != "")
-{
-    var assignmentTable = "DOCUMENTTEMPLATE";
-    var assignmentName= "DOCUMENT";
-    var rowId = vars.get("$local.uid");
-    var binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, rowId, false, SqlUtils.getSystemAlias(), "MAINDOCUMENT");
-    if (binMeta.length == 0)
-        SingleBinaryUtils.insertMainDocument(assignmentTable, assignmentName, rowId, bindata, filename, null, SqlUtils.getSystemAlias());
-    else
-        db.updateBinary(binMeta[0][db.BINARY_ID], "", bindata, filename, "", "MAINDOCUMENT", SqlUtils.getSystemAlias());
-}
\ No newline at end of file
+DocumentTemplateUtils.updateTemplateData(rowId, upload, rowdata["DOCUMENTTEMPLATE.KIND"], content, rowdata["DOCUMENTTEMPLATE.CLASSIFICATION"], rowdata["DOCUMENTTEMPLATE.NAME"]);
\ No newline at end of file
diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index 95b5a2f31e1cf5438c32550866aa08d032e042f8..9ce9713c08c30ebdc88fc3da7657bd97f9ce96fd 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Document_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Document_entity/documentation.adoc</documentation>
   <title>Document</title>
   <iconId>VAADIN:FILE</iconId>
   <titlePlural>Documents</titlePlural>
diff --git a/entity/Document_entity/documentation.adoc b/entity/Document_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..95e61444f805e8f49112a15f4715316e569e4fe2
--- /dev/null
+++ b/entity/Document_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Document_entity
+
+Manages the documents for all modules. The process "blobHandler" takes care of the concrete filing of the documents
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/downloadfilesaction/onActionProcess.js b/entity/Document_entity/entityfields/downloadfilesaction/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb680339a304a772903d66b521a97809f90288f2
--- /dev/null
+++ b/entity/Document_entity/entityfields/downloadfilesaction/onActionProcess.js
@@ -0,0 +1,2 @@
+import("Document_lib");
+DocumentUtil.downloadSelectedDocuments();
diff --git a/entity/Offer_entity/entityfields/footer/displayValueProcess.js b/entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod
similarity index 100%
rename from entity/Offer_entity/entityfields/footer/displayValueProcess.js
rename to entity/DuplicateScanConditionConfig_entity/DuplicateScanConditionConfig_entity.aod
diff --git a/entity/DuplicateScanConditionConfig_entity/documentation.adoc b/entity/DuplicateScanConditionConfig_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..19fe43d93f2f5111e01fd0f5a13c6130c60fd90c
--- /dev/null
+++ b/entity/DuplicateScanConditionConfig_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DuplicateScanConditionConfig_entity
+
+Configuration for the DuplicateScan_entity
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/ordercurrency_param/valueProcess.js b/entity/DuplicateScan_entity/DuplicateScan_entity.aod
similarity index 100%
rename from entity/Order_entity/entityfields/ordercurrency_param/valueProcess.js
rename to entity/DuplicateScan_entity/DuplicateScan_entity.aod
diff --git a/entity/DuplicateScan_entity/documentation.adoc b/entity/DuplicateScan_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..509a41c54d92997d5220343dff018a4953f7e3e5
--- /dev/null
+++ b/entity/DuplicateScan_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= DuplicateScan_entity
+
+Entity for the DuplicatScan in the system
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/paydate/valueProcess.js b/entity/DuplicateScan_entity/entityfields/external_service_usage_allowed/valueProcess.js
similarity index 100%
rename from entity/Order_entity/entityfields/paydate/valueProcess.js
rename to entity/DuplicateScan_entity/entityfields/external_service_usage_allowed/valueProcess.js
diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod
index 515b74b324531fcc0c48e8bba2c2409c08693f4f..1c0cd341fd59b80470893b5820243eb195a50997 100644
--- a/entity/Email_entity/Email_entity.aod
+++ b/entity/Email_entity/Email_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Email_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Email_entity/documentation.adoc</documentation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -62,6 +63,17 @@
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
+    <entityField>
+      <name>bindata</name>
+      <contentType>FILE</contentType>
+    </entityField>
+    <entityActionField>
+      <name>downloadTemplate</name>
+      <title>Download template</title>
+      <onActionProcess>%aditoprj%/entity/Email_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:FILE_FONT</iconId>
+      <stateProcess>%aditoprj%/entity/Email_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Email_entity/documentation.adoc b/entity/Email_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..66984c3d12eca4e490e554336bc1a382c497e649
--- /dev/null
+++ b/entity/Email_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Email_entity
+
+Entity for the action of single mail
\ No newline at end of file
diff --git a/entity/Email_entity/entityfields/downloadtemplate/onActionProcess.js b/entity/Email_entity/entityfields/downloadtemplate/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3e5346cbc704e5001d62ce42157a0a914c704e1
--- /dev/null
+++ b/entity/Email_entity/entityfields/downloadtemplate/onActionProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("DocumentTemplate_lib");
+import("system.vars");
+
+var templateId = vars.get("$field.DOCUMENT_TEMPLATE");
+var template = DocumentTemplate.loadTemplate(templateId, undefined, false);
+if (template.content)
+    neon.download(template.content, template.filename);
\ No newline at end of file
diff --git a/entity/Email_entity/entityfields/downloadtemplate/stateProcess.js b/entity/Email_entity/entityfields/downloadtemplate/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cae499dc5b201158bdd32aaed386af74dc8d0b2
--- /dev/null
+++ b/entity/Email_entity/entityfields/downloadtemplate/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$field.DOCUMENT_TEMPLATE"))
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+else
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Email_entity/recordcontainers/jdito/onInsert.js b/entity/Email_entity/recordcontainers/jdito/onInsert.js
index 0d1bbaf89d697443184dda23614a52ca5bdb2cb8..6efaabb026a4bb2a0245a75f2e540275378b5489 100644
--- a/entity/Email_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Email_entity/recordcontainers/jdito/onInsert.js
@@ -4,11 +4,13 @@ import("Employee_lib");
 import("system.vars");
 import("Email_lib");
 import("Contact_lib");
+import("Document_lib");
 
 var contactId = vars.get("$param.ContactId_param");
 var eml = EmailWritingUtils.openMailTemplate(
     vars.get("$field.RECIPIENT"), 
     EmployeeUtils.getCurrentContactId(), 
     vars.get("$field.DOCUMENT_TEMPLATE"), 
-    contactId
+    contactId,
+    new FileUpload(vars.get("$field.bindata"))
 );
diff --git a/entity/EmployeeRole_entity/EmployeeRole_entity.aod b/entity/EmployeeRole_entity/EmployeeRole_entity.aod
index 15d9a0eaab08122f50224cad06b074069d32b842..2d3da8561d126b20968e9a1254efa2e486d50185 100644
--- a/entity/EmployeeRole_entity/EmployeeRole_entity.aod
+++ b/entity/EmployeeRole_entity/EmployeeRole_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>EmployeeRole_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/EmployeeRole_entity/documentation.adoc</documentation>
   <title>Role</title>
   <titlePlural>Roles</titlePlural>
   <recordContainer>jdito</recordContainer>
@@ -11,6 +12,7 @@
     </entityProvider>
     <entityField>
       <name>UID</name>
+      <valueProcess>%aditoprj%/entity/EmployeeRole_entity/entityfields/uid/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
       <name>UserTitle_param</name>
diff --git a/entity/EmployeeRole_entity/documentation.adoc b/entity/EmployeeRole_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..482ecdf5f48717d09b969cc559773fa1a63ac00d
--- /dev/null
+++ b/entity/EmployeeRole_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= EmployeeRole_entity
+
+Link the roles to the users. Also used in the authorization concept
\ No newline at end of file
diff --git a/entity/EmployeeRole_entity/entityfields/uid/valueProcess.js b/entity/EmployeeRole_entity/entityfields/uid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5853c11f92dc488eaac739dd90f8ef87fda5d4a
--- /dev/null
+++ b/entity/EmployeeRole_entity/entityfields/uid/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$field.ROLE"))
+}
\ No newline at end of file
diff --git a/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js b/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js
index 67b49d09cc063bf3d991f0db7761e9954cddb7cf..b9cece778787960b813a01dffbff120df704b2e1 100644
--- a/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js
@@ -22,4 +22,19 @@ if (userTitle && tools.existUsers(userTitle))
         }  
     }, existsObj);
 }
+
+var ids = vars.get("$local.idvalues");
+if (ids != null)
+{
+    roles = roles.filter(function(role) 
+    {
+        for (let i = 0; i < ids.length; i++)
+        {
+            if (role[0] == ids[i])
+                return true;
+        }
+        return false;
+    });
+}
+    
 result.object(roles);
\ No newline at end of file
diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod
index 48596c9e3a434b7102b63019862647e6cf67b042..f67d4fa2869ba4e9817e6d3e76ef7a2fb7cce5cd 100644
--- a/entity/Employee_entity/Employee_entity.aod
+++ b/entity/Employee_entity/Employee_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Employee_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Employee_entity/documentation.adoc</documentation>
   <title>Employee</title>
   <grantDeleteProcess>%aditoprj%/entity/Employee_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Employee_entity/contentTitleProcess.js</contentTitleProcess>
@@ -152,7 +153,9 @@
       <contentType>LONG_TEXT</contentType>
     </entityField>
     <entityField>
-      <name>ROLES</name>
+      <name>ROLE_FILTER</name>
+      <title>Role</title>
+      <consumer>PossibleRoles</consumer>
     </entityField>
     <entityConsumer>
       <name>EmployeeRoles</name>
@@ -290,6 +293,23 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Employee_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityConsumer>
+      <name>PossibleRoles</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Role_entity</entityName>
+        <fieldName>FilteredRoles</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ExcludeRoles_param</name>
+          <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/possibleroles/children/excluderoles_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>SHORT_UID</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -346,7 +366,20 @@
         <jDitoRecordFieldMapping>
           <name>CONFIRM_PASSWORD.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ROLE_FILTER.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SHORT_UID.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtension>
+          <name>filterExtension</name>
+          <contentType>TEXT</contentType>
+        </filterExtension>
+      </filterExtensions>
     </jDitoRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/Employee_entity/documentation.adoc b/entity/Employee_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..08c5e4b6aa851ea8a6f4e6b361d22e18c22e9bb9
--- /dev/null
+++ b/entity/Employee_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Employee_entity
+
+Entity for managing users in the system
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/possibleroles/children/excluderoles_param/valueProcess.js b/entity/Employee_entity/entityfields/possibleroles/children/excluderoles_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4300750f1e372af70f68435c0b2a264176b3bc49
--- /dev/null
+++ b/entity/Employee_entity/entityfields/possibleroles/children/excluderoles_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(JSON.stringify(["INTERNAL_EVERYONE", "INTERNAL_GROUPWARE", "INTERNAL_SNMP", "INTERNAL_DESIGNER", "INTERNAL_TECHNICAL"]));
\ No newline at end of file
diff --git a/entity/Employee_entity/grantDeleteProcess.js b/entity/Employee_entity/grantDeleteProcess.js
index b60872d672ceaa4a6670cf90bc7c25fabc3e3fb2..e1d6c3c3c66520301af7fcc8215b6c040af0b123 100644
--- a/entity/Employee_entity/grantDeleteProcess.js
+++ b/entity/Employee_entity/grantDeleteProcess.js
@@ -2,5 +2,5 @@ import("Employee_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
-
-result.string(!DocumentUtil.hasDocuments("EMPLOYEE", null, EmployeeUtils.sliceUserId(vars.get("$field.UID"))));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("EMPLOYEE", null, EmployeeUtils.sliceUserId(vars.get("$field.UID"))));
\ No newline at end of file
diff --git a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
index c5e53826744147cec8a91caf0c046b034a6efb23..4d17f73bab9abfae6db2b2ec49a190b379fcabd0 100644
--- a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
@@ -20,11 +20,12 @@ else
     users = tools.getUsersByAttribute(tools.ISACTIVE, values, tools.PROFILE_FULL);
 }
 
+var fetchRoles = vars.getString("$local.filter").indexOf("ROLE_FILTER") !== -1;
+
 var contactIds = [];
 users = users.map(function (user)
 {
     contactIds.push(user[tools.PARAMS][tools.CONTACTID]);
-    
     return [
         user[tools.NAME],
         user[tools.TITLE],
@@ -37,7 +38,8 @@ users = users.map(function (user)
         user[tools.PARAMS][tools.CONTACTID], //8
         null,                                //9
         user[tools.PARAMS].department,
-        ""
+        "",
+        fetchRoles ? tools.getRoles(user[tools.TITLE]) : [] //for filtering
     ];
 });
 
@@ -60,13 +62,38 @@ var nameMap = {};
 for (let i = 0, l = names.length; i < l; i++)
     nameMap[names[i][0]] = names[i][1];
 
-for (let i = 0, l = users.length; i < l; i++)
-    users[i][9] = nameMap[users[i][8]] || "";
-
 var filter = vars.get("$local.filter"); 
 
 //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method
-users = JditoFilterUtils.filterRecords(["UID", "TITLE", "ISACTIVE", "FIRSTNAME", "LASTNAME", "EMAIL_ADDRESS", "", "DESCRIPTION", "CONTACT_ID", "", "DEPARTMENT"], users, filter.filter);
+var filterFields = ["UID", "TITLE", "ISACTIVE", "FIRSTNAME", "LASTNAME", "EMAIL_ADDRESS", "", "DESCRIPTION", "CONTACT_ID", "", "DEPARTMENT", "", "ROLE_FILTER"];
+var filterFns = {
+    "ROLE_FILTER" : function (pRecordVal, pFilterVal, pOperator)
+    {
+        if (!pRecordVal)
+            pRecordVal = [];
+        switch (pOperator)
+        {
+            case "EQUAL":
+                return pRecordVal.indexOf(pFilterVal) !== -1;
+            case "NOT_EQUAL":
+                return pRecordVal.indexOf(pFilterVal) === -1;
+            case "ISNULL":
+                return pRecordVal.length === 0;
+            case "ISNOTNULL":
+                return pRecordVal.length !== 0;
+            default:
+                return false;
+        }
+    }
+};
+users = JditoFilterUtils.filterRecords(filterFields, users, filter.filter, filterFns);
+
+for (let i = 0, l = users.length; i < l; i++)
+{
+    users[i][9] = nameMap[users[i][8]] || "";
+    users[i][12] = "";
+    users[i][13] = EmployeeUtils.sliceUserId(users[i][0]);
+}
 
 var order = vars.get("$local.order");
 var columnOrder = {
diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod
index f261ba72391e70de0ffa8503885fca03c7f22c18..a5c73b1a75aa41e320facf53297e069eb7e4ad1a 100644
--- a/entity/Forecast_entity/Forecast_entity.aod
+++ b/entity/Forecast_entity/Forecast_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Forecast_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Forecast_entity/documentation.adoc</documentation>
   <title>${FORECAST_ENGLISH}</title>
   <titlePlural>Forecasts</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/Forecast_entity/conditionProcess.js b/entity/Forecast_entity/conditionProcess.js
index 7b8308bce5ffb288b17e60b3990202a175977090..9347e425a02c272ffc6af991320481a3e8ad7ff9 100644
--- a/entity/Forecast_entity/conditionProcess.js
+++ b/entity/Forecast_entity/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("FORECAST.OBJECT_ROWID", "$param.ForecastId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Forecast_entity/documentation.adoc b/entity/Forecast_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..efaa7da0a9ecf6f5767b3b4e576a244840b4dee0
--- /dev/null
+++ b/entity/Forecast_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Forecast_entity
+
+Entity to maintain the forecast. Used in the sales project and displayed in charts
\ No newline at end of file
diff --git a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
index a3abdf7666d4f15283c18383211a20e7272055ee..94d1422d484608c49641c9b2cd7eef12512f1874 100644
--- a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
@@ -7,5 +7,5 @@ var cond = SqlCondition.begin()
                        .andPrepareVars("FORECAST.OBJECT_ROWID", "$param.ObjectRowId_param")
                        .andPrepareVars("FORECAST.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Gender_keyword/Gender_keyword.aod b/entity/Gender_keyword/Gender_keyword.aod
index 21d9c978dd60f2a83c1b282f0012bfae6137cc51..49b4aae5354e03350e06940895b505f5d13791a8 100644
--- a/entity/Gender_keyword/Gender_keyword.aod
+++ b/entity/Gender_keyword/Gender_keyword.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Gender_keyword</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Gender_keyword/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/Gender_keyword/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>jdito</recordContainer>
   <entityFields>
diff --git a/entity/Gender_keyword/documentation.adoc b/entity/Gender_keyword/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..e330e6df87d4bc47beff88b81c55dbeb770e86f3
--- /dev/null
+++ b/entity/Gender_keyword/documentation.adoc
@@ -0,0 +1,3 @@
+= Employee_entity
+
+Entity for managing the Gender. Used in the Person_entity.
\ No newline at end of file
diff --git a/entity/IndexSearchEntity/IndexSearchEntity.aod b/entity/IndexSearchEntity/IndexSearchEntity.aod
index fd3f5f8121a967c17566f01624ad0f1b31b8e0fe..5b2df21c838ea1891b41c40e81336f7bac5078e3 100644
--- a/entity/IndexSearchEntity/IndexSearchEntity.aod
+++ b/entity/IndexSearchEntity/IndexSearchEntity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>IndexSearchEntity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/IndexSearchEntity/documentation.adoc</documentation>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
diff --git a/entity/IndexSearchEntity/documentation.adoc b/entity/IndexSearchEntity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f53b48e90cc21e63cf9311d78a4035771b601421
--- /dev/null
+++ b/entity/IndexSearchEntity/documentation.adoc
@@ -0,0 +1,3 @@
+= IndexSearchEntity
+
+Used by the IndexSearch Dashlet
\ No newline at end of file
diff --git a/entity/KeywordAttributeRelation_entity/documentation.adoc b/entity/KeywordAttributeRelation_entity/documentation.adoc
index cc5756e15cbf9fcaac701ef68176b5f03423e6e2..b235e614c9837276b25df2db50069019232e4949 100644
--- a/entity/KeywordAttributeRelation_entity/documentation.adoc
+++ b/entity/KeywordAttributeRelation_entity/documentation.adoc
@@ -1,3 +1,5 @@
+= KeywordAttributeRelation_entity
+
 This entity represents the relation between a Keyword-Attribute and a Keyword-Entry.
 There is a reference to a Keyword-Attribute, a Keyword-Entry and some more properties that describe that relation (like the stored value).
 In fact the main reason for this is the stored value which depends on the type of the Keyword-Attribute.
\ No newline at end of file
diff --git a/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
index e2f841acfe7f97a2016315b533ec3eaae47a5927..4e5f1178f2852ef65d24f326ae0c02b72d26efb8 100644
--- a/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,6 @@ import("system.result");
 import("Sql_lib");
 
 var cond = SqlCondition.begin().andPrepareVars("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID", "$param.KeywordEntryId_param");
-var condStr = db.translateCondition(cond.build("1 = 2"));
-result.string(condStr);
\ No newline at end of file
+
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/KeywordAttribute_entity/documentation.adoc b/entity/KeywordAttribute_entity/documentation.adoc
index 579af8ea92828573b9e3419af1a5651102a60e03..d94e9dab140dfb4cd226e6318ffc8ea6cd5a2378 100644
--- a/entity/KeywordAttribute_entity/documentation.adoc
+++ b/entity/KeywordAttribute_entity/documentation.adoc
@@ -1,5 +1,4 @@
-Keyword Attributes
-==================
+= Keyword Attributes
 
 Keyword attributes are an extension of simple keywords.
 You can specify special attributes per Keyword-container. 
diff --git a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
index 5df041cf417a065651c61f11c8296636328e2462..55cf99b5b9f3882673102fe38589cea09365bab5 100644
--- a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
@@ -17,5 +17,5 @@ if (entryIdForFilter)
     cond.andAttachPrepared(exclusiveFilterCondition);
 }
 
-var condStr = db.translateCondition(cond.build("1 = 1"));
-result.string(condStr);
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 609c83dc2e21531d13805b6f92948158f2e0632c..4afab95d61285c4cb26abe7c0359947b048b4bcb 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -505,6 +505,12 @@
           <fieldName>KeywordDeliveryTerms</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>b4238087-6333-453a-a501-760732c68f5d</name>
+          <entityName>SerialLetter_entity</entityName>
+          <fieldName>StatusKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/KeywordEntry_entity/documentation.adoc b/entity/KeywordEntry_entity/documentation.adoc
index c08c1063283cc9a2af7c27a614f5f5718ba89737..304f400b5ad5a95182afd964120473fa6b145fb8 100644
--- a/entity/KeywordEntry_entity/documentation.adoc
+++ b/entity/KeywordEntry_entity/documentation.adoc
@@ -1,5 +1,5 @@
-Keyword
-=======
+= Keyword
+
 :toc:
 
 Simply said: A keyword is a list of key-value pairs. 
diff --git a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
index e581324d162afd72b6e3b262fc2a827a64882517..3693ae0cb044259440c9c51b0279088cb7e0646f 100644
--- a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
@@ -16,5 +16,5 @@ if (vars.exists("$param.ExcludedKeyIdsSubquery_param") && vars.get("$param.Exclu
 if (vars.exists("$param.WhitelistIds_param") && vars.getString("$param.WhitelistIds_param"))
     cond.andIn("AB_KEYWORD_ENTRY.KEYID", JSON.parse(vars.getString("$param.WhitelistIds_param")));
 
-var condStr = db.translateCondition(cond.build("1 = 1"));
-result.string(condStr);
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Language_entity/Language_entity.aod b/entity/Language_entity/Language_entity.aod
index b9b83b6e231e6c962d6fdc28f601b7f52a442715..076692cf34013abbad9954b985493d4958995adf 100644
--- a/entity/Language_entity/Language_entity.aod
+++ b/entity/Language_entity/Language_entity.aod
@@ -2,6 +2,8 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Language_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Language_entity/documentation.adoc</documentation>
+  <title>Language</title>
   <contentTitleProcess>%aditoprj%/entity/Language_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
diff --git a/entity/Language_entity/documentation.adoc b/entity/Language_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..95088ed6e36f27d6c4797d450e0758463fecfff8
--- /dev/null
+++ b/entity/Language_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Language_entity
+
+Forms the languages. Should be used in all places where languages ??are used
\ No newline at end of file
diff --git a/entity/Language_entity/recordcontainers/db/conditionProcess.js b/entity/Language_entity/recordcontainers/db/conditionProcess.js
index f35be6d3c9a951a3ecd210484e522606a660dfa1..7914a70b5d94ce14e00d4ad8de154e114dc839b2 100644
--- a/entity/Language_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Language_entity/recordcontainers/db/conditionProcess.js
@@ -9,4 +9,5 @@ if (vars.exists("$param.ExcludedIds_param") && vars.getString("$param.ExcludedId
     cond.andIn("AB_LANGUAGE.ISO3", JSON.parse(vars.getString("$param.ExcludedIds_param")), undefined, true)
 }
 
-result.string(db.translateCondition(cond.build("1 = 1")))
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"))
\ No newline at end of file
diff --git a/entity/LetterRecipient_entity/LetterRecipient_entity.aod b/entity/LetterRecipient_entity/LetterRecipient_entity.aod
index 96b2be2d04a6c6366a4c5514a4bb81b9d6c32675..eea546c5fe92a15233cc2b795880957515e31978 100644
--- a/entity/LetterRecipient_entity/LetterRecipient_entity.aod
+++ b/entity/LetterRecipient_entity/LetterRecipient_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>LetterRecipient_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/LetterRecipient_entity/documentation.adoc</documentation>
   <siblings>
     <element>Address_entity</element>
   </siblings>
diff --git a/entity/LetterRecipient_entity/documentation.adoc b/entity/LetterRecipient_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c682b5fa1a895d9038f8beb4ebfa45921fc0ad19
--- /dev/null
+++ b/entity/LetterRecipient_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= LetterRecipient_entity
+
+Manages the recipients for the letter_entity
\ No newline at end of file
diff --git a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
index 03bc58ed3ab5146d2ac67625f4717c8856ec34d8..c4cd2c2544b5f45d0c4c2a7604c40204f18a2867 100644
--- a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
+++ b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
@@ -1,8 +1,9 @@
+import("Sql_lib");
 import("KeywordRegistry_basic");
 import("Contact_lib");
 import("system.db");
 import("system.result");
 
 var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter()).build();
-var sql = "case when (" + db.translateStatement(commRestrictionCond) + ") then 'true' else 'false' end";
+var sql = "case when (" + SqlUtils.translateStatementWithQuotes(commRestrictionCond) + ") then 'true' else 'false' end";
 result.string(sql);
diff --git a/entity/Letter_entity/Letter_entity.aod b/entity/Letter_entity/Letter_entity.aod
index ac26bb0328f2c190da97535ced5c58beb728b6fe..d4a202aae2cb46f690bbdb8b56f857d56c92005d 100644
--- a/entity/Letter_entity/Letter_entity.aod
+++ b/entity/Letter_entity/Letter_entity.aod
@@ -2,6 +2,8 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Letter_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Letter_entity/documentation.adoc</documentation>
+  <onValidation>%aditoprj%/entity/Letter_entity/onValidation.js</onValidation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/Letter_entity/documentation.adoc b/entity/Letter_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cd351b339a89c59f9715e28742ef4f8e2be2d674
--- /dev/null
+++ b/entity/Letter_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Letter_entity
+
+Entity for the use of single letters
\ No newline at end of file
diff --git a/entity/Letter_entity/entityfields/downloadtemplate/onActionProcess.js b/entity/Letter_entity/entityfields/downloadtemplate/onActionProcess.js
index 562a486f2bb1f6946f2f1e1611c56be82d4c7392..c3e5346cbc704e5001d62ce42157a0a914c704e1 100644
--- a/entity/Letter_entity/entityfields/downloadtemplate/onActionProcess.js
+++ b/entity/Letter_entity/entityfields/downloadtemplate/onActionProcess.js
@@ -3,6 +3,6 @@ import("DocumentTemplate_lib");
 import("system.vars");
 
 var templateId = vars.get("$field.DOCUMENT_TEMPLATE");
-var template = DocumentTemplate.loadTemplate(templateId);
+var template = DocumentTemplate.loadTemplate(templateId, undefined, false);
 if (template.content)
     neon.download(template.content, template.filename);
\ No newline at end of file
diff --git a/entity/Letter_entity/onValidation.js b/entity/Letter_entity/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..083fd4dbe6888e3bd8696dea5f480a2a5dfd34b7
--- /dev/null
+++ b/entity/Letter_entity/onValidation.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+if (!vars.get("$field.bindata") && !vars.get("$field.DOCUMENT_TEMPLATE"))
+{
+    result.string(translate.text("Please select a documenttemplate or upload a new file."))
+}
\ No newline at end of file
diff --git a/entity/Letter_entity/recordcontainers/jdito/onInsert.js b/entity/Letter_entity/recordcontainers/jdito/onInsert.js
index 78220375607f76d0568bba97ebbaf2cb8fd823cb..1f265afe9add14e01fe854a40f37466e00e52cd1 100644
--- a/entity/Letter_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Letter_entity/recordcontainers/jdito/onInsert.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.translate");
 import("Contact_lib");
 import("ActivityTask_lib");
@@ -8,8 +7,7 @@ import("system.text");
 import("DocumentTemplate_lib");
 import("KeywordRegistry_basic");
 
-var template = DocumentTemplate.getSelectedTemplate(vars.get("$field.DOCUMENT_TEMPLATE"), vars.get("$field.bindata"));
-logging.log(vars.get("$field.bindata").split(";").join(";\n"))
+var template = DocumentTemplate.getSelectedTemplate(vars.get("$field.DOCUMENT_TEMPLATE"), new FileUpload(vars.get("$field.bindata")));
 var contactId = vars.get("$param.ContactId_param");
 var content = template.getReplacedContentByContactId(contactId, true);
 if (template.type)
diff --git a/entity/LogHistory_entity/LogHistory_entity.aod b/entity/LogHistory_entity/LogHistory_entity.aod
index c12c22eeca9d5f4ca428e09334f31568f4778b51..0b03af19193df3cb31d16f20f3fc1d47f4473a42 100644
--- a/entity/LogHistory_entity/LogHistory_entity.aod
+++ b/entity/LogHistory_entity/LogHistory_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>LogHistory_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/LogHistory_entity/documentation.adoc</documentation>
   <title>Log</title>
   <grantUpdate v="false" />
   <grantDelete v="false" />
diff --git a/entity/LogHistory_entity/documentation.adoc b/entity/LogHistory_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..4aa8b0704c0d06778a21425ce2f5258dfde88977
--- /dev/null
+++ b/entity/LogHistory_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= LogHistory_entity
+
+Entity for the log entries in the individual modules
\ No newline at end of file
diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod
index 3429f3c4a57310cc7e412134e99437c6bbe8c384..c3aae1c51ac0feee54dcc9a5673916114e50a39a 100644
--- a/entity/Member_entity/Member_entity.aod
+++ b/entity/Member_entity/Member_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Member_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Member_entity/documentation.adoc</documentation>
   <title>${SALESPROJECT_MEMBER}</title>
   <iconId>VAADIN:FILE_SOUND</iconId>
   <titlePlural>${SALESPROJECT_MEMBER}</titlePlural>
@@ -66,24 +67,10 @@
       <title>title</title>
       <state>READONLY</state>
     </entityField>
-    <entityConsumer>
-      <name>CurrentContact</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>Contact</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Member_entity/entityfields/currentcontact/children/contactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityField>
       <name>PERSON_FULL_NAME</name>
       <title>Name</title>
-      <consumer>CurrentContact</consumer>
+      <consumer>Contacts</consumer>
       <linkedContext>Person</linkedContext>
       <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Member_entity/entityfields/person_full_name/valueProcess.js</valueProcess>
diff --git a/entity/Member_entity/documentation.adoc b/entity/Member_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..575b84d32903889b91d1a3009ebb855326e46e28
--- /dev/null
+++ b/entity/Member_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Member_entity
+
+Manages the project team in the sales project and in the campaign
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/currentcontact/children/contactid_param/valueProcess.js b/entity/Member_entity/entityfields/currentcontact/children/contactid_param/valueProcess.js
deleted file mode 100644
index d4c3595ca0b2f3d1cd640a7520d976bf8cf4a35c..0000000000000000000000000000000000000000
--- a/entity/Member_entity/entityfields/currentcontact/children/contactid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.vars");
-
-result.string(vars.getString("$field.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/conditionProcess.js b/entity/Member_entity/recordcontainers/db/conditionProcess.js
index 2d6f617c515d9dd928745c6ec9553e7fb042be09..374388b3f4aa303740bf6ff4f955b2a33e4e6e04 100644
--- a/entity/Member_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Member_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,5 @@ var cond = new SqlCondition();
 cond.andPrepareVars("OBJECTMEMBER.OBJECT_ROWID", "$param.ObjectRowId_param")
 cond.andPrepareVars("OBJECTMEMBER.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
index 33554680cccd2c3d363443686457c41e0c1c5729..000d055cfacc970e2ca0dc70689b4c793e0bc0cd 100644
--- a/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
@@ -1,4 +1,10 @@
+import("system.vars");
 import("system.result");
 import("Context_lib");
 
-result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
+//TODO: refactor:
+//whenever we want to shrink data for a single object it's not needed to resolve the objects name where we're from
+if (vars.get("$param.ObjectType_param") == null)
+    result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"));
+else
+    result.string("'OBJECT_ROWID.displayValue not loaded'");
\ No newline at end of file
diff --git a/entity/ModuleTree_entity/ModuleTree_entity.aod b/entity/ModuleTree_entity/ModuleTree_entity.aod
index c30b413d21e550d71f8b224a5fd404c9ffe22195..807d389606aa71c96d2d072ab0168fd172ca61c6 100644
--- a/entity/ModuleTree_entity/ModuleTree_entity.aod
+++ b/entity/ModuleTree_entity/ModuleTree_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ModuleTree_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ModuleTree_entity/documentation.adoc</documentation>
   <title>History</title>
   <entityFields>
     <entityProvider>
diff --git a/entity/ModuleTree_entity/documentation.adoc b/entity/ModuleTree_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..08515fb3de8a0e3861f21f56e1921ae635d00fd1
--- /dev/null
+++ b/entity/ModuleTree_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ModuleTree_entity
+
+Maps the "history" in the activity and task
\ No newline at end of file
diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod
index 264b358cf3d2917a84c2a719ec718a2bc9d96204..db6f7995a5bd09e95b3f8a5229328b959e896264 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Notification_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Notification_entity/documentation.adoc</documentation>
   <title>Notifications</title>
   <iconId>VAADIN:BELL</iconId>
   <titlePlural>Notifications</titlePlural>
diff --git a/entity/Notification_entity/documentation.adoc b/entity/Notification_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a4ee9de446b9eff7feba8a0e1d84e4cf874e51f1
--- /dev/null
+++ b/entity/Notification_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Notification_entity
+
+Entity for the presentation of notifications
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
index d3cc2bdd8ba7382f32c82e32f42705152c1e210b..6a063fff6d8fbac0eac4b1b9f3ab4191700793b1 100644
--- a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
+++ b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
@@ -2,9 +2,9 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ObjectRelationType_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ObjectRelationType_entity/documentation.adoc</documentation>
   <icon>VAADIN:SPLIT</icon>
   <title>Relation type</title>
-  <grantUpdateProcess>%aditoprj%/entity/ObjectRelationType_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/ObjectRelationType_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/ObjectRelationType_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:SPLIT</iconId>
@@ -25,7 +25,7 @@
       <displayValueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/source_relation_title/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityParameter>
-      <name>SourceObjectType_param</name>
+      <name>SourceObjectTypes_param</name>
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
@@ -40,10 +40,6 @@
         </entityDependency>
       </dependencies>
       <children>
-        <entityParameter>
-          <name>SourceObjectType_param</name>
-          <expose v="true" />
-        </entityParameter>
         <entityParameter>
           <name>OnlyFirstSide_param</name>
           <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/objectrelationtypes/children/onlyfirstside_param/valueProcess.js</valueProcess>
@@ -83,6 +79,7 @@
       <title>Context 1</title>
       <consumer>Contexts</consumer>
       <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/source_object_type/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/source_object_type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -112,12 +109,6 @@
         <fieldName>Context</fieldName>
       </dependency>
     </entityConsumer>
-    <entityActionField>
-      <name>removeUsage</name>
-      <title>Delete all usage</title>
-      <onActionProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/removeusage/onActionProcess.js</onActionProcess>
-      <iconId>NEON:TRASH</iconId>
-    </entityActionField>
     <entityField>
       <name>Type2Enabled_proxy</name>
       <title>Enable relation type 2</title>
@@ -131,6 +122,23 @@
       <contentType>IMAGE</contentType>
       <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
+    <entityParameter>
+      <name>UsageCount_param</name>
+      <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/usagecount_param/valueProcess.js</valueProcess>
+    </entityParameter>
+    <entityActionGroup>
+      <name>removeActionGroup</name>
+      <children>
+        <entityActionField>
+          <name>removeUsage</name>
+          <title>Delete all usage</title>
+          <onActionProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/removeactiongroup/children/removeusage/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>NEON:TRASH</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/ObjectRelationType_entity/documentation.adoc b/entity/ObjectRelationType_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..9c296c2d48c343163da4a3427b5c27656d4938a9
--- /dev/null
+++ b/entity/ObjectRelationType_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ObjectRelationType_entity
+
+Administrative obsolescence of the object_entity
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/entityfields/dest_object_type/stateProcess.js b/entity/ObjectRelationType_entity/entityfields/dest_object_type/stateProcess.js
index 74da791552b4d4a7ea1b5064319c589d9f3bea38..ddc35fecfaabca4c187746b73e6366e707876bb8 100644
--- a/entity/ObjectRelationType_entity/entityfields/dest_object_type/stateProcess.js
+++ b/entity/ObjectRelationType_entity/entityfields/dest_object_type/stateProcess.js
@@ -2,7 +2,7 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if (vars.getString("$field.Type2Enabled_proxy") == "0")
+if (vars.getString("$field.Type2Enabled_proxy") == "0" || vars.getString("$param.UsageCount_param") > 0)
 {
     result.string(neon.COMPONENTSTATE_DISABLED);
 }
diff --git a/entity/ObjectRelationType_entity/entityfields/removeusage/onActionProcess.js b/entity/ObjectRelationType_entity/entityfields/removeactiongroup/children/removeusage/onActionProcess.js
similarity index 100%
rename from entity/ObjectRelationType_entity/entityfields/removeusage/onActionProcess.js
rename to entity/ObjectRelationType_entity/entityfields/removeactiongroup/children/removeusage/onActionProcess.js
diff --git a/entity/ObjectRelationType_entity/entityfields/source_object_type/stateProcess.js b/entity/ObjectRelationType_entity/entityfields/source_object_type/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6433e03a88183a5ff939685851cbf58ca0009af4
--- /dev/null
+++ b/entity/ObjectRelationType_entity/entityfields/source_object_type/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.getString("$param.UsageCount_param") > 0)
+{
+    result.string(neon.COMPONENTSTATE_DISABLED);
+}
+else
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/grantUpdateProcess.js b/entity/ObjectRelationType_entity/entityfields/usagecount_param/valueProcess.js
similarity index 91%
rename from entity/ObjectRelationType_entity/grantUpdateProcess.js
rename to entity/ObjectRelationType_entity/entityfields/usagecount_param/valueProcess.js
index ab871194cacde15680e8b7b6c7ff1ceb353f1776..2ea7aca8980ad01e9086033002dbfb72989c1021 100644
--- a/entity/ObjectRelationType_entity/grantUpdateProcess.js
+++ b/entity/ObjectRelationType_entity/entityfields/usagecount_param/valueProcess.js
@@ -5,4 +5,4 @@ import("system.result");
 result.object(db.cell(SqlCondition.begin()
                                    .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", "$field.UID")
                                    .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", "$field.DEST_OBJECTRELATIONTYPEID")
-                                   .buildSql("select count(*) from AB_OBJECTRELATION", "1=2")) <= 0);
\ No newline at end of file
+                                   .buildSql("select count(*) from AB_OBJECTRELATION", "1=2")));
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/grantDeleteProcess.js b/entity/ObjectRelationType_entity/grantDeleteProcess.js
index ab871194cacde15680e8b7b6c7ff1ceb353f1776..35df4eda41c77e7d651ace31178952bae6f2afa3 100644
--- a/entity/ObjectRelationType_entity/grantDeleteProcess.js
+++ b/entity/ObjectRelationType_entity/grantDeleteProcess.js
@@ -1,8 +1,4 @@
-import("Sql_lib");
-import("system.db");
+import("system.vars");
 import("system.result");
 
-result.object(db.cell(SqlCondition.begin()
-                                   .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", "$field.UID")
-                                   .andPrepareVars("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", "$field.DEST_OBJECTRELATIONTYPEID")
-                                   .buildSql("select count(*) from AB_OBJECTRELATION", "1=2")) <= 0);
\ No newline at end of file
+result.object(vars.get("$param.UsageCount_param") <= 0);                                   
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectRelationType_entity/recordcontainers/jdito/contentProcess.js
index 5344cbdce607cc638cfa2edde885fd7da7649b5b..69201e0027519933a18e07dda35c313aaf8aa722 100644
--- a/entity/ObjectRelationType_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ObjectRelationType_entity/recordcontainers/jdito/contentProcess.js
@@ -9,7 +9,7 @@ if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
 else
 {
         result.object(ObjectRelationUtils.getPossibleRelationTypes(
-            vars.exists("$param.SourceObjectType_param") ? vars.get("$param.SourceObjectType_param") : undefined,
+            vars.exists("$param.SourceObjectTypes_param") ? JSON.parse(vars.getString("$param.SourceObjectTypes_param")) : undefined,
             true,
             (vars.exists("$param.OnlyFirstSide_param") ? vars.get("$param.OnlyFirstSide_param") : "0") == "1",
             undefined,
diff --git a/entity/ObjectRelationType_entity/recordcontainers/jdito/onDelete.js b/entity/ObjectRelationType_entity/recordcontainers/jdito/onDelete.js
index be2ad9cda09046be0972a65a678891217fa62039..19d5361663e81d977195b858044c1116cb3ae6b7 100644
--- a/entity/ObjectRelationType_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/ObjectRelationType_entity/recordcontainers/jdito/onDelete.js
@@ -17,6 +17,6 @@ if (usageCount <= 0)
 }
 else
 {
-    // TODO: Show message hier nicht möglich: mit Grant-Prozess ausführung komplett verhindern, wenn es diese gibt.
+    // TODO: Show message hier nicht möglich: mit Grant-Prozess ausführung komplett verhindern.
     //question.showMessage(translate.withArguments("There are still %0 relations using the type %1.", [usageCount, translate.text(vars.get("$field.SOURCE_RELATION_TITLE")) + " -> " + translate.text(vars.get("$field.DEST_RELATION_TITLE"))]), question.WARNING, translate.text("Cannot remove relation type"))
 }
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/ObjectTree_entity.aod b/entity/ObjectTree_entity/ObjectTree_entity.aod
index 259bd6141a2a047250f710b49d550d13b326f1fc..9cca36c398fa23b8f033d92fda291e3818cd6ae7 100644
--- a/entity/ObjectTree_entity/ObjectTree_entity.aod
+++ b/entity/ObjectTree_entity/ObjectTree_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>ObjectTree_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ObjectTree_entity/documentation.adoc</documentation>
   <title>Object relation</title>
   <grantUpdate v="true" />
   <grantUpdateProcess>%aditoprj%/entity/ObjectTree_entity/grantUpdateProcess.js</grantUpdateProcess>
@@ -32,27 +33,17 @@
       </dependencies>
       <children>
         <entityParameter>
-          <name>ObjectId_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>RelationType_param</name>
+          <name>Uid_param</name>
           <expose v="false" />
         </entityParameter>
         <entityParameter>
-          <name>Uid_param</name>
+          <name>RelationTypes_param</name>
           <expose v="false" />
         </entityParameter>
       </children>
     </entityProvider>
     <entityParameter>
-      <name>ObjectId_param</name>
+      <name>ObjectIds_param</name>
       <expose v="true" />
       <mandatory v="true" />
       <description>PARAMETER</description>
@@ -84,13 +75,13 @@
       </dependency>
       <children>
         <entityParameter>
-          <name>SourceObjectType_param</name>
-          <valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js</valueProcess>
+          <name>SourceObjectTypes_param</name>
+          <valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
     <entityParameter>
-      <name>ObjectType_param</name>
+      <name>ObjectTypes_param</name>
       <expose v="true" />
       <mandatory v="true" />
       <description>PARAMETER</description>
@@ -164,14 +155,14 @@
       </children>
     </entityActionGroup>
     <entityParameter>
-      <name>RelationType_param</name>
+      <name>RelationTypes_param</name>
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>Uid_param</name>
       <expose v="true" />
-      <description>Needed to load ONE Objectrelation together with ObjectId_param and ObjectType_param to determine the side</description>
+      <description>Needed to load ONE Objectrelation together with ObjectIds_param and ObjectTypes_param to determine the side</description>
     </entityParameter>
   </entityFields>
   <recordContainers>
@@ -179,6 +170,7 @@
       <name>jdito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
       <isFilterable v="true" />
+      <isRequireContainerFiltering v="true" />
       <contentProcess>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
       <onInsert>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js</onInsert>
       <onUpdate>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
@@ -207,6 +199,7 @@
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>OBJECTRELATIONTYPEID.value</name>
+          <isFilterable v="true" />
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>ICON.value</name>
diff --git a/entity/ObjectTree_entity/documentation.adoc b/entity/ObjectTree_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..367bb6777c07b2b3e654d218354ea922a593df58
--- /dev/null
+++ b/entity/ObjectTree_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= ObjectTree_entity
+
+Representation of the information from the Object_entity as a tree
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js b/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js
index 70b23f118559daeb29baf7310e4d994f6c82089b..a84e5d27e3d72d014a9b67046111649c98ed4099 100644
--- a/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js
+++ b/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js
@@ -13,18 +13,18 @@ if (vars.exists("$sys.selection") && vars.getString("$sys.selection"))
 
         if (isObjectRelationNode)
         {
-            parentId = uid[0];
-            parentObjectType = uid[3];
+            parentIds = [uid[0]];
+            parentObjectTypes = [uid[3]];
         }
         else
         {
-            parentId = vars.getString("$param.ObjectId_param");
-            parentObjectType = vars.getString("$param.ObjectType_param");
+            parentIds = JSON.parse(vars.getString("$param.ObjectIds_param"));
+            parentObjectTypes = JSON.parse(vars.getString("$param.ObjectTypes_param"));
         }
 
         var params = {
-            "ObjectId_param" : parentId,
-            "ObjectType_param" : parentObjectType,
+            "ObjectIds_param" : JSON.stringify(parentIds),
+            "ObjectTypes_param" : JSON.stringify(parentObjectTypes),
             "RelationType_param" : vars.get("$field.OBJECTRELATIONTYPEID")
         };
 
diff --git a/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js b/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js
deleted file mode 100644
index 95c8514f3bbc2804547c47b50ec222c09aec3f59..0000000000000000000000000000000000000000
--- a/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttypes_param/valueProcess.js b/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttypes_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..56b998f804d09586de79f986bd71ae5b1b123d67
--- /dev/null
+++ b/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttypes_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.getString("$param.ObjectTypes_param"));
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js b/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js
index 59596bc5946502edbb523a4d0a6f9d5f43cbe67b..afff3a5327c89048c9bd7c6cc0d85adf78fabeaf 100644
--- a/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js
+++ b/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js
@@ -6,13 +6,13 @@ import("ObjectRelation_lib");
 
 var relationTypeData = ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"));
 
-var sql1 = db.translateStatement(SqlCondition.begin()
+var sql1 = SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
                        .andPrepareVars("AB_OBJECTRELATION.OBJECT1_ROWID", "$field.PARENT_ID")
                        .andPrepare("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", relationTypeData[7])
                        .andPrepare("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", relationTypeData[8])
                        .buildSql("select OBJECT2_ROWID from AB_OBJECTRELATION", "1=2"));
 
-var sql2 = db.translateStatement(SqlCondition.begin()
+var sql2 = SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
                        .andPrepareVars("AB_OBJECTRELATION.OBJECT2_ROWID", "$field.PARENT_ID")
                        .andPrepare("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", relationTypeData[7])
                        .andPrepare("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", relationTypeData[8])
diff --git a/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js b/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js
index 7eed476d46447384559b14a62f4cfb3fd04f5475..68a909f59961600aa80c9dcac348113b226437c3 100644
--- a/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js
+++ b/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js
@@ -3,7 +3,19 @@ import("system.neon");
 import("system.vars");
 import("ObjectRelation_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.ObjectIds_param") && vars.get("$param.ObjectIds_param"))
 {
-    result.string(vars.get("$param.ObjectId_param"));
+    var targetContext = ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[5];
+
+    var myObjectIds = JSON.parse(vars.getString("$param.ObjectIds_param"))
+    var myContextTypes = JSON.parse(vars.getString("$param.ObjectTypes_param"))
+
+    var targetId = "";
+
+    if (myContextTypes && myObjectIds)
+    {
+        var index = myContextTypes.indexOf(targetContext);
+        targetId = myObjectIds[index];
+    }
+    result.string(targetId);
 }
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
index a2911d79d55daef5e53fc2974a2e590dee06abe7..19ada032877628d8aab5aed38edb2e0008854eea 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
@@ -5,6 +5,39 @@ import("system.vars");
 import("ObjectRelation_lib");
 import("Context_lib");
 import("Sql_lib");
+import("Contact_lib");
+
+/**
+ * Rough functioning of the code:
+ * - get parameters
+ * - load data via _loadObjectRelationTree
+ *  * _loadObjectRelationTree calls itself recursively
+ * - data is insertet into the tree which is passed as REFERENCE to _loadObjectRelationTree 
+ *   -> each "push" to pTree in _loadObjectRelationTree updates automaticaly tree
+ *   -> Do not use something like pTree = pTree.concat(...) as this would create a new Array with a new reference which does not point to "tree" anymore.
+ * - the "tree" is returned
+ */
+
+// some info about how the arrays are filled
+var ENTRY_DATA = {
+    objectId: 0,
+    objectRelationId: 1,
+    objectType: 2,
+    relationTitle: 3,
+    info: 4,
+    objectRelationTypeId: 5
+}
+
+var UID = {
+    objectId: 0,
+    layer: 1,
+    objectRelationTypeId: 2,
+    otherObjectType: 3,
+    relationTypeData: 4,
+    myObjectType: 5,
+    objectRelationId: 6,
+    hierarchy: 7
+}
 
 var tree = []
 
@@ -21,40 +54,68 @@ else if(vars.exists("$local.idvalues") && vars.get("$local.idvalues") && vars.ge
 
 if (uidParam)
 {
+    // load one by uid.
+    // Basically the data to return is also encoded in the uid itself -> no extra data loading is needed.
     let uid = JSON.parse(uidParam);
-    let isObjectRelationNode = uid != null && typeof uid[2] == "string";
+    // if objectRelationTypeId is a string it is a relation node and no Grouping
+    let isObjectRelationNode = uid != null && typeof uid[UID.objectRelationTypeId] == "string";
 
     if (isObjectRelationNode)
     {
-        let relationTypeData = ObjectRelationUtils.getRelationType(uid[2]);
-        _insertEntry(tree, _getEntryData(uid[0], relationTypeData[3], relationTypeData[7], relationTypeData[8], undefined, false, uid[6]), "", 0, uid[3], relationTypeData[10], relationTypeData[12], relationTypeData[4]);
-
+        let relationTypeData = ObjectRelationUtils.getRelationType(uid[UID.objectRelationTypeId]);
+        _insertEntry(tree, _getEntryData(uid[UID.objectId], relationTypeData[3], relationTypeData[7], relationTypeData[8], undefined, false, uid[UID.objectRelationId]), "", 0, uid[UID.otherObjectType], relationTypeData[10], relationTypeData[12], relationTypeData[4]);
     }
 }
 else
 {
+    // load all
     var filter = vars.get("$local.filter")
     var selectedRelationType = null;
 
+    // filter for the object relation type
     if (filter && filter.filter)
     {
         filter = filter.filter;
         if (filter.childs.length > 0)
         {
-            selectedRelationType = filter.childs[0].value;
+            selectedRelationType = filter.childs[0].key;
         }
     }
-    if (vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param")) 
+    
+    // get the base object types / ids to load the tree fo
+    if (vars.get("$param.ObjectIds_param") && vars.get("$param.ObjectTypes_param")) 
     {
-        var originalObjectId = vars.get("$param.ObjectId_param");
-
-        _loadObjectRelationTree(originalObjectId, vars.get("$param.ObjectType_param"), selectedRelationType);
+        var originalObjectIds = JSON.parse(vars.getString("$param.ObjectIds_param"));
+        var originalObjectTypes = JSON.parse(vars.getString("$param.ObjectTypes_param"));
+        
+        if (originalObjectIds.length != originalObjectTypes.length)
+        {
+            throw "the parameters ObjectIds_param and ObjectTypes_param do not contain a json array of the same length";
+        }
+        
+        // load the object relations for each given objectId / Type
+        for (let i = 0; i < originalObjectIds.length; i++) 
+        {
+            _loadObjectRelationTree(tree, originalObjectIds[i], originalObjectTypes[i], selectedRelationType);
+        }
     }
 }
 
 result.object(tree);
 
-function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId, pNodeId, pLayer, pRelationTypeData)
+/**
+ * This function loads the whole tree and calls itself recursively
+ * @param {String[][]} pTree the tree array. NOTE: it is passed BY REFERENCE and will be altered by this function
+ * @param {String} pObjectId The id of the object to load the tree for (e.g. a ContactId)
+ * @param {String} pObjectType The type of the object to load the tree for (e.g. "Person")
+ * @param {String} [pObjectRelationTypeId=undefined] if given: the tree is filtered by this relation type and only nodes with this type are added
+ * @param {String} [pNodeId=null] the current nodeid is the node for which the next childrens are loaded. Needed for Recursion.
+ * @param {Integer} [pLayer=0] this is the current layer to load. Needed for Recursion.
+ * @param {String[][]} [pRelationTypeData=undefined] NOT ESSENTIAL it is just needed to not load the type data every time the function is called.
+ *                                                   If it is missing, it's loaded via the id encoded inside of the uid
+ *                                                   It only exists for better performance
+ */
+function _loadObjectRelationTree(pTree, pObjectId, pObjectType, pObjectRelationTypeId, pNodeId, pLayer, pRelationTypeData)
 {
     // prevent stack overflows
     if (pLayer > 30)
@@ -66,8 +127,8 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
     if (pNodeId == undefined)
         pNodeId = null;
         
-    var currentObjectId = pObjectId
-        
+    var currentObjectId = pObjectId;
+    
     if (currentObjectId && pObjectType)
     {
         if (pLayer == 0)
@@ -75,7 +136,6 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
             if (pObjectRelationTypeId)
             {
                 let relationTypeData = ObjectRelationUtils.getRelationType(pObjectRelationTypeId);
-                
                 // if hirachy: get most top id else use the current currentObjectId
                 if (relationTypeData[4] == "1")
                 {
@@ -83,11 +143,27 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
                     relationTypeData = ObjectRelationUtils.getRelationType(relationTypeData[8]);
                     currentObjectId = _getRootID(currentObjectId, relationTypeData);
                 } 
+                
+                var parentTmpTree = [];
+                var childsTmpTree = [];
+                // add as group (only temporary and add it really if childs were found 
                                                                                                                                       // true to enable the insert button always --v
-                let uids = _insertEntry(tree, [[currentObjectId, "", "", "", "", relationTypeData[7]]], pNodeId, pLayer, pObjectType, selectedRelationType, relationTypeData[12], true)
+                let uids = _insertEntry(parentTmpTree, [[currentObjectId, "", "", "", "", relationTypeData[7]]], pNodeId, pLayer, pObjectType, selectedRelationType, relationTypeData[12], true)
                 for (let i = 0; i < uids.length; i++) 
                 {                    
-                    _loadObjectRelationTree(uids[i][0], uids[i][3], relationTypeData[0], uids[i], pLayer+1, relationTypeData);
+                    // recursive call
+                    _loadObjectRelationTree(childsTmpTree, uids[i][UID.objectId], uids[i][UID.otherObjectType], relationTypeData[0], uids[i], pLayer+1, relationTypeData);
+                }
+                                
+                // only add parent if childs are available
+                if (childsTmpTree.length > 0)
+                {
+                    // concat does not mutate the tree -> the reference "pTree" would not point to the global "tree" anymore
+                    // --> use push for each element
+                    parentTmpTree.concat(childsTmpTree).forEach(function(pElement)
+                    {
+                        pTree.push(pElement);
+                    })
                 }
             }
             else // no ObjectType chosen
@@ -96,7 +172,7 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
                 var relationTypes = _getRelationTypes(pObjectType);
                 
                 for (let i=0; i<relationTypes.length; i++)
-                {   
+                {                       
                     var data = _getEntryData(currentObjectId, relationTypes[i][3], relationTypes[i][7], relationTypes[i][8]);
                     
                     // if any subentry: show objectType
@@ -105,9 +181,10 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
                         // TODO: Icons, BINDATA
                         // var icon = getIcon...
                         let uid = [currentObjectId, i, relationTypes[i]];
-                        tree.push([JSON.stringify(uid), translate.text(relationTypes[i][1]), JSON.stringify(pNodeId), true, null, null, "", relationTypes[i][0], relationTypes[i][12]]);
+                        // add the relationtype as grouping
+                        pTree.push([JSON.stringify(uid), translate.text(relationTypes[i][1]), JSON.stringify(pNodeId), true, null, null, "", relationTypes[i][0], relationTypes[i][12]]);
                         
-                        _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId, uid, pLayer+1, relationTypes[i]);
+                        _loadObjectRelationTree(pTree, pObjectId, pObjectType, pObjectRelationTypeId, uid, pLayer+1, relationTypes[i]);
                     }
                 }
             }
@@ -116,7 +193,14 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
         {
             // if no relationType given, load from nodeId
             if (!pRelationTypeData)
-                pRelationTypeData = pNodeId[2];
+                pRelationTypeData = pNodeId[UID.objectRelationTypeId];
+            
+            // if it's only the id, load via function
+            if (typeof pRelationTypeData == "string")
+            {
+                pRelationTypeData = ObjectRelationUtils.getRelationType(pRelationTypeData);
+            }
+            
             var thisRelationTypeId = pRelationTypeData[0];
             var otherRelationTypeId = pRelationTypeData[10];            
             var hierarchy = pRelationTypeData[4];
@@ -141,10 +225,11 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
                     relationTypeIdForNew = thisRelationTypeId;
                 
                 
-                let uids = _insertEntry(tree, myData, pNodeId, pLayer, destObjectType, relationTypeIdForNew, icon, hierarchy)
+                let uids = _insertEntry(pTree, myData, pNodeId, pLayer, destObjectType, relationTypeIdForNew, icon, hierarchy)
                 for (let i = 0; i < uids.length; i++) 
-                {                    
-                    _loadObjectRelationTree(uids[i][0], uids[i][3], pObjectRelationTypeId, uids[i], pLayer+1, pRelationTypeData);
+                {                
+                    // recursive call
+                    _loadObjectRelationTree(pTree, uids[i][UID.objectId], uids[i][UID.otherObjectType], pObjectRelationTypeId, uids[i], pLayer+1, pRelationTypeData);
                 }
             }
             else
@@ -153,20 +238,20 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId,
                 var prevObjectId;
                 if (pNodeId[4] != undefined)
                 {
-                    prevObjectId = pNodeId[4][0];
+                    prevObjectId = pNodeId[UID.relationTypeData][0];
                 }
                 
-                var entryData = _getEntryData(pNodeId[0], direction, relationType1, relationType2, prevObjectId, true);
+                var entryData = _getEntryData(pNodeId[UID.objectId], direction, relationType1, relationType2, prevObjectId, true);
 
                 if (direction == "same")
                     relationTypeIdForNew = thisRelationTypeId
 
                 // add both sides. Only one will succeed, because the prevObjectId will be filtered
-                _insertEntry(tree, entryData, pNodeId, pLayer, destObjectType, thisRelationTypeId, icon, hierarchy, 0);
+                _insertEntry(pTree, entryData, pNodeId, pLayer, destObjectType, thisRelationTypeId, icon, hierarchy, 0);
                 if (direction == "same")
                 {
-                    var otherEntryData = _getEntryData(pNodeId[0], "normal", relationType1, relationType2, prevObjectId, true);
-                    _insertEntry(tree, otherEntryData, pNodeId, pLayer, destObjectType, thisRelationTypeId, icon, hierarchy, 1);
+                    var otherEntryData = _getEntryData(pNodeId[UID.objectId], "normal", relationType1, relationType2, prevObjectId, true);
+                    _insertEntry(pTree, otherEntryData, pNodeId, pLayer, destObjectType, thisRelationTypeId, icon, hierarchy, 1);
                 }
             }
         }
@@ -228,7 +313,7 @@ function _getEntryData(pObjectId, pDirection, pRelationType1, pRelationType2, pP
                  join AB_OBJECTRELATIONTYPE on AB_OBJECTRELATIONTYPEID = AB_OBJECTRELATIONTYPE" + myNum + " and ","1=2", "", false));
     
     // try again with other side for "same"
-    if (data.length == 0 && pDirection == "same" && !pNoRecursion || pObjectRelationId && data.length > 0 && !data[0][0])
+    if (data.length == 0 && pDirection == "same" && !pNoRecursion || pObjectRelationId && data.length > 0 && !data[0][ENTRY_DATA.objectId])
     {
          return _getEntryData(pObjectId, "normal", pRelationType1, pRelationType2, pPrevId, true, pObjectRelationId)
     }
@@ -240,7 +325,7 @@ function _getEntryData(pObjectId, pDirection, pRelationType1, pRelationType2, pP
 function _getRelationTypes(pObjectType)
 {
     // TODO: load from entity when possible
-    return ObjectRelationUtils.getPossibleRelationTypes(pObjectType, true);
+    return ObjectRelationUtils.getPossibleRelationTypes([pObjectType], true);
 }
 
 /**
@@ -266,13 +351,14 @@ function _insertEntry(pTree, pEntryData, pNodeId, pLayer, pObjectType, pNewRelat
     var uids = [];
     for(let i = 0; i < pEntryData.length; i++)
     {
-        var display = db.cell(ContextUtils.getNameSql(pObjectType, pEntryData[i][0]));
+        var display = db.cell(ContextUtils.getNameSql(pObjectType, pEntryData[i][ENTRY_DATA.objectId]));
         // TODO: Icon                       
-        var uid = [pEntryData[i][0], i, pEntryData[i][5], pObjectType, pNodeId, pEntryData[i][2], pEntryData[i][1], pHierarchy]
+        var uid = [pEntryData[i][ENTRY_DATA.objectId], i, pEntryData[i][ENTRY_DATA.objectRelationTypeId], pObjectType, pNodeId, pEntryData[i][ENTRY_DATA.objectType], pEntryData[i][ENTRY_DATA.objectRelationId], pHierarchy]
+
         if (pNum)
             uid.push(pNum);
         uids.push(uid);
-        pTree.push([JSON.stringify(uid), display, JSON.stringify(pNodeId), expanded, pEntryData[i][0], pObjectType, pEntryData[i][4], pNewRelationTypeId, pIcon]);
+        pTree.push([JSON.stringify(uid), display, JSON.stringify(pNodeId), expanded, pEntryData[i][ENTRY_DATA.objectId], pObjectType, pEntryData[i][ENTRY_DATA.info], pNewRelationTypeId, pIcon]);
     }
     return uids;
 }
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
index 9be46d3b15a8cba7ef2c661771a116404d4b0f16..41e58e2067905eb172c7c00cd3002333a86fc069 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("Contact_lib");
 import("system.util");
 import("ObjectRelation_lib");
 import("system.vars");
@@ -8,15 +9,16 @@ if (selectedObjectRelationTypeId)
 {
     relationTypeData = ObjectRelationUtils.getRelationType(selectedObjectRelationTypeId)
     if (relationTypeData[0]) 
-    {
+    {       
         var relationType1 = relationTypeData[7];
         var relationType2 = relationTypeData[8];
+        var objectType1 = relationTypeData[5];
+        var objectType2 = relationTypeData[6];
         var side = relationTypeData[9];
         var objectId1;
         var objectId2;
         var info = vars.get("$field.INFO");
         
-        
         if (side == "1")
         {
             objectId1 = vars.get("$field.TARGET_ID");
diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod
index 2677926bfe6d320f5c878827d407bd87ac713563..a8221be9b224c20abb13d4aade6d7d418302cdd0 100644
--- a/entity/Object_entity/Object_entity.aod
+++ b/entity/Object_entity/Object_entity.aod
@@ -241,6 +241,20 @@
       <name>ContactId_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityConsumer>
+      <name>PrivatePersons</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PrivatePerson_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ExcludedPersonIds_param</name>
+          <valueProcess>%aditoprj%/entity/Object_entity/entityfields/privatepersons/children/excludedpersonids_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Object_entity/documentation.adoc b/entity/Object_entity/documentation.adoc
index 85191c1903e7182355442f72983e1db87b4ece13..edd401fcdbadf67d37e0d28cc045cb5496a7ce3e 100644
--- a/entity/Object_entity/documentation.adoc
+++ b/entity/Object_entity/documentation.adoc
@@ -1,4 +1,4 @@
-== Object_entity ==
+= Object_entity
 
 This Entity provides access to different Objects.
 
diff --git a/entity/Object_entity/entityfields/privatepersons/children/excludedpersonids_param/valueProcess.js b/entity/Object_entity/entityfields/privatepersons/children/excludedpersonids_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c5bba8e3b6fddb019149b80621761500e8514de
--- /dev/null
+++ b/entity/Object_entity/entityfields/privatepersons/children/excludedpersonids_param/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+
+if (vars.exists("$param.ExcludedObjectIds_param") && vars.get("$param.ExcludedObjectIds_param"))
+{
+    result.string(vars.get("$param.ExcludedObjectIds_param"))
+}
\ No newline at end of file
diff --git a/entity/Object_entity/recordcontainers/jdito/contentProcess.js b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
index be53d613509b6299cd40adf724395524a7a6e15c..959e539e3fa4fb174e0ed0f1e33c69860de603c2 100644
--- a/entity/Object_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
@@ -7,8 +7,10 @@ import("Context_lib");
 // NOTE THAT THIS ENTITY USES THE TARGET_CONSUMER_PROCESSES OF THE PROVIDERS
 // --> THIS PROCESS WON'T NOT BE EXECUTED IN SOME CASES.
 
-if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"))
+if (vars.get("$param.ObjectType_param"))
 {
+    var objectType = vars.get("$param.ObjectType_param");
+    
     var excludedIds = [];
     if (vars.exists("$param.ExcludedObjectIds_param") && vars.get("$param.ExcludedObjectIds_param"))
         excludedIds = JSON.parse(vars.getString("$param.ExcludedObjectIds_param"));
@@ -17,7 +19,7 @@ if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"
     if (vars.exists("$param.ContactId") && vars.get("$param.ContactId"))
         contactId = vars.get("$param.ContactId");
     
-    result.object(db.table(ContextUtils.getContextDataSql(vars.get("$param.ObjectType_param"), contactId, false, undefined, false, excludedIds)))
+    result.object(db.table(ContextUtils.getContextDataSql(objectType, contactId, false, undefined, false, excludedIds)))
 } 
 else
 {
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 62a2d841e53c3413d52cd3afba223d9f24a7b70f..8d7b142dce6965510a32241297c5e3116ef3c45f 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -4,6 +4,9 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Offer_entity/documentation.adoc</documentation>
   <title>Offer</title>
+  <siblings>
+    <element>Offeritem_entity</element>
+  </siblings>
   <grantUpdateProcess>%aditoprj%/entity/Offer_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/Offer_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Offer_entity/contentTitleProcess.js</contentTitleProcess>
@@ -81,6 +84,7 @@
     <entityField>
       <name>IMAGE</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/image/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -690,12 +694,16 @@
       <dependency>
         <name>dependency</name>
         <entityName>Context_entity</entityName>
-        <fieldName>Context</fieldName>
+        <fieldName>Exclusive</fieldName>
       </dependency>
       <children>
         <entityParameter>
-          <name>Whitelist</name>
-          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/contexts/children/whitelist/valueProcess.js</valueProcess>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>InvertBlacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -817,7 +825,6 @@
       <title>Footer text</title>
       <contentType>LONG_TEXT</contentType>
       <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/footer/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/footer/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityParameter>
       <name>OfferFooter_param</name>
diff --git a/entity/Offer_entity/conditionProcess.js b/entity/Offer_entity/conditionProcess.js
index b14a501b815b431fb104bad81e46125ecaca45eb..06d75b37a1d983946fb35c719230574cfc0a7a1e 100644
--- a/entity/Offer_entity/conditionProcess.js
+++ b/entity/Offer_entity/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("OFFER.OBJECT_ROWID", "$param.ObjectRowId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Offer_entity/documentation.adoc b/entity/Offer_entity/documentation.adoc
index 98645e67cccae7bcdbbd4c28c38f0f50f47581b0..ba5c6a571353ab909ef653158ae5b1985376e7bf 100644
--- a/entity/Offer_entity/documentation.adoc
+++ b/entity/Offer_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= OFFER
+= Offer_entity
 
 :hardbreaks:
 
diff --git a/entity/Offer_entity/entityfields/contact_id/valueProcess.js b/entity/Offer_entity/entityfields/contact_id/valueProcess.js
index ca10ffff0e5c7db64b8e1602cfc4006252747100..de0433be9112a5780ed0971d1252f0b312b26a75 100644
--- a/entity/Offer_entity/entityfields/contact_id/valueProcess.js
+++ b/entity/Offer_entity/entityfields/contact_id/valueProcess.js
@@ -21,7 +21,7 @@ if ((!vars.exists("$param.ContactId_param") || !vars.get("$param.ContactId_param
 if (contactId) 
 {
     var lang = db.cell(SqlCondition.begin()
-        .andPrepare("CONTACT.CONTACTID", contactid)
+        .andPrepare("CONTACT.CONTACTID", contactId)
         .buildSql("select ISOLANGUAGE from CONTACT"));
 
     if(lang != "") 
diff --git a/entity/Offer_entity/entityfields/contexts/children/whitelist/valueProcess.js b/entity/Offer_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
similarity index 97%
rename from entity/Offer_entity/entityfields/contexts/children/whitelist/valueProcess.js
rename to entity/Offer_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
index 928bc6a94ca7787626928dc47c2262baabb82854..91cfc662013bf495f3c3180479eef66edf954b1f 100644
--- a/entity/Offer_entity/entityfields/contexts/children/whitelist/valueProcess.js
+++ b/entity/Offer_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
@@ -1,4 +1,4 @@
-import("system.vars");
-import("system.result");
-
+import("system.vars");
+import("system.result");
+
 result.string(vars.get("$param.PossibleConnectionTypes"))
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js b/entity/Offer_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Offer_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/footer/valueProcess.js b/entity/Offer_entity/entityfields/footer/valueProcess.js
index 192565648a52934053446ebc48e07722713ffcb2..15f63197dcbb880641f74070d9bdbbd5bcd96d5d 100644
--- a/entity/Offer_entity/entityfields/footer/valueProcess.js
+++ b/entity/Offer_entity/entityfields/footer/valueProcess.js
@@ -18,6 +18,6 @@ if (vars.get("$field.ChoosenTEXFooter") != "")
 {
     var binaryId = db.cell(SqlCondition.begin()
         .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.ChoosenTEXFooter")
-        .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-    result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getSystemAlias())));
+        .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getBinariesAlias());
+    result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getBinariesAlias())));
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/header/valueProcess.js b/entity/Offer_entity/entityfields/header/valueProcess.js
index 5ebdc79fc02cf4b23a7c4e478d2a3d6055b630f2..a06ff095b12adab740f92f0fd31539ebc47e1a98 100644
--- a/entity/Offer_entity/entityfields/header/valueProcess.js
+++ b/entity/Offer_entity/entityfields/header/valueProcess.js
@@ -1,5 +1,4 @@
 import("Sql_lib");
-import("system.logging");
 import("system.result");
 import("system.vars");
 import("system.neon");
@@ -19,6 +18,6 @@ if (vars.get("$field.ChoosenTEXHeader") != "")
 {
     var binaryId = db.cell(SqlCondition.begin()
         .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.ChoosenTEXHeader")
-        .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-    result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getSystemAlias())));
+        .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getBinariesAlias());
+    result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getBinariesAlias())));
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/maindocuments/stateProcess.js b/entity/Offer_entity/entityfields/maindocuments/stateProcess.js
index d80ff786571df619cb3388194ac84777938acbff..d2f8cf32f9a3ccae9303fcf266ac6d58133e96c1 100644
--- a/entity/Offer_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Offer_entity/entityfields/maindocuments/stateProcess.js
@@ -7,7 +7,7 @@ import("Sql_lib");
 
 if (OfferUtils.isEditable(vars.get("$field.STATUS"))) 
 {
-    if (0 == db.getBinaryCount("OFFER", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+    if (0 == db.getBinaryCount("OFFER", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
     {
         result.string(neon.COMPONENTSTATE_INVISIBLE);
     }
diff --git a/entity/Offer_entity/grantDeleteProcess.js b/entity/Offer_entity/grantDeleteProcess.js
index 287fe5261292fbc1d33f3a86cd673877ff688166..a3be3189c21a098cb8ab65f332cf1cfef565f146 100644
--- a/entity/Offer_entity/grantDeleteProcess.js
+++ b/entity/Offer_entity/grantDeleteProcess.js
@@ -1,3 +1,4 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
@@ -6,6 +7,7 @@ import("system.result");
 import("Offer_lib");
 
 result.string(OfferUtils.isDeletable(vars.get("$field.STATUS")) 
-    && !DocumentUtil.hasDocuments("OFFER", null, vars.get("$field.OFFERID"))
-    && !TaskUtils.hasTasks(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+//        && !DocumentUtil.hasDocuments("OFFER", null, vars.get("$field.OFFERID"))
+//        && !TaskUtils.hasTasks(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId())
+//        && !ActivityUtils.hasActivities(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId()))
+) // TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
index d06014df7b5d8a907207e3547acedbdece0084eb..e9466d0d8aa725a4b86afd5ed52df4c87b061179 100644
--- a/entity/Offer_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
@@ -14,5 +14,5 @@ else {
 
 cond.andPrepareVars("OFFER.STATUS", "$param.OfferStatus_param")
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Offeritem_entity/documentation.adoc b/entity/Offeritem_entity/documentation.adoc
index a5283456a0759e860a058690aeb402321c2779ec..2dabcaf313856bd5f2ecc6332b82e2fbda3ae05a 100644
--- a/entity/Offeritem_entity/documentation.adoc
+++ b/entity/Offeritem_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= OFFERITEM
+= Offeritem_entity
 :hardbreaks:
 
 Entity contains products that belong to the linked offer.
diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
index 2c2dc40460231b4e6cf5f081f48894856bb4cafc..5870914adc13d6d7af1b645a873b5c9c76e89fb9 100644
--- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
@@ -19,7 +19,7 @@ if(pid != "")
     
     //TODO: loading from db until loading from Consumer is possible.
     var ProductDetails = ProductUtils.getProductDetails(pid, PriceListFilter, 
-            [["info", db.translateStatement(SqlCondition.begin()
+            [["info", SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
                                   .andPrepareVars("DESCRIPTIONTRANSLATION.OBJECT_ROWID", "local.value")
                                   .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE = 'Product'")
                                   .andPrepareVars("DESCRIPTIONTRANSLATION.LANG", "$param.Language_param")
diff --git a/entity/Offeritem_entity/grantCreateProcess.js b/entity/Offeritem_entity/grantCreateProcess.js
index 658fcf03ff413844ff78cd652d86cbe62a0113bf..b8e2e7b1a844d2c2449e44ce4249f0d0f9531167 100644
--- a/entity/Offeritem_entity/grantCreateProcess.js
+++ b/entity/Offeritem_entity/grantCreateProcess.js
@@ -1,6 +1,5 @@
 import("system.vars");
 import("system.result");
 import("Offer_lib");
-import("system.logging");
 
 result.string(OfferUtils.isEditable(vars.get("$param.OfferStatus_param")));
\ No newline at end of file
diff --git a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
index 155a103a7d45a2dd589c72a6b79bd6c27cc32145..935c6d7b06f543932bafe5d2cb5cdf70d7bed013 100644
--- a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
@@ -6,4 +6,5 @@ import("system.vars");
 var cond = SqlCondition.begin()
                        .andPrepareVars("OFFERITEM.OFFER_ID", "$param.OfferId_param")
 
-result.string(db.translateCondition(cond.build("1=1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1=1"));
\ No newline at end of file
diff --git a/entity/Options_Entity/Options_Entity.aod b/entity/Options_Entity/Options_Entity.aod
deleted file mode 100644
index 2498e4e74d10038dca8ab77f82d60cbd172b203a..0000000000000000000000000000000000000000
--- a/entity/Options_Entity/Options_Entity.aod
+++ /dev/null
@@ -1,60 +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.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
-  <name>Options_Entity</name>
-  <description></description>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <title>Options</title>
-  <iconId>VAADIN:WRENCH</iconId>
-  <recordContainer>jdito</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>Option1</name>
-      <title>Option1</title>
-    </entityField>
-    <entityField>
-      <name>Option2</name>
-      <title>Option2</title>
-      <contentType>NUMBER</contentType>
-    </entityField>
-    <entityField>
-      <name>Option3</name>
-      <title>Option3</title>
-      <contentType>DATE</contentType>
-    </entityField>
-    <entityField>
-      <name>Option4</name>
-      <title>Option4</title>
-      <contentType>PASSWORD</contentType>
-    </entityField>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-  </entityFields>
-  <recordContainers>
-    <jDitoRecordContainer>
-      <name>jdito</name>
-      <jDitoRecordAlias>_____SYSTEMALIAS</jDitoRecordAlias>
-      <contentProcess>%aditoprj%/entity/Options_Entity/recordcontainers/jdito/contentProcess.js</contentProcess>
-      <recordFieldMappings>
-        <jDitoRecordFieldMapping>
-          <name>UID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>Option1.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>Option2.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>Option3.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>Option4.value</name>
-        </jDitoRecordFieldMapping>
-      </recordFieldMappings>
-    </jDitoRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/Options_Entity/contentProcess.js b/entity/Options_Entity/contentProcess.js
deleted file mode 100644
index 05c6a5486147b9a7fbc2e94a6bb14d1606e3df6d..0000000000000000000000000000000000000000
--- a/entity/Options_Entity/contentProcess.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.object([["1", "some text", "999", "124367654784", "some password"]])
\ No newline at end of file
diff --git a/entity/Options_Entity/recordcontainers/jdito/contentProcess.js b/entity/Options_Entity/recordcontainers/jdito/contentProcess.js
deleted file mode 100644
index 404d2ebf8cbd304790263c41a8041973ea5bd2bd..0000000000000000000000000000000000000000
--- a/entity/Options_Entity/recordcontainers/jdito/contentProcess.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("system.result");
-
-result.object([["1", "some text", "999", "124367654784", "some password"]])
\ No newline at end of file
diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod
index e05c1f0edbef1dec24b8dbffb1399aa09732ba17..8d267bc62baf3910f56af57d6cb2670025bf269f 100644
--- a/entity/Order_entity/Order_entity.aod
+++ b/entity/Order_entity/Order_entity.aod
@@ -45,9 +45,7 @@
       <outputFormat>dd.MM.yyyy</outputFormat>
       <inputFormat>dd.MM.yyyy</inputFormat>
       <mandatory v="true" />
-      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/salesorderdate/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/salesorderdate/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/salesorderdate/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>SALESORDERID</name>
@@ -78,6 +76,7 @@
     <entityField>
       <name>IMAGE</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/image/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -126,14 +125,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newOrderVersion</name>
-      <documentation>%aditoprj%/entity/Order_entity/entityfields/neworderversion/documentation.adoc</documentation>
-      <title>New receipt version</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/neworderversion/onActionProcess.js</onActionProcess>
-      <isObjectAction v="true" />
-      <iconId>VAADIN:DOLLAR</iconId>
-    </entityActionField>
     <entityField>
       <name>NET</name>
       <title>Total net</title>
@@ -159,13 +150,6 @@
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/isolanguage/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess>
     </entityField>
-    <entityActionField>
-      <name>newOrder</name>
-      <documentation>%aditoprj%/entity/Order_entity/entityfields/neworder/documentation.adoc</documentation>
-      <title>Copy receipt</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/neworder/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:COPY</iconId>
-    </entityActionField>
     <entityField>
       <name>VERSNR</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/versnr/documentation.adoc</documentation>
@@ -300,7 +284,6 @@
     </entityConsumer>
     <entityParameter>
       <name>OrderCurrency_param</name>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/ordercurrency_param/valueProcess.js</valueProcess>
       <expose v="true" />
       <mandatory v="false" />
       <description>PARAMETER</description>
@@ -329,6 +312,7 @@
       <name>OfferId_param</name>
       <expose v="true" />
       <mandatory v="false" />
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/offerid_param/documentation.adoc</documentation>
       <description>PARAMETER</description>
     </entityParameter>
     <entityConsumer>
@@ -353,15 +337,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newActivity</name>
-      <documentation>%aditoprj%/entity/Order_entity/entityfields/newactivity/documentation.adoc</documentation>
-      <title>New activity</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:HOURGLASS_END</iconId>
-      <tooltip>New activity</tooltip>
-      <tooltipProcess>%aditoprj%/entity/Order_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
     <entityField>
       <name>OFFER_ID</name>
       <title>Offer</title>
@@ -371,13 +346,6 @@
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/offer_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/offer_id/displayValueProcess.js</displayValueProcess>
     </entityField>
-    <entityActionField>
-      <name>newTask</name>
-      <documentation>%aditoprj%/entity/Order_entity/entityfields/newtask/documentation.adoc</documentation>
-      <title>New task</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:TASKS</iconId>
-    </entityActionField>
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess>
@@ -422,6 +390,7 @@
     </entityConsumer>
     <entityConsumer>
       <name>AttributeTree</name>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>AttributeRelation_entity</entityName>
@@ -452,13 +421,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>openAdminView</name>
-      <title>Open admin view</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CURLY_BRACKETS</iconId>
-      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/stateProcess.js</stateProcess>
-    </entityActionField>
     <entityField>
       <name>ORDERTYPE</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/ordertype/documentation.adoc</documentation>
@@ -471,6 +433,7 @@
     </entityField>
     <entityField>
       <name>ORDERSTATUS</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/orderstatus/documentation.adoc</documentation>
       <title>Sent</title>
       <contentType>BOOLEAN</contentType>
       <dropDownProcess>%aditoprj%/entity/Order_entity/entityfields/orderstatus/dropDownProcess.js</dropDownProcess>
@@ -488,6 +451,7 @@
     </entityField>
     <entityField>
       <name>CANCELLATION</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/cancellation/documentation.adoc</documentation>
       <title>Cancelled</title>
       <contentType>BOOLEAN</contentType>
       <dropDownProcess>%aditoprj%/entity/Order_entity/entityfields/cancellation/dropDownProcess.js</dropDownProcess>
@@ -515,7 +479,6 @@
       <contentType>DATE</contentType>
       <resolution>DAY</resolution>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/paydate/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/paydate/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>PAYDUEDATE</name>
@@ -603,12 +566,16 @@
       <dependency>
         <name>dependency</name>
         <entityName>Context_entity</entityName>
-        <fieldName>Context</fieldName>
+        <fieldName>Exclusive</fieldName>
       </dependency>
       <children>
         <entityParameter>
-          <name>Whitelist</name>
-          <valueProcess>%aditoprj%/entity/Order_entity/entityfields/contexts/children/whitelist/valueProcess.js</valueProcess>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Order_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>InvertBlacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -616,14 +583,19 @@
       <name>PossibleConnectionTypes</name>
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/possibleconnectiontypes/valueProcess.js</valueProcess>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>ObjectRowId_param</name>
       <expose v="true" />
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/objectrowid_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>ObjectType_param</name>
       <expose v="true" />
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/objecttype_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
     </entityParameter>
     <entityField>
       <name>PAYMENTTERMS</name>
@@ -645,6 +617,7 @@
     </entityField>
     <entityField>
       <name>DELIVERYADDRESS</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/deliveryaddress/documentation.adoc</documentation>
       <title>Delivery address</title>
       <contentType>LONG_TEXT</contentType>
       <mandatory v="true" />
@@ -687,6 +660,7 @@
     </entityConsumer>
     <entityConsumer>
       <name>PossibleAddresses</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc</documentation>
       <dependency>
         <name>dependency</name>
         <entityName>Address_entity</entityName>
@@ -706,17 +680,21 @@
     </entityField>
     <entityField>
       <name>DUNNINGTEXT</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/dunningtext/documentation.adoc</documentation>
       <title>Dunning text</title>
       <contentType>LONG_TEXT</contentType>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/dunningtext/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Order_entity/entityfields/dunningtext/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
       <name>OrderPaymentTerm_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>OrderDeliveryTerm_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityConsumer>
       <name>Offers</name>
@@ -781,15 +759,119 @@
     <entityParameter>
       <name>OrderFooter_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>OrderDunningDate_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>OrderDunningLevel_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>OrderType_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>OrderCancellation_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityField>
+      <name>ChosenPaymentAddress</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/documentation.adoc</documentation>
+      <title>Choose payment address</title>
+      <consumer>PossibleAddresses</consumer>
+      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>ChosenDeliveryAddress</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/documentation.adoc</documentation>
+      <title>Choose delivery address</title>
+      <consumer>PossibleAddresses</consumer>
+      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/displayValueProcess.js</displayValueProcess>
+      <onValueChange>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityParameter>
+      <name>OrderCode_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>OrderStatus_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
+    <entityParameter>
+      <name>OrderVersnr_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityField>
+      <name>FullOrderCode</name>
+      <title>Order number</title>
+      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/fullordercode/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>OrderPaymentAddress_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/orderpaymentaddress_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>OrderDeliveryAddress_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/orderdeliveryaddress_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityActionField>
+      <name>newOrderVersion</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/neworderversion/documentation.adoc</documentation>
+      <title>New receipt version</title>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/neworderversion/onActionProcess.js</onActionProcess>
+      <isObjectAction v="true" />
+      <iconId>VAADIN:DOLLAR</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newOrder</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/neworder/documentation.adoc</documentation>
+      <title>Copy receipt</title>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/neworder/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:COPY</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newActivity</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/newactivity/documentation.adoc</documentation>
+      <title>New activity</title>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:HOURGLASS_END</iconId>
+      <tooltip>New activity</tooltip>
+      <tooltipProcess>%aditoprj%/entity/Order_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
+    </entityActionField>
+    <entityActionField>
+      <name>newTask</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/newtask/documentation.adoc</documentation>
+      <title>New task</title>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:TASKS</iconId>
+    </entityActionField>
     <entityActionField>
       <name>TransferDeliveryNote</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/transferdeliverynote/documentation.adoc</documentation>
@@ -798,10 +880,6 @@
       <iconId>VAADIN:NOTEBOOK</iconId>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/transferdeliverynote/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityParameter>
-      <name>OrderType_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityActionField>
       <name>TransferInvoice</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/transferinvoice/documentation.adoc</documentation>
@@ -826,10 +904,6 @@
       <iconId>VAADIN:CLOSE</iconId>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/cancel/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityParameter>
-      <name>OrderCancellation_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityActionField>
       <name>setDunning</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/setdunning/documentation.adoc</documentation>
@@ -846,41 +920,6 @@
       <iconId>VAADIN:DOLLAR</iconId>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/setpaid/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityField>
-      <name>ChosenPaymentAddress</name>
-      <title>Choose payment address</title>
-      <consumer>PossibleAddresses</consumer>
-      <mandatory v="false" />
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Order_entity/entityfields/chosenpaymentaddress/onValueChange.js</onValueChange>
-      <onValueChangeTypes>
-        <element>MASK</element>
-        <element>PROCESS</element>
-        <element>PROCESS_SETVALUE</element>
-      </onValueChangeTypes>
-    </entityField>
-    <entityField>
-      <name>ChosenDeliveryAddress</name>
-      <title>Choose delivery address</title>
-      <consumer>PossibleAddresses</consumer>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Order_entity/entityfields/chosendeliveryaddress/onValueChange.js</onValueChange>
-      <onValueChangeTypes>
-        <element>MASK</element>
-        <element>PROCESS</element>
-        <element>PROCESS_SETVALUE</element>
-      </onValueChangeTypes>
-    </entityField>
-    <entityParameter>
-      <name>Countitems_param</name>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/countitems_param/valueProcess.js</valueProcess>
-    </entityParameter>
-    <entityParameter>
-      <name>OrderCode_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityActionField>
       <name>printOrder</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/printorder/documentation.adoc</documentation>
@@ -889,19 +928,6 @@
       <iconId>VAADIN:FILE</iconId>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/printorder/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityParameter>
-      <name>OrderStatus_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>OrderVersnr_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityField>
-      <name>FullOrderCode</name>
-      <title>Order number</title>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/fullordercode/valueProcess.js</valueProcess>
-    </entityField>
     <entityActionField>
       <name>printReminder</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/printreminder/documentation.adoc</documentation>
@@ -910,14 +936,13 @@
       <iconId>VAADIN:FILE</iconId>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/printreminder/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityParameter>
-      <name>OrderPaymentAddress_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>OrderDeliveryAddress_param</name>
-      <expose v="true" />
-    </entityParameter>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -963,6 +988,7 @@
         <dbRecordFieldMapping>
           <name>CURRENCY.value</name>
           <recordfield>SALESORDER.CURRENCY</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>FOOTER.value</name>
@@ -1007,10 +1033,12 @@
         <dbRecordFieldMapping>
           <name>CONTACT_ORG_ID.value</name>
           <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACT_PERSON_ID.value</name>
           <recordfield>CONTACT.PERSON_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CURRENCY.displayValue</name>
@@ -1019,6 +1047,7 @@
         <dbRecordFieldMapping>
           <name>OFFER_ID.value</name>
           <recordfield>SALESORDER.OFFER_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACT_ORG_ID.displayValue</name>
@@ -1047,6 +1076,7 @@
         <dbRecordFieldMapping>
           <name>ORDERTYPE.value</name>
           <recordfield>SALESORDER.ORDERTYPE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PAID.value</name>
@@ -1055,6 +1085,7 @@
         <dbRecordFieldMapping>
           <name>PAYDATE.value</name>
           <recordfield>SALESORDER.PAYDATE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PAYDUEDATE.value</name>
@@ -1079,10 +1110,12 @@
         <dbRecordFieldMapping>
           <name>PAYMENTTERMS.value</name>
           <recordfield>SALESORDER.PAYMENTTERMS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>DELIVERYTERMS.value</name>
           <recordfield>SALESORDER.DELIVERYTERMS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>DELIVERYADDRESS.value</name>
diff --git a/entity/Order_entity/documentation.adoc b/entity/Order_entity/documentation.adoc
index a95ff974601aad590b767047d74d2bd23eb074a8..194c56eecd28f3b5d56381f804bd1fb87dbe733a 100644
--- a/entity/Order_entity/documentation.adoc
+++ b/entity/Order_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= SALESORDER
+= Order_entity
 
 :hardbreaks:
 
diff --git a/entity/Order_entity/entityfields/cancellation/documentation.adoc b/entity/Order_entity/entityfields/cancellation/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..576a39d48d5cd7c923f8bf377554c85d2917348d
--- /dev/null
+++ b/entity/Order_entity/entityfields/cancellation/documentation.adoc
@@ -0,0 +1 @@
+Checkbox if order is cancelled.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/chosendeliveryaddress/documentation.adoc b/entity/Order_entity/entityfields/chosendeliveryaddress/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..aef202e050b1df2fc1627edf2759b78b1925d918
--- /dev/null
+++ b/entity/Order_entity/entityfields/chosendeliveryaddress/documentation.adoc
@@ -0,0 +1 @@
+Field to choose a delivery address from the specified contact's current addresses. If a receipt is made from an offer the address is received from the offer. Otherwise the default company address is selected. Default is the same as the payment address, but can be changed. 
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js b/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js
index daa4e4fa28136844a29bb325170ac9bb6c35b80c..f0b227bdb4b0fe3afa8e9542ce9f10af4630d3b9 100644
--- a/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js
+++ b/entity/Order_entity/entityfields/chosendeliveryaddress/valueProcess.js
@@ -5,14 +5,20 @@ import("system.vars");
 
 if (((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null))
 {
-    if (vars.get("$field.DELIVERYADDRESS")) 
+    if (vars.get("$field.DELIVERYADDRESS")) //case when a receipt is made from an offer i.e. the address is already set
     {
     result.string(null);
     }
     else 
         {
-    var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID"));
+    var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID")); //otherwise get the default address
     if (defaultAddressId)
         result.string(defaultAddressId);
         }
 }
+else //(i.e this.value!=null)
+{
+ var defaultAddressId2 = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID")); //if the user changes the contact and project again, get the address of the new contact
+    if (defaultAddressId2)
+        result.string(defaultAddressId2);   
+}
diff --git a/entity/Order_entity/entityfields/chosenpaymentaddress/documentation.adoc b/entity/Order_entity/entityfields/chosenpaymentaddress/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..11fd3d5cad1e9395c952a8658ea3a20049bd9311
--- /dev/null
+++ b/entity/Order_entity/entityfields/chosenpaymentaddress/documentation.adoc
@@ -0,0 +1 @@
+Field to choose a payment address from the specified contact's current addresses. If a receipt is made from an offer the address is received from the offer. Otherwise the default company address is selected. 
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js b/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js
index 083eb6bf297264e03ee2cfa1207c3d858897dcef..5520b6f007660f1ce62e6216c5b587c5e3bbdaf6 100644
--- a/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js
+++ b/entity/Order_entity/entityfields/chosenpaymentaddress/valueProcess.js
@@ -5,14 +5,20 @@ import("system.vars");
 
 if (((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null))
 {
-    if (vars.get("$field.PAYMENTADDRESS")) 
+    if (vars.get("$field.PAYMENTADDRESS")) //case when a receipt is made from an offer i.e. the address is already set
     {
     result.string(null);
     }
     else 
         {
-    var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID"));
+    var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID")); //otherwise get the default address
     if (defaultAddressId)
         result.string(defaultAddressId);
         }
 }
+else //(i.e this.value!=null)
+{
+ var defaultAddressId2 = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID")); //if the user changes the contact and project again, get the address of the new contact
+    if (defaultAddressId2)
+        result.string(defaultAddressId2);   
+}
diff --git a/entity/Order_entity/entityfields/contact_id/onValueChange.js b/entity/Order_entity/entityfields/contact_id/onValueChange.js
index 90bde5ed09496674f5fe694338b5a25ca0bae8ca..a65930ffa61d383b2d12068e75e6fae55585bc50 100644
--- a/entity/Order_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Order_entity/entityfields/contact_id/onValueChange.js
@@ -1,3 +1,4 @@
+import("system.neon");
 import("system.vars");
 import("system.db");
 import("Util_lib");
@@ -8,5 +9,7 @@ if(contactid != "")
 {
     var relData = db.array(db.ROW, "select ISOLANGUAGE from CONTACT where CONTACTID = '" + contactid + "'");
     
-    if(relData[0] != "")    vars.set("$field.ISOLANGUAGE", relData[0]);
-}
\ No newline at end of file
+    if(relData[0] != "")   
+        vars.set("$field.ISOLANGUAGE", relData[0]);
+}
+neon.setFieldValue("$field.OBJECT_ROWID", null)
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/contexts/children/blacklist_param/valueProcess.js b/entity/Order_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..767a3db63e072dc4dfaef4c700b358c75470a2fd
--- /dev/null
+++ b/entity/Order_entity/entityfields/contexts/children/blacklist_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.PossibleConnectionTypes"));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js b/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/contexts/children/whitelist/valueProcess.js b/entity/Order_entity/entityfields/contexts/children/whitelist/valueProcess.js
deleted file mode 100644
index 928bc6a94ca7787626928dc47c2262baabb82854..0000000000000000000000000000000000000000
--- a/entity/Order_entity/entityfields/contexts/children/whitelist/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$param.PossibleConnectionTypes"))
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/countitems_param/valueProcess.js b/entity/Order_entity/entityfields/countitems_param/valueProcess.js
deleted file mode 100644
index fc714e95d0903906495442940ca974d4be2b1b59..0000000000000000000000000000000000000000
--- a/entity/Order_entity/entityfields/countitems_param/valueProcess.js
+++ /dev/null
@@ -1,15 +0,0 @@
-//import("system.result");
-//import("system.vars");
-//import("system.neon");
-//import("system.entities");
-//
-////var loadingConfig = entities.createConfigForLoadingConsumerRows().consumer("Orderitems");
-////var count = entities.getRowCount(loadingConfig);
-//
-//var conf = entities.createConfigForLoadingRows()
-//                   .entity("Orderitem_entity")
-//                   .provider("Orderitems")
-//                   .addParameter("ContactId_param", vars.get("$field.CONTACT_ID"));
-//                   
-//var count=entities.getRowCount(conf);                  
-//result.string(count);
diff --git a/entity/Order_entity/entityfields/deliveryaddress/documentation.adoc b/entity/Order_entity/entityfields/deliveryaddress/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..7f6c328fd9820983983a4870b4c976c65b5093c0
--- /dev/null
+++ b/entity/Order_entity/entityfields/deliveryaddress/documentation.adoc
@@ -0,0 +1 @@
+Normally it is the same as the Payment Address, but can be set as its own, if the delivery address does not match the payment address.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/dunningdate/stateProcess.js b/entity/Order_entity/entityfields/dunningdate/stateProcess.js
index bd8b298328ee30fe9401afd20691b51f7034dcd0..d1055b709a36c48fbe9a8844499475bfe4337dc1 100644
--- a/entity/Order_entity/entityfields/dunningdate/stateProcess.js
+++ b/entity/Order_entity/entityfields/dunningdate/stateProcess.js
@@ -3,9 +3,9 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic")
 
-if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()) || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()))
     {
-    result.string(neon.COMPONENTSTATE_AUTO);
+    result.string(neon.COMPONENTSTATE_EDITABLE);
     }
 else
     {
diff --git a/entity/Order_entity/entityfields/dunninglevel/stateProcess.js b/entity/Order_entity/entityfields/dunninglevel/stateProcess.js
index bd8b298328ee30fe9401afd20691b51f7034dcd0..d1055b709a36c48fbe9a8844499475bfe4337dc1 100644
--- a/entity/Order_entity/entityfields/dunninglevel/stateProcess.js
+++ b/entity/Order_entity/entityfields/dunninglevel/stateProcess.js
@@ -3,9 +3,9 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic")
 
-if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()) || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()))
     {
-    result.string(neon.COMPONENTSTATE_AUTO);
+    result.string(neon.COMPONENTSTATE_EDITABLE);
     }
 else
     {
diff --git a/entity/Order_entity/entityfields/dunningtext/documentation.adoc b/entity/Order_entity/entityfields/dunningtext/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b955b05daebe3c8c47855fa1103583e2a65f5a1a
--- /dev/null
+++ b/entity/Order_entity/entityfields/dunningtext/documentation.adoc
@@ -0,0 +1 @@
+Displays the default set dunning text.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/dunningtext/stateProcess.js b/entity/Order_entity/entityfields/dunningtext/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1055b709a36c48fbe9a8844499475bfe4337dc1
--- /dev/null
+++ b/entity/Order_entity/entityfields/dunningtext/stateProcess.js
@@ -0,0 +1,13 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("KeywordRegistry_basic")
+
+if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()))
+    {
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+    }
+else
+    {
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+    }
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/footer/valueProcess.js b/entity/Order_entity/entityfields/footer/valueProcess.js
index da93ce5f2efc0488c2259f82b3b5c783337a7375..c1f95afc6561ec8bfd0a494f291500999dd9adf6 100644
--- a/entity/Order_entity/entityfields/footer/valueProcess.js
+++ b/entity/Order_entity/entityfields/footer/valueProcess.js
@@ -22,7 +22,7 @@ if (vars.get("$this.value") == null)
     {
         var binaryId = db.cell(SqlCondition.begin()
             .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.ChosenTexFooter")
-            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-        result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getSystemAlias())));
+            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getBinariesAlias());
+        result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getBinariesAlias())));
     }
 }
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/header/valueProcess.js b/entity/Order_entity/entityfields/header/valueProcess.js
index 038bf931e38f6a3ea50e99194e5da823d96a9fd6..7dd541dea0949f3933bfa9e55f6c58649c643132 100644
--- a/entity/Order_entity/entityfields/header/valueProcess.js
+++ b/entity/Order_entity/entityfields/header/valueProcess.js
@@ -20,7 +20,7 @@ if (vars.get("$this.value") == null)
     {
         var binaryId = db.cell(SqlCondition.begin()
             .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.ChosenTexHeader")
-            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getSystemAlias());
-        result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getSystemAlias())));
+            .buildSql("select ID from ASYS_BINARIES"), SqlUtils.getBinariesAlias());
+        result.string(util.decodeBase64String(db.getBinaryContent(binaryId, SqlUtils.getBinariesAlias())));
     }
 }
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/maindocuments/stateProcess.js b/entity/Order_entity/entityfields/maindocuments/stateProcess.js
index 9104233a61bb17be448f09b778adfa11c61162de..92f7d83dc384999f86fd2de389969c41479f1112 100644
--- a/entity/Order_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Order_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("SALESORDER", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("SALESORDER", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Order_entity/entityfields/objectrowid_param/documentation.adoc b/entity/Order_entity/entityfields/objectrowid_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a64ca3b24b114356f3582280544f72e4b1359e67
--- /dev/null
+++ b/entity/Order_entity/entityfields/objectrowid_param/documentation.adoc
@@ -0,0 +1 @@
+Holds the project ID
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/objecttype_param/documentation.adoc b/entity/Order_entity/entityfields/objecttype_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..36587da9fc53ba751ad9a1a7f3e98d143242ca41
--- /dev/null
+++ b/entity/Order_entity/entityfields/objecttype_param/documentation.adoc
@@ -0,0 +1 @@
+Holds the object type. In this case it is sales project.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/offerid_param/documentation.adoc b/entity/Order_entity/entityfields/offerid_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d746760ddb37571c1e6823c2ed701b705adec196
--- /dev/null
+++ b/entity/Order_entity/entityfields/offerid_param/documentation.adoc
@@ -0,0 +1 @@
+If the current receipt is linked with an offer, this parameter holds the ID.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/ordercode_versnr_fieldgroup/valueProcess.js b/entity/Order_entity/entityfields/ordercode_versnr_fieldgroup/valueProcess.js
index e63d77e5efd06bcf3bf3e63254ae41fbf574e49b..7e065cc1c9e17fbfa7155cf31690ea680577f12d 100644
--- a/entity/Order_entity/entityfields/ordercode_versnr_fieldgroup/valueProcess.js
+++ b/entity/Order_entity/entityfields/ordercode_versnr_fieldgroup/valueProcess.js
@@ -5,4 +5,4 @@ import("system.vars");
 if(!vars.get("$field.SALESORDERCODE") && !vars.get("$field.VERSNR"))
     result.string(translate.text("Receipt"));
 else
-    result.string(vars.get("$field.SALESORDERCODE") + "-" + vars.get("$field.VERSNR"));
+    result.string(vars.getString("$field.ORDERTYPE.displayValue") + " " + vars.get("$field.SALESORDERCODE") + "-" + vars.get("$field.VERSNR"));
diff --git a/entity/Order_entity/entityfields/orderdeliveryaddress_param/documentation.adoc b/entity/Order_entity/entityfields/orderdeliveryaddress_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b50a32de3db59790cfb871c49c908778c8b43081
--- /dev/null
+++ b/entity/Order_entity/entityfields/orderdeliveryaddress_param/documentation.adoc
@@ -0,0 +1 @@
+Carries the delivery address of the receipt. Can also be set from the offer if a receipt is to be created from a specified offer.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/orderpaymentaddress_param/documentation.adoc b/entity/Order_entity/entityfields/orderpaymentaddress_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..43cd09315c3da6da4918fff7eac2d6c0108320db
--- /dev/null
+++ b/entity/Order_entity/entityfields/orderpaymentaddress_param/documentation.adoc
@@ -0,0 +1 @@
+Carries the main address of the receipt. Can also be set from the offer if a receipt is to be created from a specified offer.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/orderstatus/documentation.adoc b/entity/Order_entity/entityfields/orderstatus/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..107a230323bd287ed8cf0c35dfc8417298c4ff06
--- /dev/null
+++ b/entity/Order_entity/entityfields/orderstatus/documentation.adoc
@@ -0,0 +1 @@
+Checkbox if order is sent.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/paid/stateProcess.js b/entity/Order_entity/entityfields/paid/stateProcess.js
index bd8b298328ee30fe9401afd20691b51f7034dcd0..c5b973b17369f2080b66374d84448a83637224eb 100644
--- a/entity/Order_entity/entityfields/paid/stateProcess.js
+++ b/entity/Order_entity/entityfields/paid/stateProcess.js
@@ -3,9 +3,9 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic")
 
-if((vars.get("$field.ORDERTYPE") == $KeywordRegistry.orderType$invoice()) || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if(vars.get("$field.ORDERTYPE") != $KeywordRegistry.orderType$confirmation())
     {
-    result.string(neon.COMPONENTSTATE_AUTO);
+    result.string(neon.COMPONENTSTATE_EDITABLE);
     }
 else
     {
diff --git a/entity/Order_entity/entityfields/paydate/stateProcess.js b/entity/Order_entity/entityfields/paydate/stateProcess.js
index 08bc5d1caf244373130abbf6cc954a83fe914020..c5b973b17369f2080b66374d84448a83637224eb 100644
--- a/entity/Order_entity/entityfields/paydate/stateProcess.js
+++ b/entity/Order_entity/entityfields/paydate/stateProcess.js
@@ -3,9 +3,9 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic")
 
-if(vars.get("$field.ORDERTYPE") != $KeywordRegistry.orderType$confirmation()|| vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if(vars.get("$field.ORDERTYPE") != $KeywordRegistry.orderType$confirmation())
     {
-    result.string(neon.COMPONENTSTATE_AUTO);
+    result.string(neon.COMPONENTSTATE_EDITABLE);
     }
 else
     {
diff --git a/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc b/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..657ff6bdced0279e33e5f4f420eb676c4e11eebb
--- /dev/null
+++ b/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc
@@ -0,0 +1 @@
+Filters the addresses based on the company and sales project choice.
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/salesorderdate/displayValueProcess.js b/entity/Order_entity/entityfields/salesorderdate/displayValueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Order_entity/entityfields/salesorderdate/stateProcess.js b/entity/Order_entity/entityfields/salesorderdate/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js b/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
index 9232f51b2e090002d80c469239ab003444411400..ec1a3a03e1963ccfd5a18a115d6e2920ce67841f 100644
--- a/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
+++ b/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.result");
 import("Entity_lib");
 
-result.string(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ORG_ID")));
+result.string(vars.get("$field.CONTACT_ORG_ID"));
diff --git a/entity/Order_entity/recordcontainers/db/conditionProcess.js b/entity/Order_entity/recordcontainers/db/conditionProcess.js
index 708518b4c62e378292e1b48f777ae508941ae9c1..ce09b123fbcbffd79742ce3f79d6fa6ae7007997 100644
--- a/entity/Order_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Order_entity/recordcontainers/db/conditionProcess.js
@@ -11,5 +11,5 @@ else {
     cond.andPrepareVars("SALESORDER.OBJECT_ROWID", "$param.ObjectRowId_param");
     cond.andPrepareVars("SALESORDEER.OBJECT_TYPE", "$param.ObjectType_param");
 }
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/onDBInsert.js b/entity/Order_entity/recordcontainers/db/onDBInsert.js
index 0e8805fd5a43b0613e7014d49deac71e88da3ab7..0babcfe31d678e580f0460302b57c104e9612a71 100644
--- a/entity/Order_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Order_entity/recordcontainers/db/onDBInsert.js
@@ -1,6 +1,7 @@
+import("Order_lib");
 import("system.neon");
 import("system.vars");
-import("Offer_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.OfferOriginal_Id_param"))
-    OfferUtils.copyOfferItems(vars.getString("$param.OfferOriginal_Id_param"), vars.get("$local.rowdata")["SALESORDER.OFFER_ID"]);
+//@TODO: OfferId_param is also set by 'copy order' -> the items of the offer are copied. What should happen?
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.OfferId_param"))
+    OrderUtils.copyOfferItemsToOrder(vars.getString("$param.OfferId_param"), vars.get("$local.rowdata")["SALESORDER.SALESORDERID"]);
diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod
index 5113afa1cef9245d6b4641858bc0ccdd653e9d5f..34126ad9647d466f27fb816772ff317fe46d5b11 100644
--- a/entity/Orderitem_entity/Orderitem_entity.aod
+++ b/entity/Orderitem_entity/Orderitem_entity.aod
@@ -231,10 +231,12 @@
     <entityParameter>
       <name>OrderStatus_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
     <entityParameter>
       <name>Language_param</name>
       <expose v="true" />
+      <description>PARAMETER</description>
     </entityParameter>
   </entityFields>
   <recordContainers>
@@ -292,18 +294,22 @@
         <dbRecordFieldMapping>
           <name>OPTIONAL.value</name>
           <recordfield>SALESORDERITEM.OPTIONAL</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PRICE.value</name>
           <recordfield>SALESORDERITEM.PRICE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PRODUCT_ID.value</name>
           <recordfield>SALESORDERITEM.PRODUCT_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>QUANTITY.value</name>
           <recordfield>SALESORDERITEM.QUANTITY</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>UNIT.value</name>
@@ -328,6 +334,7 @@
         <dbRecordFieldMapping>
           <name>INFO.value</name>
           <recordfield>SALESORDERITEM.INFO</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/Orderitem_entity/documentation.adoc b/entity/Orderitem_entity/documentation.adoc
index 145ceb970e81bd16471d4ea22117b5049a40cbf5..113baaf7b4cedb16ca744589d8ff292818f26787 100644
--- a/entity/Orderitem_entity/documentation.adoc
+++ b/entity/Orderitem_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= SALESORDERITEM
+= Orderitem_entity
 :hardbreaks:
 
 Entity contains products that belong to the linked order.
diff --git a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
index de93a4387fe88a8273f84a6d45f1f335d9b00f14..7091cb2d3455066683b4231e649484f4b141c9bc 100644
--- a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
@@ -6,4 +6,5 @@ import("system.vars");
 var cond = SqlCondition.begin()
                        .andPrepareVars("SALESORDERITEM.SALESORDER_ID", "$param.OrderId_param")
 
-result.string(db.translateCondition(cond.build("1=1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1=1"));
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 007d05af09fb667ef09c7f88879c9bb4a2103e87..404e4344955747c3d7214edb0103080c8b70c2a3 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -39,6 +39,8 @@
       <title>Language</title>
       <consumer>Languages</consumer>
       <selectionMode>SINGLE</selectionMode>
+      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/language/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Organisation_entity/entityfields/language/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>ORGANISATION_ID</name>
@@ -267,22 +269,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>openEditDefaultsView</name>
-      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/documentation.adoc</documentation>
-      <title>Edit defaults</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess>
-      <actionOrder v="1" />
-      <iconId>NEON:WRENCH</iconId>
-    </entityActionField>
-    <entityActionField>
-      <name>newOffer</name>
-      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/documentation.adoc</documentation>
-      <title>New offer</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/onActionProcess.js</onActionProcess>
-      <actionOrder v="2" />
-      <iconId>VAADIN:CART</iconId>
-    </entityActionField>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
       <title>Email</title>
@@ -331,22 +317,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newActivity</name>
-      <title>New activity</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
-      <actionOrder v="0" />
-      <iconId>VAADIN:HOURGLASS_END</iconId>
-      <tooltip>New activity</tooltip>
-      <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
-    <entityActionField>
-      <name>orgReport</name>
-      <title>Customer Base Sheet</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreport/onActionProcess.js</onActionProcess>
-      <actionOrder v="4" />
-      <iconId>VAADIN:FILE_TEXT_O</iconId>
-    </entityActionField>
     <entityConsumer>
       <name>Countries</name>
       <dependency>
@@ -458,13 +428,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newTask</name>
-      <title>New task</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
-      <actionOrder v="3" />
-      <iconId>VAADIN:TASKS</iconId>
-    </entityActionField>
     <entityConsumer>
       <name>Salesprojects</name>
       <dependency>
@@ -531,22 +494,15 @@
       </dependency>
       <children>
         <entityParameter>
-          <name>ObjectId_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js</valueProcess>
+          <name>ObjectIds_param</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
-          <name>ObjectType_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js</valueProcess>
+          <name>ObjectTypes_param</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newAppointment</name>
-      <title>New appointment</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CALENDAR</iconId>
-      <tooltip>New Appointment</tooltip>
-    </entityActionField>
     <entityConsumer>
       <name>LogHistories</name>
       <dependency>
@@ -745,48 +701,6 @@
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/avatartext_param/valueProcess.js</valueProcess>
       <description>PARAMETER</description>
     </entityParameter>
-    <entityActionGroup>
-      <name>campaignActionGroup</name>
-      <title>Campaign</title>
-      <iconId>NEON:GROUP_APPOINTMENT</iconId>
-      <children>
-        <entityActionField>
-          <name>addToCampaignFromTable</name>
-          <title>Add to Campaign</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <isSelectionAction v="false" />
-          <iconId>NEON:GROUP_APPOINTMENT</iconId>
-          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess>
-          <tooltip>Add the selection to a campaign</tooltip>
-          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/tooltipProcess.js</tooltipProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>addToBulkMailFromTable</name>
-          <title>Add to Bulkmail</title>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtobulkmailfromtable/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:AT</iconId>
-          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtobulkmailfromtable/tooltipProcess.js</tooltipProcess>
-        </entityActionField>
-        <entityActionField>
-          <name>addToSerialLetter</name>
-          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtoserialletter/onActionProcess.js</onActionProcess>
-          <isObjectAction v="false" />
-          <isSelectionAction v="true" />
-          <iconId>VAADIN:ENVELOPES</iconId>
-          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtoserialletter/tooltipProcess.js</tooltipProcess>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
-    <entityActionField>
-      <name>addToCampaign</name>
-      <title>Add to Campaign</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess>
-      <iconId>NEON:GROUP_APPOINTMENT</iconId>
-      <tooltip>Choose a campaign and a step to add the contact to a  campaign</tooltip>
-    </entityActionField>
     <entityParameter>
       <name>OrganisationType_param</name>
       <expose v="true" />
@@ -824,13 +738,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>openAdminView</name>
-      <title>Open admin view</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CURLY_BRACKETS</iconId>
-      <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess>
-    </entityActionField>
     <entityConsumer>
       <name>LinkedAppointments</name>
       <dependency>
@@ -845,20 +752,8 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newEmail</name>
-      <title>Write email</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:AT</iconId>
-    </entityActionField>
-    <entityActionField>
-      <name>newLetter</name>
-      <title>New letter</title>
-      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:ENVELOPE</iconId>
-    </entityActionField>
     <entityConsumer>
-      <name>Product_consumer</name>
+      <name>Products</name>
       <description>Needed for search via Offer</description>
       <dependency>
         <name>dependency</name>
@@ -898,6 +793,119 @@
       <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess>
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>OpenTasks</name>
+      <title>Open tasks</title>
+      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/opentasks/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionField>
+      <name>openEditDefaultsView</name>
+      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/documentation.adoc</documentation>
+      <title>Edit defaults</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess>
+      <actionOrder v="1" />
+      <iconId>NEON:WRENCH</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newOffer</name>
+      <documentation>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/documentation.adoc</documentation>
+      <title>New offer</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newoffer/onActionProcess.js</onActionProcess>
+      <actionOrder v="2" />
+      <iconId>VAADIN:CART</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newActivity</name>
+      <title>New activity</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
+      <actionOrder v="0" />
+      <iconId>VAADIN:HOURGLASS_END</iconId>
+      <tooltip>New activity</tooltip>
+      <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
+    </entityActionField>
+    <entityActionField>
+      <name>orgReport</name>
+      <title>Customer Base Sheet</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/orgreport/onActionProcess.js</onActionProcess>
+      <actionOrder v="4" />
+      <iconId>VAADIN:FILE_TEXT_O</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newTask</name>
+      <title>New task</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
+      <actionOrder v="3" />
+      <iconId>VAADIN:TASKS</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newAppointment</name>
+      <title>New appointment</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CALENDAR</iconId>
+      <tooltip>New Appointment</tooltip>
+    </entityActionField>
+    <entityActionGroup>
+      <name>campaignActionGroup</name>
+      <title>Campaign</title>
+      <iconId>NEON:GROUP_APPOINTMENT</iconId>
+      <children>
+        <entityActionField>
+          <name>addToCampaignFromTable</name>
+          <title>Add to Campaign</title>
+          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="false" />
+          <iconId>NEON:GROUP_APPOINTMENT</iconId>
+          <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess>
+          <tooltip>Add the selection to a campaign</tooltip>
+          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtocampaignfromtable/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>addToBulkMailFromTable</name>
+          <title>Add to Bulkmail</title>
+          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtobulkmailfromtable/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:AT</iconId>
+          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtobulkmailfromtable/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>addToSerialLetter</name>
+          <title>Add to serial letter</title>
+          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtoserialletter/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:ENVELOPES</iconId>
+          <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtoserialletter/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityActionField>
+      <name>addToCampaign</name>
+      <title>Add to Campaign</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess>
+      <iconId>NEON:GROUP_APPOINTMENT</iconId>
+      <tooltip>Choose a campaign and a step to add the contact to a  campaign</tooltip>
+    </entityActionField>
+    <entityActionField>
+      <name>newEmail</name>
+      <title>Write email</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newemail/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:AT</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newLetter</name>
+      <title>New letter</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:ENVELOPE</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
     <entityConsumer>
       <name>OrganisationDuplicates</name>
       <dependency>
@@ -1048,7 +1056,6 @@
         <dbRecordFieldMapping>
           <name>ADDRESS_ID.value</name>
           <recordfield>CONTACT.ADDRESS_ID</recordfield>
-          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CUSTOMERCODE.value</name>
@@ -1163,11 +1170,23 @@
           <filtertype>EXTENDED</filtertype>
         </consumerMapping>
         <consumerMapping>
-          <name>Product_consumer</name>
-          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/product_consumer/filterConditionProcess.js</filterConditionProcess>
+          <name>Addresses</name>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/addresses/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Products</name>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/products/filterConditionProcess.js</filterConditionProcess>
           <isFilterable v="true" />
           <filtertype>EXTENDED</filtertype>
         </consumerMapping>
+        <consumerMapping>
+          <name>Communications</name>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
diff --git a/entity/Organisation_entity/documentation.adoc b/entity/Organisation_entity/documentation.adoc
index 4c424a2c45fbfe95df0f813889e2d13cdd8e2e4c..cb83932ab2ba702b2505088d9192524092ae3bd7 100644
--- a/entity/Organisation_entity/documentation.adoc
+++ b/entity/Organisation_entity/documentation.adoc
@@ -1,3 +1,5 @@
+= Organisation_entity
+
 An entity for handling organisations (companies).
 
 Besides storing the main data of a company, standard values can be set:
diff --git a/entity/Organisation_entity/entityfields/language/displayValueProcess.js b/entity/Organisation_entity/entityfields/language/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fbcdba886ae05f415758c8c9bb4eb8c57600d541
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/language/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.loadContentTitle("Language_entity", vars.get("$field.LANGUAGE")));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/language/valueProcess.js b/entity/Organisation_entity/entityfields/language/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bb039c219ee635fbd789a66704d4f5dd483dbfb
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/language/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
+    result.string("deu");
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js b/entity/Organisation_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ae8d176d0033d43ee6a6e8fc16fe38169f474bd
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object([vars.get("$field.CONTACTID")]);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js b/entity/Organisation_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..89bec3f184df48d49f9695cc3a35f5d88545f864
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.object([ContextUtils.getCurrentContextId()]);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/opentasks/valueProcess.js b/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..496146a7378b47fc4c6dd676665f5bc8c4ee8e83
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("Context_lib");
+import("ActivityTask_lib");
+import("system.result");
+
+result.string(TaskUtils.getOpenTaskCount(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/picture/displayValueProcess.js b/entity/Organisation_entity/entityfields/picture/displayValueProcess.js
index a8bad702a846e9273db756ed1bb6c1c4781591dd..2ad6742677b7f0a685be75783483833b35bebfc0 100644
--- a/entity/Organisation_entity/entityfields/picture/displayValueProcess.js
+++ b/entity/Organisation_entity/entityfields/picture/displayValueProcess.js
@@ -2,5 +2,9 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && !vars.get("$this.value"))
-    result.string(vars.get("$param.AvatarText_param"));
\ No newline at end of file
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) {
+    if (vars.get("$field.PICTURE"))
+        result.string(vars.get("$field.PICTURE"));
+    else
+        result.string(vars.get("$param.AvatarText_param"));
+}
diff --git a/entity/Organisation_entity/entityfields/turnoverlastyear/valueProcess.js b/entity/Organisation_entity/entityfields/turnoverlastyear/valueProcess.js
index fcf33532b8f486b562bf3731ea6cb24a50ef2e59..f89ea7a28deec7a4b5f43991fdf9938fdade25c1 100644
--- a/entity/Organisation_entity/entityfields/turnoverlastyear/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/turnoverlastyear/valueProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.datetime");
 import("system.vars");
 import("system.db");
diff --git a/entity/Organisation_entity/entityfields/turnoverpercentdiff/colorProcess.js b/entity/Organisation_entity/entityfields/turnoverpercentdiff/colorProcess.js
index 9f881847a2d9a55bd025ca9b44d47b176d6bac24..c1eb963faca60c479b46026f8d68cbff80af5f16 100644
--- a/entity/Organisation_entity/entityfields/turnoverpercentdiff/colorProcess.js
+++ b/entity/Organisation_entity/entityfields/turnoverpercentdiff/colorProcess.js
@@ -1,5 +1,4 @@
 import("system.result");
-import("system.logging");
 import("system.vars");
 import("system.neon");
 
diff --git a/entity/Organisation_entity/entityfields/turnoverpercentdiff/valueProcess.js b/entity/Organisation_entity/entityfields/turnoverpercentdiff/valueProcess.js
index 4d60d87f534d8811ae2fc0aba508d419610b102f..d5ce906662cf7b624d3bd3d93eb9f80a1635158f 100644
--- a/entity/Organisation_entity/entityfields/turnoverpercentdiff/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/turnoverpercentdiff/valueProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.result");
 import("system.vars");
 
diff --git a/entity/Organisation_entity/grantDeleteProcess.js b/entity/Organisation_entity/grantDeleteProcess.js
index c4ebf40c41f7ba44d1ff79e91b77b0487c59475f..827f19abd10f6b34004342f0671139cea6643f30 100644
--- a/entity/Organisation_entity/grantDeleteProcess.js
+++ b/entity/Organisation_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
+//    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/conditionProcess.js b/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
index c6b901c93095a6b09ef2a387110f9f1129074d95..f9d0b6ed3eef5e522330ba84ac377372059c1f11 100644
--- a/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
@@ -55,5 +55,5 @@ if(onlyShowContactIds != null && onlyShowContactIds.length > 0)
     alternativeCondition = "1 = 2";
 }
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build(alternativeCondition)));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate(alternativeCondition));
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
index fa1b2d68c5d36898130c439b475ba651fcb4950c..e1c84abb098210321a7846ded93657c06adf7f89 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.vars");
 import("Organisation_lib");
 import("Communication_lib");
diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/addresses/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/addresses/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e2393946ee4b38ef5af06790a43c50434afa967
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/addresses/filterConditionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string("CONTACTID in (select CONTACT_ID from ADDRESS where "  + vars.get("$local.condition") + " )");
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb7d2f218c63e91b0fdecd230a25eee3e6e92eb1
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string("CONTACTID in (select CONTACT_ID from COMMUNICATION where "  + vars.get("$local.condition") + " )");
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/product_consumer/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/products/filterConditionProcess.js
similarity index 100%
rename from entity/Organisation_entity/recordcontainers/db/recordfieldmappings/product_consumer/filterConditionProcess.js
rename to entity/Organisation_entity/recordcontainers/db/recordfieldmappings/products/filterConditionProcess.js
diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod
index b79ba7a62cda9b68c901884c4b9d74b49c750411..f80daf0860bf0300285958c3c0638045da4102e3 100644
--- a/entity/PermissionAction_entity/PermissionAction_entity.aod
+++ b/entity/PermissionAction_entity/PermissionAction_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>PermissionAction_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/PermissionAction_entity/documentation.adoc</documentation>
   <title>Action</title>
   <onValidation>%aditoprj%/entity/PermissionAction_entity/onValidation.js</onValidation>
   <titlePlural>Actions</titlePlural>
diff --git a/entity/PermissionAction_entity/documentation.adoc b/entity/PermissionAction_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a51a74606aaa0bb4accc74de2ce9fdfc1cbd78ca
--- /dev/null
+++ b/entity/PermissionAction_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= PermissionAction_entity
+
+This entity represents possible actions that are assigned to a permission.
\ No newline at end of file
diff --git a/entity/PermissionAction_entity/onValidation.js b/entity/PermissionAction_entity/onValidation.js
index be4d539d44a1e2492d85480020e1b3fdba5968ac..4561e8413eb322f4752b0d3866e73aa4f11ddf29 100644
--- a/entity/PermissionAction_entity/onValidation.js
+++ b/entity/PermissionAction_entity/onValidation.js
@@ -5,5 +5,5 @@ import("system.result");
 var actionTitle = vars.get("$field.ACTION");
 
 if (actionTitle == "null" || actionTitle == undefined || actionTitle == null || actionTitle == "") {
-    result.string(translate.text("Empty actions are not allowed!"));
+    result.string(translate.text("Empty actions are invalid!"));
 }
\ No newline at end of file
diff --git a/entity/PermissionAction_entity/recordcontainers/jdito/contentProcess.js b/entity/PermissionAction_entity/recordcontainers/jdito/contentProcess.js
index 4640329c9c4f930466ccc0daffec2680d21c17a3..0b19076ff3bb8f6ded6aa49e810ac8f31da1c1d9 100644
--- a/entity/PermissionAction_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/PermissionAction_entity/recordcontainers/jdito/contentProcess.js
@@ -12,6 +12,20 @@ if (permissionId && PermissionUtil.permissionExists(permissionId))
     for each (var permActionId in permActions) {
         actions.push([permActionId[0], PermissionUtil.resolveActionId(permActionId), PermissionUtil.resolveActionId(permActionId)]);    
     }
+    
+    var ids = vars.get("$local.idvalues");
+    if (ids != null)
+    {
+        actions = actions.filter(function(action) 
+        {
+            for (let i = 0; i < ids.length; i++)
+            {
+                if (action[0] == ids[i])
+                    return true;
+            }
+            return false;
+        });
+    }
 
     result.object(actions);
 }
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index 4905d05f3b0a5357a66bba2e5848a2897daa4be7..a963e64789b745557808d88c0dac4d91c59a8096 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>PermissionDetail_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/PermissionDetail_entity/documentation.adoc</documentation>
   <title>Permission Detail</title>
   <siblings>
     <element>PermissionOverview_entity</element>
diff --git a/entity/PermissionDetail_entity/documentation.adoc b/entity/PermissionDetail_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..843e75e235c1125740b8797358caee4b4e0cc00b
--- /dev/null
+++ b/entity/PermissionDetail_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= PermissionDetail_entity
+
+This entity represents permissions in more detail. It is used to create or edit permissions of an entity-role-combination.
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/entity/onValueChange.js b/entity/PermissionDetail_entity/entityfields/entity/onValueChange.js
index 11440115d21a7626a41c66c47e40a9eef5044612..c3f90074fe89fcccf56262ba666c40d794a3567a 100644
--- a/entity/PermissionDetail_entity/entityfields/entity/onValueChange.js
+++ b/entity/PermissionDetail_entity/entityfields/entity/onValueChange.js
@@ -1,3 +1,3 @@
 import("system.neon");
 
-neon.refresh();
\ No newline at end of file
+neon.refresh(["$field.FIELD"]);
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js
index 2da1099bbc36332519d87a91ed9da6a9a7ed105e..4299926003dad59ea8773275f1f41d40973e3adf 100644
--- a/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js
+++ b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js
@@ -32,7 +32,7 @@ for each (let row in insertedRows) {
 }
 
 if (deletedRows.length == actionsAsStringArray.length && changedRows.length == 0 && insertedRows.length == 0) {
-    result.string(translate.text("Permissions without actions are not allowed!"));
+    result.string(translate.text("Permissions without actions are invalid!"));
 }
 
 if (PermissionUtil.permissionExists(permId)) {
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js b/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js
index b0aa5ab5592d45f36b45bdab7dbe30b66b166293..24ef8059e64d9004be3eb0b20e3ff991a0d9d315 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js
@@ -106,21 +106,25 @@ if (selectedPermission == null) {
     }
 }
 
-result.object(res.sort(sortResultsAfterCondition).sort(sortResultsAfterAccessTypes));
+res = res.sort(sortResultsByCondition).sort(sortResultsByAccessTypes);
+result.object(res);
 
 function prepareResultArray(pEntry, pRes) {
-    var rootPermission = "";
+    var parentPermission = "";
+    var noCond = "{\"entity\":\"" + pEntry.entity + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    
     if (pEntry.accesstype != "E") {
-        if (pEntry.accesstype == "F" && pEntry.cond != "" && pEntry.cond != noCond) {
-            rootPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSet(pEntry.permissionid));
-            if (rootPermission == "") {
-                rootPermission = PermissionUtil.getPermissionRoot(pEntry.permissionid);
+        if (pEntry.cond == "" || pEntry.cond == noCond) { // default permission
+            parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSetOfSet(PermissionUtil.getParentSet(pEntry.permissionid)));
+        } else { // conditional permission
+            parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSet(pEntry.permissionid));
+            if (parentPermission == "") {
+                parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSetOfSet(PermissionUtil.getParentSet(pEntry.permissionid)));
             }
-        } else 
-            rootPermission = PermissionUtil.getPermissionRoot(pEntry.permissionid);        
+        }
     }
     pRes.push([pEntry.permissionid, pEntry.entity, pEntry.role, pEntry.field, pEntry.cond, 
-        sortActions(pEntry.action.split(","), pEntry.accesstype).join(","), pEntry.accesstype, pEntry.condtype, rootPermission]);
+        sortActions(pEntry.action.split(","), pEntry.accesstype).join(","), pEntry.accesstype, pEntry.condtype, parentPermission]);
     return pRes;
 }
 
@@ -162,8 +166,11 @@ function sortActions(actions, accesstype) {
 }
 
 // sorts result array: Entity -> Records -> Fields
-function sortResultsAfterAccessTypes(a, b) {
-    if (a[6] == b[6] && a[6] != "F" && a[6] != "R")
+function sortResultsByAccessTypes(a, b) {
+    var noCondA = "{\"entity\":\"" + a[1] + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    var noCondB = "{\"entity\":\"" + b[1] + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+
+    if (a[6] == b[6] && a[6] == "E")
         return 0;
     else if (a[6] == "E")
         return -1;
@@ -173,24 +180,26 @@ function sortResultsAfterAccessTypes(a, b) {
         return -1;
     else if (a[6] == "F" && b[6] == "R")
         return 1;
-    else if (a[6] == "R" && b[6] == "R" && a[4] == "")
-        return -1;
-    else if (a[6] == "R" && b[6] == "R" && b[4] == "")
-        return 1;
-    else if (a[6] == "F" && b[6] == "F" && a[4] == "")
+    else if (a[6] == b[6] && (a[4] == "" || a[4] == noCondA))
         return -1;
-    else if (a[6] == "F" && b[6] == "F" && b[4] == "")
+    else if (a[6] == b[6] && (b[4] == "" || b[4] == noCondB))
         return 1;
-    else
+    else 
         return 0;
 }
 
 // sorts result array: default permission -> conditional permission
-function sortResultsAfterCondition(a, b) {
-    var noCond = "{\"entity\":\"" + vars.get("$field.ENTITY") + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+function sortResultsByCondition(a, b) {
+    var noCondA = "{\"entity\":\"" + a[1] + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    var noCondB = "{\"entity\":\"" + b[1] + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    
     if (a[4] == "" || a[4] == noCond) {
         return -1;
-    } else if (b[4] == "" || b[4] == noCond) {
+    } else if (b[4] == "" || b[4] == noCondB) {
+        return -1;
+    } else if (a[4] != "" && a[4] != noCondA) {
+        return 1;
+    } else if (b[4] != "" && b[4] != noCondB) {
         return 1;
     } else {
         return 0;
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
index 54100375b14cef0becd2fabc1ca5fc5a5ab15f9f..d061d0fd357d1b6238aacb46f7e0ffc4f6ac480d 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
@@ -10,6 +10,7 @@ var permId = vars.get("$field.UID");
 var accessType = vars.get("$field.ACCESSTYPE");
 var parentPermSetId = PermissionUtil.getParentSet(permId);
 var linkedActions = PermissionUtil.getActions([permId]);
+var noCond = "{\"entity\":\"" + vars.get("$field.ENTITY") + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
 
 var sqlCondDelAction = SqlCondition.begin()
 .and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + linkedActions.join("','") + "')")
@@ -23,10 +24,10 @@ var sqlCondDelPermSet = SqlCondition.begin()
 
 switch (accessType) {
     case "E":
-        var allPermSets = PermissionUtil.getChildSetsOfSet(parentPermSetId);
+        let allPermSets = PermissionUtil.getChildSetsOfSet(parentPermSetId);
         allPermSets.push(parentPermSetId);
-        var allPerms = PermissionUtil.getPermissions(allPermSets);
-        var allPermActions = PermissionUtil.getActions(allPerms);
+        let allPerms = PermissionUtil.getPermissions(allPermSets);
+        let allPermActions = PermissionUtil.getActions(allPerms);
         
         sqlCondDelAction = SqlCondition.begin()
             .and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + allPermActions.join("','") + "')")
@@ -43,8 +44,26 @@ switch (accessType) {
         db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet, alias); // delete all permission sets
         break;
     default:
-        db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
-        db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
+        if (PermissionUtil.getCond(permId) == "" || PermissionUtil.getCond(permId) == noCond) { // check if permission is default or conditional permission
+            // default permission -> also have to delete sub permissions
+            let allPerms = PermissionUtil.getPermissionWithCond(PermissionUtil.getParentSet(permId));
+            allPerms.push(permId);
+            let allActions = PermissionUtil.getActions(allPerms);
+            
+            sqlCondDelAction = SqlCondition.begin()
+                .and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + allActions.join("','") + "')")
+                .build();
+            sqlCondDelPerm = SqlCondition.begin()
+                .and("ASYS_PERMISSION.ASYS_PERMISSIONID in ('" + allPerms.join("','") + "')")
+                .build();
+            
+            db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
+            db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
+        } else {
+            // conditional permission -> only delete this permission
+            db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
+            db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
+        }
         break;
 }
 
@@ -52,5 +71,4 @@ if (PermissionUtil.setIsEmpty(parentPermSetId)) {
     db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet, alias); // delete empty permissionset
 }
 
-neon.refreshAll();
 tools.clearPermissionCache();
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
index cacdde1e352e2d9859d8f39f20fb9e2f3af4378c..105a129772bb983a78f293abf7112fdd995809ed 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
@@ -32,5 +32,4 @@ if (diff.length > 0) {
 PermissionUtil.updateIfDiff(permissionid, permCond, "COND", "ASYS_PERMISSION"); // updates COND if the new cond is different to COND in DB
 PermissionUtil.updateIfDiff(permissionid, permCondType, "CONDTYPE", "ASYS_PERMISSION"); // updates CONDTYPE if the new condtype is different to CONDTYPE in DB
 
-neon.refreshAll(); 
 tools.clearPermissionCache();
\ No newline at end of file
diff --git a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
index 30d3eb0280aa68d88e5767095c7682c7dc95ac8f..248bf728c8a3dfa98fe58b4edfb3224928ca481e 100644
--- a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
+++ b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>PermissionMetaData_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/PermissionMetaData_entity/documentation.adoc</documentation>
   <icon>VAADIN:CONNECT</icon>
   <title>Permission</title>
   <grantCreate v="false" />
diff --git a/entity/PermissionMetaData_entity/documentation.adoc b/entity/PermissionMetaData_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c78b98a8d2920eed8542ce8d7a14bce102f30535
--- /dev/null
+++ b/entity/PermissionMetaData_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= PermissionMetaData_entity
+
+This entity represents other entities (e.g. Organsiation_entity, Person_entity, ...). It provides an overview of all entities which have the 'usePermissions'-flag set.
\ No newline at end of file
diff --git a/entity/PermissionOverview_entity/PermissionOverview_entity.aod b/entity/PermissionOverview_entity/PermissionOverview_entity.aod
index 5d8ddb516a6ce6b1f10540a884f38c968b54f87d..f441ac69e0bca4ed3d32368951b3d7c8b3ab0d8d 100644
--- a/entity/PermissionOverview_entity/PermissionOverview_entity.aod
+++ b/entity/PermissionOverview_entity/PermissionOverview_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>PermissionOverview_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/PermissionOverview_entity/documentation.adoc</documentation>
   <title>Permission Overview</title>
   <siblings>
     <element>PermissionDetail_entity</element>
@@ -83,6 +84,7 @@
     <jDitoRecordContainer>
       <name>jDito</name>
       <jDitoRecordAlias>_____SYSTEMALIAS</jDitoRecordAlias>
+      <isFilterable v="false" />
       <contentProcess>%aditoprj%/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
       <recordFieldMappings>
         <jDitoRecordFieldMapping>
diff --git a/entity/PermissionOverview_entity/documentation.adoc b/entity/PermissionOverview_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..506b1be42fd7757ff816ebf76ef2810bd8926387
--- /dev/null
+++ b/entity/PermissionOverview_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= PermissionOverview_entity
+
+This entity provides an overview of all permissions associated with an entity-role-combination.
\ No newline at end of file
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index e0f9398f7b692e1232ca0c030f0bd2fc2455f903..d20cdd31c80efc0714406e2c1c27842c364d5667 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -140,13 +140,10 @@
     <entityField>
       <name>ORGANISATION_ID</name>
       <title>Company</title>
-      <consumer>Organisations</consumer>
-      <linkedContextProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_id/linkedContextProcess.js</linkedContextProcess>
-      <mandatory v="false" />
+      <description>Important: This field should not be visible in the UI. Use ORGANISATION_CONTACTID instead!
+
+This field only calculates the Orgid from the ORGANISATION_CONTACTID to save it to the db correctly. all interactions should go through ORGANISATION_CONTACTID!!</description>
       <valueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_id/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Person_entity/entityfields/organisation_id/onValueChange.js</onValueChange>
-      <onValidation>%aditoprj%/entity/Person_entity/entityfields/organisation_id/onValidation.js</onValidation>
     </entityField>
     <entityConsumer>
       <name>PersAddresses</name>
@@ -313,14 +310,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
     <entityProvider>
       <name>Contact</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>12c5350a-3159-449b-a94e-d57658b4c124</name>
-          <entityName>Member_entity</entityName>
-          <fieldName>CurrentContact</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>OrgId_param</name>
@@ -366,18 +355,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <mandatory v="false" />
       <valueProcess>%aditoprj%/entity/Person_entity/entityfields/rel_relationship/valueProcess.js</valueProcess>
     </entityField>
-    <entityActionField>
-      <name>openEditDefaultsView</name>
-      <title>Edit defaults</title>
-      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:WRENCH</iconId>
-    </entityActionField>
-    <entityActionField>
-      <name>newOffer</name>
-      <title>New offer</title>
-      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newoffer/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CART</iconId>
-    </entityActionField>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
       <title>E-Mail</title>
@@ -438,14 +415,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <valueProcess>%aditoprj%/entity/Person_entity/entityfields/address_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/address_id/displayValueProcess.js</displayValueProcess>
     </entityField>
-    <entityActionField>
-      <name>newActivity</name>
-      <title>New activity</title>
-      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:HOURGLASS_END</iconId>
-      <tooltip>New activity</tooltip>
-      <tooltipProcess>%aditoprj%/entity/Person_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
     <entityConsumer>
       <name>KeywordGenders</name>
       <dependency>
@@ -538,12 +507,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>newTask</name>
-      <title>New task</title>
-      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:TASKS</iconId>
-    </entityActionField>
     <entityConsumer>
       <name>Tasks</name>
       <state>EDITABLE</state>
@@ -576,12 +539,12 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       </dependency>
       <children>
         <entityParameter>
-          <name>ObjectId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js</valueProcess>
+          <name>ObjectIds_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
-          <name>ObjectType_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js</valueProcess>
+          <name>ObjectTypes_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -739,14 +702,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>addToCampaign</name>
-      <title>Add to Campaign</title>
-      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess>
-      <actionOrder v="1" />
-      <iconId>NEON:GROUP_APPOINTMENT</iconId>
-      <tooltip>Choose a campaign and a step to add the contact to a  campaign</tooltip>
-    </entityActionField>
     <entityConsumer>
       <name>AttributeTree</name>
       <dependency>
@@ -819,6 +774,102 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <valueProcess>%aditoprj%/entity/Person_entity/entityfields/avatartext_param/valueProcess.js</valueProcess>
       <description>PARAMETER</description>
     </entityParameter>
+    <entityConsumer>
+      <name>CommRestrictions</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CommRestriction_Entity</entityName>
+        <fieldName>PersonsCommRestriction</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DSGVOEntries</name>
+      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DSGVO_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Appointments</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Appointment_entity</entityName>
+        <fieldName>LinkedAppointments</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>LinkedObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>OpenTasks</name>
+      <title>Open tasks</title>
+      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/opentasks/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>AppointmentsNextWeek</name>
+      <title>Appointments</title>
+      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/appointmentsnextweek/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_CONTACTID</name>
+      <title>Company</title>
+      <consumer>Organisations</consumer>
+      <linkedContextProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/linkedContextProcess.js</linkedContextProcess>
+      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js</displayValueProcess>
+      <onValidation>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/onValidation.js</onValidation>
+    </entityField>
+    <entityActionField>
+      <name>openEditDefaultsView</name>
+      <title>Edit defaults</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:WRENCH</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newOffer</name>
+      <title>New offer</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newoffer/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CART</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newActivity</name>
+      <title>New activity</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:HOURGLASS_END</iconId>
+      <tooltip>New activity</tooltip>
+      <tooltipProcess>%aditoprj%/entity/Person_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
+    </entityActionField>
+    <entityActionField>
+      <name>newTask</name>
+      <title>New task</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:TASKS</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>addToCampaign</name>
+      <title>Add to Campaign</title>
+      <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/addtocampaign/onActionProcess.js</onActionProcess>
+      <actionOrder v="1" />
+      <iconId>NEON:GROUP_APPOINTMENT</iconId>
+      <tooltip>Choose a campaign and a step to add the contact to a  campaign</tooltip>
+    </entityActionField>
     <entityActionGroup>
       <name>campaignActionGroup</name>
       <title>Campaign</title>
@@ -908,26 +959,17 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <iconId>VAADIN:CALENDAR</iconId>
       <tooltip>New Appointment</tooltip>
     </entityActionField>
-    <entityConsumer>
-      <name>CommRestrictions</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CommRestriction_Entity</entityName>
-        <fieldName>PersonsCommRestriction</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityActionField>
       <name>newLetter</name>
       <title>New letter</title>
       <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newletter/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:ENVELOPE</iconId>
     </entityActionField>
+    <entityActionField>
+      <name>openTaskView</name>
+      <isMenuAction v="false" />
+      <isObjectAction v="false" />
+    </entityActionField>
     <entityActionField>
       <name>openAdminView</name>
       <title>Open admin view</title>
@@ -935,35 +977,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityConsumer>
-      <name>DSGVOEntries</name>
-      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DSGVO_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/children/contactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Appointments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Appointment_entity</entityName>
-        <fieldName>LinkedAppointments</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>LinkedObjectId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityConsumer>
       <name>PersonDuplicates</name>
       <dependency>
@@ -1181,7 +1194,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>ADDRESS_ID.value</name>
           <recordfield>CONTACT.ADDRESS_ID</recordfield>
-          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATION_ID.displayValue</name>
@@ -1280,6 +1292,30 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <isFilterable v="true" />
           <filtertype>EXTENDED</filtertype>
         </consumerMapping>
+        <dbRecordFieldMapping>
+          <name>OrganisationContactId.value</name>
+          <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisationcontactid.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACTID.displayValue</name>
+          <recordfield>ORGANISATION.NAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACTID.value</name>
+          <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <consumerMapping>
+          <name>PersAddresses</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/persaddresses/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Communications</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
         <consumerMapping>
           <name>PersAddresses</name>
           <isFilterable v="true" />
diff --git a/entity/Person_entity/conditionProcess.js b/entity/Person_entity/conditionProcess.js
index 0c7d6ef5de8bd86e31f3946d8927293186fe2c07..61b7bebcb9305f94c832bf03fbdff1445f846b0b 100644
--- a/entity/Person_entity/conditionProcess.js
+++ b/entity/Person_entity/conditionProcess.js
@@ -7,5 +7,5 @@ cond.andPrepareVars("CONTACT.ORGANISATION_ID", "$param.OrgId_param");
 cond.andPrepareVars("PERSON.CONTACT_ID", "$param.ContactId_param");
 
 //TODO; add OBJECT_ID (probably another param)
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Person_entity/documentation.adoc b/entity/Person_entity/documentation.adoc
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8d4aa8088a082cf63652e2108bc6dd19995b6ed3 100644
--- a/entity/Person_entity/documentation.adoc
+++ b/entity/Person_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Person_entity
+
+Manages all information belonging to the person
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/appointmentsnextweek/valueProcess.js b/entity/Person_entity/entityfields/appointmentsnextweek/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba33991456031e9bce5872e2629407dfeda9770b
--- /dev/null
+++ b/entity/Person_entity/entityfields/appointmentsnextweek/valueProcess.js
@@ -0,0 +1,8 @@
+//import("system.result");
+//import("system.entities");
+//
+//var loadConfig = entities.createConfigForLoadingConsumerRows()
+//    .consumer("Appointments");
+//var rowCount = entities.getRowCount(loadConfig);
+//result.string(rowCount);
+//
diff --git a/entity/Person_entity/entityfields/language/displayValueProcess.js b/entity/Person_entity/entityfields/language/displayValueProcess.js
index dae44e029af40ecdf3c360a4e80a24d6a5f74540..fbcdba886ae05f415758c8c9bb4eb8c57600d541 100644
--- a/entity/Person_entity/entityfields/language/displayValueProcess.js
+++ b/entity/Person_entity/entityfields/language/displayValueProcess.js
@@ -1,10 +1,5 @@
-import("system.result");
 import("system.vars");
-import("Keyword_lib");
+import("system.result");
+import("Context_lib");
 
-var key = vars.get("$field.LANGUAGE");
-if (key)
-{
-    var res = LanguageKeywordUtils.getViewValue(key);
-    result.string(res);
-}
+result.string(ContextUtils.loadContentTitle("Language_entity", vars.get("$field.LANGUAGE")));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/language/valueProcess.js b/entity/Person_entity/entityfields/language/valueProcess.js
index 8be4c28401d63e681cbff0a6929e7d472ebf9042..2bb039c219ee635fbd789a66704d4f5dd483dbfb 100644
--- a/entity/Person_entity/entityfields/language/valueProcess.js
+++ b/entity/Person_entity/entityfields/language/valueProcess.js
@@ -1,7 +1,6 @@
+import("system.result");
 import("system.neon");
 import("system.vars");
-import("system.db");
-import("system.result");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
     result.string("deu");
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js b/entity/Person_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5d9429b17fc397f6c7f58cd9b15cb3fb451e929
--- /dev/null
+++ b/entity/Person_entity/entityfields/objecttrees/children/objectids_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object([vars.get("$field.CONTACTID"), vars.get("$field.PERSON_ID")]);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js b/entity/Person_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc385b526eba5d62e704a8a54664aac6664ae1c7
--- /dev/null
+++ b/entity/Person_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.object([ContextUtils.getCurrentContextId(), "PrivatePerson"]);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/opentasks/valueProcess.js b/entity/Person_entity/entityfields/opentasks/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..496146a7378b47fc4c6dd676665f5bc8c4ee8e83
--- /dev/null
+++ b/entity/Person_entity/entityfields/opentasks/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("Context_lib");
+import("ActivityTask_lib");
+import("system.result");
+
+result.string(TaskUtils.getOpenTaskCount(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js b/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8538bcbb3881fa9bdca94b8f4b74e7ea7ad26995
--- /dev/null
+++ b/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Contact_lib");
+
+var orgContactId = vars.get("$field.ORGANISATION_CONTACTID");
+var res = OrganisationUtils.getNameByContactId(orgContactId);
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_contactid/linkedContextProcess.js b/entity/Person_entity/entityfields/organisation_contactid/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8109a73904f005b84aad16997a6bd8e22bb3a7e6
--- /dev/null
+++ b/entity/Person_entity/entityfields/organisation_contactid/linkedContextProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+
+if(vars.get("$field.ORGANISATION_ID").trim() != "0")
+    result.string("Organisation");
+
+
diff --git a/entity/Person_entity/entityfields/organisation_id/onValidation.js b/entity/Person_entity/entityfields/organisation_contactid/onValidation.js
similarity index 51%
rename from entity/Person_entity/entityfields/organisation_id/onValidation.js
rename to entity/Person_entity/entityfields/organisation_contactid/onValidation.js
index d81b26a77cd1d51e4ab694eba2692239c65b9c2f..f1abc2553328e6f167147a1472c4f24343ed2783 100644
--- a/entity/Person_entity/entityfields/organisation_id/onValidation.js
+++ b/entity/Person_entity/entityfields/organisation_contactid/onValidation.js
@@ -7,10 +7,14 @@ import("Contact_lib");
 if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
 {
     var personId = vars.getString("$field.PERSONID");
-    var organisationId = vars.get("$local.value");
+    var orgContactId = vars.get("$local.value");
     var contactId = vars.get("$field.CONTACTID");//in EDIT we have to exclude our own CONTACTID since we do not want a message for our own contactentry
-
-    var validationMsg = ContactUtils.validateIfAlreadyExists(personId, organisationId, contactId);
-    if (validationMsg)
-        result.string(validationMsg);
+    var organisationIds = ContactUtils.getPersOrgIds(orgContactId)
+    
+    if (organisationIds.length > 0 && organisationIds[2])
+    {
+        var validationMsg = ContactUtils.validateIfAlreadyExists(personId, organisationIds[2], contactId);
+        if (validationMsg)
+            result.string(validationMsg);
+    }
 }
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_contactid/valueProcess.js b/entity/Person_entity/entityfields/organisation_contactid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9909bd67fd306e295b0ecc2e9b20952b6b2648a1
--- /dev/null
+++ b/entity/Person_entity/entityfields/organisation_contactid/valueProcess.js
@@ -0,0 +1,13 @@
+import("Contact_lib");
+import("Contact_lib");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    if (vars.exists("$param.OrgId_param") && vars.get("$param.OrgId_param") != null) 
+    {
+        result.string(ContactUtils.getOrgContactId(vars.get("$param.OrgId_param")));
+    }
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_id/displayValueProcess.js b/entity/Person_entity/entityfields/organisation_id/displayValueProcess.js
deleted file mode 100644
index 460b39849d5d34bac95e4b987d28a665b732e860..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/organisation_id/displayValueProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.result");
-import("system.db");
-import("system.vars");
-import("Contact_lib");
-
-var organisationId = vars.get("$field.ORGANISATION_ID");
-var res = OrganisationUtils.getNameByOrganisationId(organisationId);
-
-result.string(res);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_id/linkedContextProcess.js b/entity/Person_entity/entityfields/organisation_id/linkedContextProcess.js
deleted file mode 100644
index 4306a7552935bc715f8b6a8906b3353bc7dd7a73..0000000000000000000000000000000000000000
--- a/entity/Person_entity/entityfields/organisation_id/linkedContextProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-
-if(vars.getString("$field.ORGANISATION_ID") != 0)
-    result.string("Organisation");
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_id/valueProcess.js b/entity/Person_entity/entityfields/organisation_id/valueProcess.js
index 7d921c6a57d7d9aa6d020ba2a6fe3eb3d1256be8..e3771ef7f2a21107b978f25667f92be8609b941c 100644
--- a/entity/Person_entity/entityfields/organisation_id/valueProcess.js
+++ b/entity/Person_entity/entityfields/organisation_id/valueProcess.js
@@ -1,11 +1,11 @@
-import("system.result");
 import("system.vars");
-import("system.neon");
+import("system.result");
+import("Contact_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+var orgContactId = vars.get("$field.ORGANISATION_CONTACTID");
+var organisationIds = ContactUtils.getPersOrgIds(orgContactId)
+    
+if (organisationIds.length > 0 && organisationIds[2])
 {
-    if (vars.exists("$param.OrgId_param") && vars.get("$param.OrgId_param") != null) 
-    {
-        result.string(vars.get("$param.OrgId_param"));
-    }
-}
\ No newline at end of file
+    result.string(organisationIds[2])
+}
diff --git a/entity/Person_entity/grantDeleteProcess.js b/entity/Person_entity/grantDeleteProcess.js
index c4ebf40c41f7ba44d1ff79e91b77b0487c59475f..827f19abd10f6b34004342f0671139cea6643f30 100644
--- a/entity/Person_entity/grantDeleteProcess.js
+++ b/entity/Person_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
+//    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/conditionProcess.js b/entity/Person_entity/recordcontainers/db/conditionProcess.js
index 617f399b00255ffe5c3a40779922ae8fb5885f12..e4f1f832c50f7b42f507e2a3cc0c4f399f578d1f 100644
--- a/entity/Person_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Person_entity/recordcontainers/db/conditionProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.vars");
 import("system.db");
 import("system.result");
@@ -8,32 +7,19 @@ var cond = new SqlCondition();
 cond.andPrepareVars("CONTACT.ORGANISATION_ID", "$param.OrgId_param")
     .andPrepareVars("PERSON.CONTACT_ID", "$param.ContactId_param");
 
-var onlyShowContactIds = JSON.parse(vars.get("$param.OnlyShowContactIds_param"));
-var additionalCondition = SqlCondition.begin();
-let alternativeCondition = "1 = 1";
-
 if (vars.exists("$param.ExcludedContactIds_param") && vars.get("$param.ExcludedContactIds_param"))
 {
     var excludedContacts = JSON.parse(vars.getString("$param.ExcludedContactIds_param"));
-
-
-    excludedContacts.forEach(function(pContactId)
-    {
-        additionalCondition.andPrepare("CONTACT.CONTACTID", pContactId, "#<>?");
-    });
-
-    cond.andSqlCondition(additionalCondition, "1=1");
+    cond.andIn("CONTACT.CONTACTID", excludedContacts, undefined, true);
 }
+var onlyShowContactIds = JSON.parse(vars.get("$param.OnlyShowContactIds_param"));
 if(onlyShowContactIds != null && onlyShowContactIds.length > 0)
 {
     onlyShowContactIds.forEach(function(pContactId)
     {
         additionalCondition.orPrepare("CONTACT.CONTACTID", pContactId);
     });
-   
     cond.andSqlCondition(additionalCondition, "1=2");
-    alternativeCondition = "1 = 2";
 }
-
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build(alternativeCondition)));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb7d2f218c63e91b0fdecd230a25eee3e6e92eb1
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/communications/filterConditionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string("CONTACTID in (select CONTACT_ID from COMMUNICATION where "  + vars.get("$local.condition") + " )");
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e62e1b81eeae4f98f847c4ba99aec94b41747ab
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisation_contactid.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("select CONTACT.CONTACTID from CONTACT where CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID and CONTACT.PERSON_ID is null")
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisationcontactid.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisationcontactid.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..56d6932fbb4a5a6202133f0da069a1cf3243a4a6
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisationcontactid.value/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Sql_lib");
+
+result.string("(select CONTACTID from CONTACT orgContact where PERSON_ID is null and ORGANISATION.ORGANISATIONID = orgContact.ORGANISATION_ID)");
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/persaddresses/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/persaddresses/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e2393946ee4b38ef5af06790a43c50434afa967
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/persaddresses/filterConditionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string("CONTACTID in (select CONTACT_ID from ADDRESS where "  + vars.get("$local.condition") + " )");
\ No newline at end of file
diff --git a/entity/PrivatePerson_entity/PrivatePerson_entity.aod b/entity/PrivatePerson_entity/PrivatePerson_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..60c1d28aa89dfd0b675c4c1406a48ca068e26985
--- /dev/null
+++ b/entity/PrivatePerson_entity/PrivatePerson_entity.aod
@@ -0,0 +1,138 @@
+<?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.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
+  <name>PrivatePerson_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>Private person</title>
+  <contentTitleProcess>%aditoprj%/entity/PrivatePerson_entity/contentTitleProcess.js</contentTitleProcess>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>805b77bd-2728-4979-9503-95760ebb6b49</name>
+          <entityName>Object_entity</entityName>
+          <fieldName>PrivatePersons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>PERSONID</name>
+    </entityField>
+    <entityField>
+      <name>SALUTATION</name>
+    </entityField>
+    <entityField>
+      <name>FIRSTNAME</name>
+    </entityField>
+    <entityField>
+      <name>MIDDLENAME</name>
+    </entityField>
+    <entityField>
+      <name>LASTNAME</name>
+    </entityField>
+    <entityField>
+      <name>TITLE</name>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <contentType>DATE</contentType>
+      <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <contentType>DATE</contentType>
+      <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>ExcludedPersonIds_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Persons</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Contact_entity</entityName>
+        <fieldName>PersonRelated</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>PersonId_param</name>
+          <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/persons/children/personid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>Readonly_param</name>
+          <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/persons/children/readonly_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <conditionProcess>%aditoprj%/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/PrivatePerson_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>b2ae9c8c-c6de-46b7-ae10-e6823576f1ff</name>
+          <tableName>PERSON</tableName>
+          <primaryKey>PERSONID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>PERSON.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>PERSON.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>FIRSTNAME.value</name>
+          <recordfield>PERSON.FIRSTNAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LASTNAME.value</name>
+          <recordfield>PERSON.LASTNAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MIDDLENAME.value</name>
+          <recordfield>PERSON.MIDDLENAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSONID.value</name>
+          <recordfield>PERSON.PERSONID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TITLE.value</name>
+          <recordfield>PERSON.TITLE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>PERSON.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>PERSON.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SALUTATION.value</name>
+          <recordfield>PERSON.SALUTATION</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/PrivatePerson_entity/contentTitleProcess.js b/entity/PrivatePerson_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e9030d5fcfa8141b3ef238014b923ccfa8a345b
--- /dev/null
+++ b/entity/PrivatePerson_entity/contentTitleProcess.js
@@ -0,0 +1,15 @@
+import("system.vars");
+import("system.result");
+import("Util_lib");
+import("Contact_lib");
+
+//do not use "FULL_NAME_fieldGroup" here since the field group must not include the orgname
+var contact = new Contact();
+contact.salutation = vars.get("$field.SALUTATION");
+contact.title = vars.get("$field.TITLE");
+contact.firstname = vars.get("$field.FIRSTNAME");
+contact.middlename = vars.get("$field.MIDDLENAME");
+contact.lastname = vars.get("$field.LASTNAME");
+
+var renderer = new ContactTitleRenderer(contact, null);
+result.string(renderer.asString());
\ No newline at end of file
diff --git a/entity/PrivatePerson_entity/entityfields/date_edit/valueProcess.js b/entity/PrivatePerson_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e6ef059738e0c724a468685333a5e257ac228ce
--- /dev/null
+++ b/entity/PrivatePerson_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+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/Productprice_entity/entityfields/productpriceid/valueProcess.js b/entity/PrivatePerson_entity/entityfields/date_new/valueProcess.js
similarity index 79%
rename from entity/Productprice_entity/entityfields/productpriceid/valueProcess.js
rename to entity/PrivatePerson_entity/entityfields/date_new/valueProcess.js
index 86ef789e064a4016f2d12c432498dc23474807aa..a72892783bf2bd04fe353c47f1be0cb570bbb323 100644
--- a/entity/Productprice_entity/entityfields/productpriceid/valueProcess.js
+++ b/entity/PrivatePerson_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)
-    result.string(util.getNewUUID());
\ No newline at end of file
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js b/entity/PrivatePerson_entity/entityfields/persons/children/personid_param/valueProcess.js
similarity index 52%
rename from entity/Person_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js
rename to entity/PrivatePerson_entity/entityfields/persons/children/personid_param/valueProcess.js
index 821415ae694dd9c3d98a7703f4c59b81a37f524b..ee0cddc370f78c08084b64d57e2a36686aad1e82 100644
--- a/entity/Person_entity/entityfields/objecttrees/children/objectid_param/valueProcess.js
+++ b/entity/PrivatePerson_entity/entityfields/persons/children/personid_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
+
+result.string(vars.get("$field.PERSONID"));
\ No newline at end of file
diff --git a/entity/PrivatePerson_entity/entityfields/persons/children/readonly_param/valueProcess.js b/entity/PrivatePerson_entity/entityfields/persons/children/readonly_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/PrivatePerson_entity/entityfields/persons/children/readonly_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/PrivatePerson_entity/entityfields/user_edit/valueProcess.js b/entity/PrivatePerson_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6af880ae3e0e2b89b4eee8327ed49f1eefe458af
--- /dev/null
+++ b/entity/PrivatePerson_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+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/PrivatePerson_entity/entityfields/user_new/valueProcess.js b/entity/PrivatePerson_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e518bc75a9494e53a83613dedd943106e74fc00a
--- /dev/null
+++ b/entity/PrivatePerson_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+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/PrivatePerson_entity/recordcontainers/db/conditionProcess.js b/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9164618bf9b1cd954eef4d8407ddb00f65593a88
--- /dev/null
+++ b/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,15 @@
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var cond = new SqlCondition();
+
+if (vars.get("$param.ExcludedPersonIds_param"))
+{
+    var excludedPersons = JSON.parse(vars.getString("$param.ExcludedPersonIds_param"));
+    cond.andIn("PERSON.PERSONID", excludedPersons, undefined, true);
+}
+
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/PrivatePerson_entity/recordcontainers/db/orderClauseProcess.js b/entity/PrivatePerson_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0e909653e440b607fd923e888914cc194314166
--- /dev/null
+++ b/entity/PrivatePerson_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.db");
+
+result.object({
+    "PERSON.FIRSTNAME": db.ASCENDING,
+    "PERSON.LASTNAME": db.ASCENDING
+});
\ No newline at end of file
diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod
index 4c47769977d0edd85bf5c1e491118a45d3ccaf64..d4d9afc35053ef135fc6cde0be4ce6b297f76dbb 100644
--- a/entity/Product_entity/Product_entity.aod
+++ b/entity/Product_entity/Product_entity.aod
@@ -329,7 +329,7 @@
         <entityDependency>
           <name>0129066d-805c-4522-b1bc-9bbbc9588629</name>
           <entityName>Organisation_entity</entityName>
-          <fieldName>Product_consumer</fieldName>
+          <fieldName>Products</fieldName>
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
diff --git a/entity/Product_entity/documentation.adoc b/entity/Product_entity/documentation.adoc
index ccd3865898d44c3d0ebd4b3bd46633d4f84b8bf1..82e1cc146eeb50303690c0be9c0d289be8dbaa43 100644
--- a/entity/Product_entity/documentation.adoc
+++ b/entity/Product_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= PRODUCT
+= Product_entity
 
 :hardbreaks:
 
diff --git a/entity/Product_entity/entityfields/maindocuments/stateProcess.js b/entity/Product_entity/entityfields/maindocuments/stateProcess.js
index 72587c51cbebb63a1d3ec977426cc04e3ede0ecf..88c09509f70206adb7e7b741a793f682936d6540 100644
--- a/entity/Product_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Product_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("PRODUCT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("PRODUCT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Product_entity/grantDeleteProcess.js b/entity/Product_entity/grantDeleteProcess.js
index e60a76ed2f3b62ed97948d8cf55819dc835f59fa..ceda91b855d18d79b35a1d743cc5f39a29a1942a 100644
--- a/entity/Product_entity/grantDeleteProcess.js
+++ b/entity/Product_entity/grantDeleteProcess.js
@@ -3,6 +3,8 @@ import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
+import("system.neon");
 
-result.string(!DocumentUtil.hasDocuments("PRODUCT", null, vars.get("$field.PRODUCTID"))
-    && !ActivityUtils.hasActivities(vars.get("$field.PRODUCTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("PRODUCT", null, vars.get("$field.PRODUCTID"))
+//    && !ActivityUtils.hasActivities(vars.get("$field.PRODUCTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/conditionProcess.js b/entity/Product_entity/recordcontainers/db/conditionProcess.js
index be16e42ba7592bf31fcac470d3e796d15f80583a..b0cb4c15622232ab8d2da5ffe1e238affea98485 100644
--- a/entity/Product_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Product_entity/recordcontainers/db/conditionProcess.js
@@ -15,5 +15,5 @@ if (vars.exists("$param.ExcludedProducts_param") && vars.get("$param.ExcludedPro
     }, productCond);
 }
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(productCond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(productCond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod
index 7f12819dac5c3456db46f3d21d2dbdc9e631f171..9321eb08057c9a408477097630baf639ab107f64 100644
--- a/entity/Productprice_entity/Productprice_entity.aod
+++ b/entity/Productprice_entity/Productprice_entity.aod
@@ -9,7 +9,6 @@
     <element>Product_entity</element>
   </siblings>
   <onValidation>%aditoprj%/entity/Productprice_entity/onValidation.js</onValidation>
-  <afterOperatingState>%aditoprj%/entity/Productprice_entity/afterOperatingState.js</afterOperatingState>
   <titlePlural>Prices</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -51,7 +50,6 @@
     </entityField>
     <entityField>
       <name>PRODUCTPRICEID</name>
-      <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/productpriceid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>PRODUCT_ID</name>
@@ -131,6 +129,7 @@
     <entityField>
       <name>IMAGE</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/image/valueProcess.js</valueProcess>
     </entityField>
     <entityProvider>
diff --git a/entity/Productprice_entity/afterOperatingState.js b/entity/Productprice_entity/afterOperatingState.js
deleted file mode 100644
index 80a3d84eb82abf701d27d51058ce18eaeb659e5b..0000000000000000000000000000000000000000
--- a/entity/Productprice_entity/afterOperatingState.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.operatingstate") != undefined 
-&& vars.get("$sys.operatingstate") != null 
-&& vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW 
-&& vars.get("$local.value")) // local.value is previous operationgstate or null. This fixes not working Filter
-{
-    neon.refresh();
-}
diff --git a/entity/Productprice_entity/documentation.adoc b/entity/Productprice_entity/documentation.adoc
index cb6558ccb5adeee75778e6e5e83b152b94f590c7..bf8339c4365b289f985c98675cde9fc3997af213 100644
--- a/entity/Productprice_entity/documentation.adoc
+++ b/entity/Productprice_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= PRODUCTPRICE
+= Productprice_entity
 
 :hardbreaks:
 
diff --git a/entity/Productprice_entity/entityfields/currency/valueProcess.js b/entity/Productprice_entity/entityfields/currency/valueProcess.js
index f07b41ba6feeb577ba324ece8c0be4a29387d888..7b9758eece838fc7690866c7ba831802a1e180ab 100644
--- a/entity/Productprice_entity/entityfields/currency/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/currency/valueProcess.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string($KeywordRegistry.currency$eur());
 }
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/fromquantity/valueProcess.js b/entity/Productprice_entity/entityfields/fromquantity/valueProcess.js
index d471ab772a44717ed2cc4dab0d9314ad3b2b1d74..e216f703872113ba24531698c8c5935cf890b685 100644
--- a/entity/Productprice_entity/entityfields/fromquantity/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/fromquantity/valueProcess.js
@@ -3,6 +3,4 @@ import("system.result");
 import("system.neon");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-    result.string("1");
-else
-    result.string(vars.get("$this.value"));
\ No newline at end of file
+    result.string("1");
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/pricelist/valueProcess.js b/entity/Productprice_entity/entityfields/pricelist/valueProcess.js
index deff487595e534b9934221494c1573b9b758980f..5e19924138c7b1be48daf411660ba65980deca24 100644
--- a/entity/Productprice_entity/entityfields/pricelist/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/pricelist/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.CONTACT_ID"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.CONTACT_ID") && vars.get("$this.value") == null)
     result.string($KeywordRegistry.productPricelist$standardList());
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/product_id/valueProcess.js b/entity/Productprice_entity/entityfields/product_id/valueProcess.js
index bb3ee6de138992e53d180ea512defaa60975e6c2..99cbed8d31968136304c0f94b686708aea34a84e 100644
--- a/entity/Productprice_entity/entityfields/product_id/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/product_id/valueProcess.js
@@ -1,7 +1,7 @@
 import("system.result");
 import("system.vars");
 
-if(vars.exists("$param.ProductId_param") && vars.get("$param.ProductId_param"))
+if(vars.exists("$param.ProductId_param") && vars.get("$param.ProductId_param") && vars.get("$this.value") == null)
 {
     result.string(vars.getString("$param.ProductId_param"));
 }
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/vat/valueProcess.js b/entity/Productprice_entity/entityfields/vat/valueProcess.js
index 98c06869e1502756cb5749aaa1447932d3c44bff..20e9d87a63c30b2ad2bf4937fcf74160202978c8 100644
--- a/entity/Productprice_entity/entityfields/vat/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/vat/valueProcess.js
@@ -3,8 +3,7 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-                                                             // '!+' -> "0", "", 0 will result in false
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !+vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     if (vars.get("$field.PRODUCT_ID"))
     {
diff --git a/entity/Productprice_entity/onValidation.js b/entity/Productprice_entity/onValidation.js
index fddde143c2d4bb6186ae78d6032f09866ff77610..393e20d490dc66e77b0f38ab18ad526e85b0fdd5 100644
--- a/entity/Productprice_entity/onValidation.js
+++ b/entity/Productprice_entity/onValidation.js
@@ -22,7 +22,6 @@ var priceList = {
                 validFrom: vars.get("$field.VALID_FROM"),
                 validTo: vars.get("$field.VALID_TO")
             };
-
 var identicalPriceList = ProductUtils.checkForIndenticalPriceLists(vars.get("$field.PRODUCT_ID"), priceList);
 if(identicalPriceList != null)
 {
diff --git a/entity/Productprice_entity/recordcontainers/db/conditionProcess.js b/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
index 6dfa481d2964da773d5bb96a89928c1474f2c877..5fce6b87cf721a8dfe88f5d13f5c75cb35f0b767 100644
--- a/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
@@ -6,6 +6,6 @@ import("Sql_lib");
 var cond = SqlCondition.begin()
                        .andPrepareVars("PRODUCTPRICE.PRODUCT_ID", "$param.ProductId_param")
                        .andPrepareVars("PRODUCTPRICE.CONTACT_ID", "$param.ContactId_param");
-                       
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Role_entity/Role_entity.aod b/entity/Role_entity/Role_entity.aod
index 5d325465a52a0162d7948d28a58544fd2d1b9680..c2030bfbb260cea11e1742424f10d126203e60ee 100644
--- a/entity/Role_entity/Role_entity.aod
+++ b/entity/Role_entity/Role_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Role_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Role_entity/documentation.adoc</documentation>
   <icon>VAADIN:USER_CHECK</icon>
   <title>Roles</title>
   <grantCreate v="false" />
@@ -72,7 +73,7 @@
       </dependencies>
       <children>
         <entityParameter>
-          <name>excludeRoles_param</name>
+          <name>ExcludeRoles_param</name>
           <expose v="false" />
         </entityParameter>
       </children>
@@ -91,6 +92,12 @@
           <fieldName>Roles</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>6d7b7a16-e958-4f9d-9108-81a42257d65e</name>
+          <entityName>Employee_entity</entityName>
+          <fieldName>PossibleRoles</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
   </entityFields>
diff --git a/entity/Role_entity/documentation.adoc b/entity/Role_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0e10050d3cc7dcf60d48f63658b9e27ab3dc9950
--- /dev/null
+++ b/entity/Role_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Role_entity
+
+Link the roles to the users. Also used in the authorization concept
\ No newline at end of file
diff --git a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
index 4b857c463d4b9a395f38fcafc633b2a717565cc6..14ed2eb3dfcaf0d527dfa6c9b6f313cbbb5be44b 100644
--- a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
+++ b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
@@ -69,6 +69,20 @@
       <name>openTurnover</name>
       <onActionProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/openturnover/onActionProcess.js</onActionProcess>
     </entityActionField>
+    <entityField>
+      <name>MY_FORECAST</name>
+      <title></title>
+      <contentType>NUMBER</contentType>
+      <titleProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/titleProcess.js</titleProcess>
+      <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>MY_TURNOVER</name>
+      <title></title>
+      <contentType>NUMBER</contentType>
+      <titleProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/titleProcess.js</titleProcess>
+      <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/titleProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..560e877e47a8ea6bbc6ed399e2daac3f325e38e4
--- /dev/null
+++ b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/titleProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("system.translate");
+import("system.datetime");
+
+result.string(translate.text("My Forecast") +  " " + datetime.toDate(vars.get("$sys.date"), "yyyy"));
\ No newline at end of file
diff --git a/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c50ff040b61415400542117cabae20fc0c81ef5
--- /dev/null
+++ b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js
@@ -0,0 +1,19 @@
+import("Employee_lib");
+import("system.datetime");
+import("system.db");
+import("system.result");
+import("system.vars");
+import("Date_lib");
+import("Sql_lib");
+import("system.SQLTYPES")
+
+var myContactId = EmployeeUtils.getCurrentContactId();
+
+var forecast = db.cell(SqlCondition.begin()
+                                    .andPrepare("FORECAST.DATE_START", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER)
+                                    .andPrepare("OBJECTMEMBER.OBJECT_TYPE", 'Salesproject')
+                                    .andPrepare("OBJECTMEMBER.CONTACT_ID", myContactId)
+                                    .buildSql("select SUM(VOLUME) from OBJECTMEMBER \n\
+                                    left join FORECAST on FORECAST.OBJECT_TYPE = OBJECTMEMBER.OBJECT_TYPE and FORECAST.OBJECT_ROWID = OBJECTMEMBER.OBJECT_ROWID", "1=2"));
+                                  
+result.string(forecast);
\ No newline at end of file
diff --git a/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/titleProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4da42294dd45de76617cf85e2cff74d657b83dae
--- /dev/null
+++ b/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/titleProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("system.translate");
+import("system.datetime");
+
+result.string(translate.text("My Turnover") +  " " + datetime.toDate(vars.get("$sys.date"), "yyyy"));
\ No newline at end of file
diff --git a/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a3c62683acd37a7cd2b87024bc8217b5b8e59980
--- /dev/null
+++ b/entity/SalesprojectAnalyses_entity/entityfields/my_turnover/valueProcess.js
@@ -0,0 +1,22 @@
+import("Employee_lib");
+import("Contact_lib");
+import("system.logging");
+import("system.datetime");
+import("system.db");
+import("system.result");
+import("system.vars");
+import("Date_lib");
+import("Sql_lib");
+import("system.SQLTYPES")
+
+var myContactId = EmployeeUtils.getCurrentContactId();
+
+var turnover = db.cell(SqlCondition.begin()
+                                   .andPrepare("SALESORDER.SALESORDERDATE", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER)
+                                   .andPrepare("SALESORDER.ORDERTYPE", "ORDTYPEINVO")
+                                   .andPrepare("OBJECTMEMBER.OBJECT_TYPE", 'Salesproject')
+                                   .andPrepare("OBJECTMEMBER.CONTACT_ID", myContactId)
+                                   .buildSql("select sum(NET + VAT) from OBJECTMEMBER \n\
+                                   left join SALESORDER on SALESORDER.OBJECT_TYPE = OBJECTMEMBER.OBJECT_TYPE and SALESORDER.OBJECT_ROWID = OBJECTMEMBER.OBJECT_ROWID", "1=2"));
+                                  
+result.string(turnover);
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
index bafb1559f232afd27db8a500277221514961ae26..1cb15170f7e6659fae4212c409f16b03f98ff0b2 100644
--- a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
+++ b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SalesprojectMilestone_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SalesprojectMilestone_entity/documentation.adoc</documentation>
   <title></title>
   <grantCreate v="false" />
   <grantUpdate v="false" />
@@ -40,7 +41,7 @@
       <name>KIND</name>
       <title>Type</title>
       <mandatory v="true" />
-      <displayValueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/type/displayValueProcess.js</displayValueProcess>
+      <displayValueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/kind/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>MILESTONEVALUE</name>
@@ -145,7 +146,6 @@
     <entityField>
       <name>valueLongName</name>
       <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/valuelongname/displayValueProcess.js</displayValueProcess>
     </entityField>
   </entityFields>
   <recordContainers>
diff --git a/entity/SalesprojectMilestone_entity/conditionProcess.js b/entity/SalesprojectMilestone_entity/conditionProcess.js
index 7711ad471a8ed5e095a39703339fdedc6bc6153f..1d1cfabadaf9282142752e33bf7f3febc7eb0fc6 100644
--- a/entity/SalesprojectMilestone_entity/conditionProcess.js
+++ b/entity/SalesprojectMilestone_entity/conditionProcess.js
@@ -6,5 +6,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("SALESPROJECT_MILESTONE.SALESPROJECT_ID", "$param.SalesprojectId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/documentation.adoc b/entity/SalesprojectMilestone_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0a759a8b347215b6fa1789786d169dfa7be29a74
--- /dev/null
+++ b/entity/SalesprojectMilestone_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SalesprojectMilestone_entity
+
+This Entity holds important steps of the salesproject. (e.g. Phase and Status changes)
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/entityfields/type/displayValueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/kind/displayValueProcess.js
similarity index 100%
rename from entity/SalesprojectMilestone_entity/entityfields/type/displayValueProcess.js
rename to entity/SalesprojectMilestone_entity/entityfields/kind/displayValueProcess.js
diff --git a/entity/SalesprojectMilestone_entity/entityfields/valuelongname/displayValueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/valuelongname/displayValueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js b/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
index 3706bc878d154b36e361b450036a77b917c71a78..66767400e5dc295ce57df3e358f051094872b725 100644
--- a/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
@@ -7,5 +7,5 @@ var cond = SqlCondition.begin()
                        .andPrepareVars("SALESPROJECT_MILESTONE.SALESPROJECT_ID", "$param.SalesprojectId_param")
                        .andPrepareVars("SALESPROJECT_MILESTONE.KIND", "$param.Kind_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod
index be7968a149ceeea00c2c0bfd9a802cfa3c886372..cc099f7890ee73574d8fc02587da9c98f1685c7f 100644
--- a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod
+++ b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SalesprojectPhase_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SalesprojectPhase_entity/documentation.adoc</documentation>
   <title>Phase</title>
   <siblings>
     <element>SalesprojectMilestone_entity</element>
diff --git a/entity/SalesprojectPhase_entity/documentation.adoc b/entity/SalesprojectPhase_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a66e4697cae558446ee5dcff48d54a874ac1f465
--- /dev/null
+++ b/entity/SalesprojectPhase_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SalesprojectPhase_entity
+
+This Entity is needed to select and show the current phase of a salesproject via a stepper template.
\ 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 686167534bfb92567678789679443ec38d8bc940..a961d29c0531224c6213dc70ecd0eb509faa3e23 100644
--- a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js
@@ -6,19 +6,31 @@ import("system.result");
 import("system.vars");
 
 var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase());
-var selection = vars.get("$sys.selection");
+var ids = vars.get("$local.idvalues");
 var selected = vars.exists("$param.CurrentPhase_param") && vars.get("$param.CurrentPhase_param");
 
+// filter only for steps reqested by the system
+if (ids)
+{
+    steps = steps.filter(function(pStep) 
+    {
+        for (let i = 0; i < ids.length; i++) 
+        {
+            if (ids[i] == pStep[0])
+                return true
+        }
+        return false
+    })
+}
 
 var res = [];
 steps.forEach(function ([stepId, title])
 {
-    if (selection.length > 0)
-        res.push([stepId, selection.indexOf(stepId) > -1  ? "ACTIVE" : "EDITABLE", title, _getIcon(stepId)]);
+    if (ids)
+        res.push([stepId, ids.indexOf(stepId) > -1  ? "ACTIVE" : "EDITABLE", title, _getIcon(stepId)]);
     else
         res.push([stepId, stepId === selected ? "ACTIVE" : "EDITABLE", title, _getIcon(stepId)]);
 });
-
 result.object(res);
 
 function _getIcon (pPhase)
diff --git a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
index 82112726caff98dcb9d251b1e3a99453c5a885e9..71d65c2808a2fce8cf1c6fa006cdfbcb84ab8b86 100644
--- a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
+++ b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SalesprojectSource_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SalesprojectSource_entity/documentation.adoc</documentation>
   <title>Touchpoint</title>
   <iconId>VAADIN:HANDSHAKE</iconId>
   <titlePlural>Touchpoints</titlePlural>
diff --git a/entity/SalesprojectSource_entity/conditionProcess.js b/entity/SalesprojectSource_entity/conditionProcess.js
index fa1c8bc25f7f9731aa0bbc454fd669f4d6e62e43..51b6dcc323e8e6e57e2dc182f55ad5c0d2eed219 100644
--- a/entity/SalesprojectSource_entity/conditionProcess.js
+++ b/entity/SalesprojectSource_entity/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("SALESPROJECT_TOUCHPOINT.SALESPROJECT_ID", "$param.SalesprojectId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/SalesprojectSource_entity/documentation.adoc b/entity/SalesprojectSource_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ba2ac126ee88b608cd1bd7c361d30db7db8ab251
--- /dev/null
+++ b/entity/SalesprojectSource_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SalesprojectSource_entity
+
+This Entity holds all sources and Touchpoints (e.g. Informationsources)
\ No newline at end of file
diff --git a/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js b/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
index fa1c8bc25f7f9731aa0bbc454fd669f4d6e62e43..51b6dcc323e8e6e57e2dc182f55ad5c0d2eed219 100644
--- a/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,5 @@ import("Sql_lib");
 var cond = new SqlCondition();
 cond.andPrepareVars("SALESPROJECT_TOUCHPOINT.SALESPROJECT_ID", "$param.SalesprojectId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index dc45ece712f9ede183d49751dabb204edbeb1ce4..bc173917e9b3d006d4865ca546b543ed899f0c3b 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Salesproject_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Salesproject_entity/documentation.adoc</documentation>
   <title>Salesproject</title>
   <siblings>
     <element>SalesprojectMilestone_entity</element>
@@ -295,6 +296,7 @@
     <entityField>
       <name>IMAGE</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/image/valueProcess.js</valueProcess>
     </entityField>
     <entityConsumer>
diff --git a/entity/Salesproject_entity/documentation.adoc b/entity/Salesproject_entity/documentation.adoc
index 2abd8032957ef6622b98c7a8924a66ca5dea82e3..4e47d9282d99a813c48b859499404ae5d0754e57 100644
--- a/entity/Salesproject_entity/documentation.adoc
+++ b/entity/Salesproject_entity/documentation.adoc
@@ -15,7 +15,3 @@ A salesproject consists of some modules:
 - Classification
 - Forecast
 - Timetracking
-
-== Information ==
-Milestones are currently inserted on each change of Phase and State.
-(with the processes db.onDBUpdate, db.onDBInsert)
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js b/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js
index 08207c042cac0a6a659b044a2572c39de7550047..60d0ba62a6cde8fa078599b65f0b61c722016341 100644
--- a/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("SALESPROJECT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("SALESPROJECT", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Salesproject_entity/entityfields/status/onValueChange.js b/entity/Salesproject_entity/entityfields/status/onValueChange.js
index 4745b434f63d0151c8c511fdc73e9ac6d9cad1c0..28c14cc18d4f2db77119a72ef8d4023eeca4d851 100644
--- a/entity/Salesproject_entity/entityfields/status/onValueChange.js
+++ b/entity/Salesproject_entity/entityfields/status/onValueChange.js
@@ -1,7 +1,11 @@
+import("system.neon");
 import("Sql_lib");
 import("system.vars");
 import("system.db");
 
-vars.set("$context.statusBefore", db.cell(SqlCondition.begin()
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    vars.set("$context.statusBefore", db.cell(SqlCondition.begin()
                                                       .andPrepareVars("SALESPROJECT.SALESPROJECTID", "$field.SALESPROJECTID")
-                                                      .buildSql("select STATUS from SALESPROJECT", "1=2")));
\ No newline at end of file
+                                                      .buildSql("select STATUS from SALESPROJECT", "1=2")));
+}
diff --git a/entity/Salesproject_entity/grantDeleteProcess.js b/entity/Salesproject_entity/grantDeleteProcess.js
index 66d8dcc67dbfa7addfbe250d3e1c6a074bb84a3a..45e83a39245a2681f23ff3b4e963ba3559c71de2 100644
--- a/entity/Salesproject_entity/grantDeleteProcess.js
+++ b/entity/Salesproject_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("SALESPROJECT", null, vars.get("$field.SALESPROJECTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("SALESPROJECT", null, vars.get("$field.SALESPROJECTID"))
+//    && !TaskUtils.hasTasks(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId())
+//    && !ActivityUtils.hasActivities(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
index 718629c28ebd0cd9a84247b26c676ff40ac4b099..758fb672773c76beeac60ca6721d398505f50f93 100644
--- a/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
@@ -3,8 +3,8 @@ import("system.result");
 import("system.vars");
 import("Sql_lib");
 
-result.string(db.translateCondition(
-            SqlCondition.begin()
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin()
                         .andPrepareVars("SALESPROJECT.CONTACT_ID", "$param.ContactId_param")
                         .andPrepareVars("SALESPROJECT.STATUS", "$param.Status_param")
-                        .build("1 = 1")));
\ No newline at end of file
+                        .translate("1 = 1"));
\ No newline at end of file
diff --git a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
index 44840af9ffe6b8e78b8b308c8aadb8e33a4e5cb4..ae82ed9c10f44c3af9af3df67af9397f27490462 100644
--- a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
+++ b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SalutationDistinct_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SalutationDistinct_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/SalutationDistinct_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>jdito</recordContainer>
   <entityFields>
diff --git a/entity/SalutationDistinct_entity/documentation.adoc b/entity/SalutationDistinct_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..80fc7094ef6b1f707db673a4a16e709d0138d087
--- /dev/null
+++ b/entity/SalutationDistinct_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= SalutationDistinct_entity
+
+This entity loads all possible salutations via a distinct keyword to provide each salutation only one time.
+Note: the UID is also the Salutation. There is no generated UUID. You can use the UID as value directly.
\ No newline at end of file
diff --git a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
index c1d96647d6ed7c3998449b259b26acbade11d648..a75dd6d5ac5f36e63cc49b7e9b9dba6b1ff48a7e 100644
--- a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
+++ b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SalutationTitleDistinct_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SalutationTitleDistinct_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/SalutationTitleDistinct_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>jdito</recordContainer>
   <entityFields>
diff --git a/entity/SalutationTitleDistinct_entity/documentation.adoc b/entity/SalutationTitleDistinct_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8256b31b6d8d57f948ae100ff4c17e4e577de19e
--- /dev/null
+++ b/entity/SalutationTitleDistinct_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= SalutationTitleDistinct_entity
+
+This entity loads all possible Titles via a distinct keyword to provide each Title only one time.
+Note: the UID is also the Title. There is no generated UUID. You can use the UID as value directly.
\ No newline at end of file
diff --git a/entity/SalutationTitleDistinct_entity/recordcontainers/jdito/contentProcess.js b/entity/SalutationTitleDistinct_entity/recordcontainers/jdito/contentProcess.js
index 8c0df5ff1d2cfee0ffc9a5ff526ebf4a608a072f..7ed68ef0baacbb096994ba8b7a84e07db2630aea 100644
--- a/entity/SalutationTitleDistinct_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/SalutationTitleDistinct_entity/recordcontainers/jdito/contentProcess.js
@@ -6,5 +6,5 @@ import("Sql_lib");
 result.object(db.table(SqlCondition.begin()
                     .and("TITLE is not NULL")
                     .andPrepareVars("SALUTATION.SALUTATION", "$param.Salutation_param")
-                    .andPrepareVars("SALUTATION.LANGUAGE", "$param.Language_param")
+                    .andPrepareVars("SALUTATION.ISOLANGUAGE", "$param.Language_param")
                     .buildSql("select distinct TITLE from SALUTATION", "1=1")));
\ No newline at end of file
diff --git a/entity/Salutation_entity/Salutation_entity.aod b/entity/Salutation_entity/Salutation_entity.aod
index bfc64038579eb494311e3d0f4490e96a6b15d11f..5edba218b19fb1e1b205883ddc9d3aa43dabfc10 100644
--- a/entity/Salutation_entity/Salutation_entity.aod
+++ b/entity/Salutation_entity/Salutation_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Salutation_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Salutation_entity/documentation.adoc</documentation>
   <title>Salutation</title>
   <iconId>VAADIN:COMMENT_ELLIPSIS</iconId>
   <titlePlural>Salutations</titlePlural>
diff --git a/entity/Salutation_entity/documentation.adoc b/entity/Salutation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..96b68c1eb06fc10b0843d17b254af538ef6ecec5
--- /dev/null
+++ b/entity/Salutation_entity/documentation.adoc
@@ -0,0 +1,5 @@
+= Salutation_entity
+
+This entity loads the full salutation table. It is used to administrate the Salutations.
+
+If you need a selection of the Salutation or Title, use SalutationDistinct_entity / SalutationTitleDistinct_entity.
\ No newline at end of file
diff --git a/entity/Salutation_entity/entityfields/isolanguage/displayValueProcess.js b/entity/Salutation_entity/entityfields/isolanguage/displayValueProcess.js
index dae44e029af40ecdf3c360a4e80a24d6a5f74540..10bfcd16971be169b873414426182f4703fe6de2 100644
--- a/entity/Salutation_entity/entityfields/isolanguage/displayValueProcess.js
+++ b/entity/Salutation_entity/entityfields/isolanguage/displayValueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.vars");
 import("Keyword_lib");
 
-var key = vars.get("$field.LANGUAGE");
+var key = vars.get("$field.ISOLANGUAGE");
 if (key)
 {
     var res = LanguageKeywordUtils.getViewValue(key);
diff --git a/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod b/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod
index 66768fb7f3e15a14ba0ddc984d193e7e7b88c4f7..4e77d437b85e8bc6abe938883533da1bf6e6d188 100644
--- a/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod
+++ b/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SerialLetterAddRecipients_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SerialLetterAddRecipients_entity/documentation.adoc</documentation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -12,6 +13,7 @@
       <title>Serial letter</title>
       <consumer>SerialLetters</consumer>
       <mandatory v="true" />
+      <displayValueProcess>%aditoprj%/entity/SerialLetterAddRecipients_entity/entityfields/serialletter_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>UID</name>
diff --git a/entity/SerialLetterAddRecipients_entity/documentation.adoc b/entity/SerialLetterAddRecipients_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8244019c658663cf3674b43aaae6096685ce8eba
--- /dev/null
+++ b/entity/SerialLetterAddRecipients_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SerialLetter_entity
+
+Entity for sending a form letter. This includes the entity SerielLetterAddRecipients_entity
\ No newline at end of file
diff --git a/entity/SerialLetterAddRecipients_entity/entityfields/serialletter_id/displayValueProcess.js b/entity/SerialLetterAddRecipients_entity/entityfields/serialletter_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e4cef21d24f9dd3b9ba81e081ed34d5b4fc4b3c
--- /dev/null
+++ b/entity/SerialLetterAddRecipients_entity/entityfields/serialletter_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("Sql_lib");
+import("system.db");
+import("system.result");
+
+if (vars.get("$this.value"))
+    result.string(db.cell(SqlCondition.begin().andPrepare("SERIALLETTER.SERIALLETTERID", vars.get("$this.value")).buildSql("select TITLE from SERIALLETTER")));
+else
+    result.string("");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod
index 2ea9ac7cfa3ac27f3954f62602a0bd954df98861..c5508c8d60e7373f2ef0230f50d3aba3221defac 100644
--- a/entity/SerialLetter_entity/SerialLetter_entity.aod
+++ b/entity/SerialLetter_entity/SerialLetter_entity.aod
@@ -2,9 +2,11 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SerialLetter_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SerialLetter_entity/documentation.adoc</documentation>
   <icon>VAADIN:ENVELOPES</icon>
   <title>Serial letter</title>
   <contentTitleProcess>%aditoprj%/entity/SerialLetter_entity/contentTitleProcess.js</contentTitleProcess>
+  <onValidation>%aditoprj%/entity/SerialLetter_entity/onValidation.js</onValidation>
   <iconId>VAADIN:ENVELOPE</iconId>
   <titlePlural>Serial letters</titlePlural>
   <recordContainer>db</recordContainer>
@@ -20,13 +22,6 @@
         </entityDependency>
       </dependencies>
     </entityProvider>
-    <entityActionField>
-      <name>downloadLetter</name>
-      <title>Download letter</title>
-      <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:DOWNLOAD_ALT</iconId>
-      <tooltipProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
     <entityField>
       <name>SERIALLETTERID</name>
     </entityField>
@@ -52,6 +47,7 @@
     <entityField>
       <name>ICON</name>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
     <entityConsumer>
@@ -61,6 +57,16 @@
         <entityName>DocumentTemplate_entity</entityName>
         <fieldName>DocumentTemplateProvider</fieldName>
       </dependency>
+      <children>
+        <entityParameter>
+          <name>DocumentTemplateType_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>DocumentTemplateTypeClassification_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
     </entityConsumer>
     <entityField>
       <name>TITLE</name>
@@ -87,13 +93,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>openAdminView</name>
-      <title>Open admin view</title>
-      <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CURLY_BRACKETS</iconId>
-      <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/stateProcess.js</stateProcess>
-    </entityActionField>
     <entityField>
       <name>bindata</name>
       <contentType>FILE</contentType>
@@ -101,7 +100,50 @@
     <entityField>
       <name>STATUS</name>
       <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/status/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/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
+      <state>INVISIBLE</state>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityActionField>
+      <name>downloadLetter</name>
+      <title>Download letter</title>
+      <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:DOWNLOAD_ALT</iconId>
+      <tooltipProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js</tooltipProcess>
+    </entityActionField>
     <entityActionField>
       <name>downloadTemplate</name>
       <title>Download template</title>
@@ -109,6 +151,13 @@
       <iconId>VAADIN:FILE_FONT</iconId>
       <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -161,6 +210,11 @@
         <dbRecordFieldMapping>
           <name>STATUS.value</name>
           <recordfield>SERIALLETTER.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/SerialLetter_entity/documentation.adoc b/entity/SerialLetter_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8244019c658663cf3674b43aaae6096685ce8eba
--- /dev/null
+++ b/entity/SerialLetter_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SerialLetter_entity
+
+Entity for sending a form letter. This includes the entity SerielLetterAddRecipients_entity
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/activities/children/objectid_param/valueProcess.js
similarity index 100%
rename from entity/Person_entity/entityfields/objecttrees/children/objecttype_param/valueProcess.js
rename to entity/SerialLetter_entity/entityfields/activities/children/objectid_param/valueProcess.js
diff --git a/entity/SerialLetter_entity/entityfields/activities/children/rowid_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/activities/children/rowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..35957a3e3b9d834cbc81c9722dee719048a160db
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/activities/children/rowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.SERIALLETTERID"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
index 3661c8f2d267db8ccbbab568c6b407fdfd2bb657..6563351beeed3e44fd2b4ce209d066508cdeb6f3 100644
--- a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
+++ b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
@@ -10,4 +10,4 @@ import("Employee_lib");
 //    binId : "1234"
 //}
 //notification.addNotification(util.getNewUUID(), null, null, null, "DownloadReady", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [EmployeeUtils.getCurrentUserId()], "yes", "desc")
-var document = SerialLetterUtils.buildSerialLetter(vars.get("$field.SERIALLETTERID"));
\ No newline at end of file
+var document = SerialLetterUtils.buildSerialLetter(vars.get("$field.SERIALLETTERID"));
diff --git a/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js b/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js
index 08f18726798d5059a50a4559b66dce881dd40b4b..518d384f3239345ec1115b58dd2afbd42a10d57e 100644
--- a/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js
+++ b/entity/SerialLetter_entity/entityfields/downloadtemplate/onActionProcess.js
@@ -1,7 +1,7 @@
-import("system.neon");
-import("system.vars");
-import("DocumentTemplate_lib");
-
-var template = DocumentTemplate.loadTemplate(vars.get("$field.DOCUMENTTEMPLATE_ID"));
-if (template.type)
+import("system.neon");
+import("system.vars");
+import("DocumentTemplate_lib");
+
+var template = DocumentTemplate.loadTemplate(vars.get("$field.DOCUMENTTEMPLATE_ID"), undefined, false);
+if (template.type)
     neon.download(template.content, template.filename);
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js b/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1daf1e139990d0a128b61c85a9d65ce0a5014b7f
--- /dev/null
+++ b/entity/SerialLetter_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.serialLetterStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/status/valueProcess.js b/entity/SerialLetter_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3df487964ab3b8691ebead46054e2fab0dc57669
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,9 @@
+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.serialLetterStatus$notSent());
+}
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d04ca4091530f28a271e5c3487569d09b1630b51
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.serialLetterStatus());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..94ae123081d4978bc210d76f2569e8cbae5fbcf8
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.documentTemplateType$letter());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d817901f1b2467cec7d38865f9cc054ddadd2dcd
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.documentTemplateTypeCategory$serial());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/onValidation.js b/entity/SerialLetter_entity/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffb5740ed04599b2851d96fd4ff6aef611f0b05b
--- /dev/null
+++ b/entity/SerialLetter_entity/onValidation.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+import("DocumentTemplate_lib");
+
+[content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$field.DOCUMENTTEMPLATE_ID"), new FileUpload(vars.get("$field.bindata")));
+if (type != DocumentTemplate.types.ODT && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+    result.string(DocumentTemplate.serialLetterODTOnlyMessage());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js b/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
index 55085a49c3ce5eaca03b0a37dac814b5cf0e706c..d2afc219ad55ac7beed3d3e821721af994ae6a24 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
@@ -3,7 +3,7 @@ import("Sql_lib");
 import("system.db");
 
 db.deleteData("LETTERRECIPIENT", SqlCondition.equals("LETTERRECIPIENT.SERIALLETTER_ID", vars.get("$local.uid"), "1=2"));
-var SYSALIAS = SqlUtils.getSystemAlias();
+var SYSALIAS = SqlUtils.getBinariesAlias();
 var binaryId = db.cell(SqlCondition.begin(SYSALIAS)
     .andPrepareVars("ASYS_BINARIES.ROW_ID", "$local.uid")
     .buildSql("select ID from ASYS_BINARIES"), SYSALIAS);
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js b/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
index 9b692c8c7d8c4c8588788f61f16a1e048c351481..dd3c89aa9115e7e99e002ed2c575d6de41cf556d 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
@@ -5,7 +5,7 @@ import("system.vars");
 import("system.db");
 import("Document_lib");
 
-var bindata = vars.get("$field.bindata");
+var bindata = new FileUpload(vars.get("$field.bindata"));
 var rowdata = vars.get("$local.rowdata");
 var letterId = rowdata["SERIALLETTER.SERIALLETTERID"];
 var templateId = rowdata["SERIALLETTER.DOCUMENTTEMPLATE_ID"];
@@ -15,5 +15,5 @@ var template = DocumentTemplate.fromUpload(bindata);
 if (template.content)
 {
     db.insertBinary("SERIALLETTER", "DOCUMENT", letterId, 
-        "", template.content, template.filename, "", "", SqlUtils.getSystemAlias());
+        "", template.content, template.filename, "", "", SqlUtils.getBinariesAlias());
 }
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
index 8f8d362bc8c35d28fc77c9d00a5b192e016c411e..ca3f5562f8a4128a0347b9d5d012d82a6bf3ba14 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
@@ -6,7 +6,7 @@ import("system.vars");
 import("system.db");
 import("Document_lib");
 
-var bindata = vars.get("$field.bindata");
+var bindata = new FileUpload(vars.get("$field.bindata"));
 var rowdata = vars.get("$local.rowdata");
 var letterId = rowdata["SERIALLETTER.SERIALLETTERID"];
 var templateId = rowdata["SERIALLETTER.DOCUMENTTEMPLATE_ID"];
@@ -15,7 +15,7 @@ var template = DocumentTemplate.fromUpload(bindata);
 
 if (template.content)
 {
-    let sysAlias = SqlUtils.getSystemAlias();
+    let sysAlias = SqlUtils.getBinariesAlias();
     var binaryId = db.cell(SqlCondition.begin(sysAlias)
         .andPrepareVars("ASYS_BINARIES.ROW_ID", "$local.uid")
         .buildSql("select ID from ASYS_BINARIES", "1=2"), sysAlias);
diff --git a/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..a46009f04bec2554460d301d118ad03019115cbd
--- /dev/null
+++ b/entity/SerialLetter_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.serialLetterStatus(), "SERIALLETTER.STATUS");
+result.string(sql);
diff --git a/entity/Social_entity/Social_entity.aod b/entity/Social_entity/Social_entity.aod
index 2c398b28fd6016e1cc2f2e5b7c0483d055c74588..1c2317316513788037f460f93acbf1be08e9b997 100644
--- a/entity/Social_entity/Social_entity.aod
+++ b/entity/Social_entity/Social_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Social_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Social_entity/documentation.adoc</documentation>
   <title>Social Media</title>
   <entityFields>
     <entityField>
diff --git a/entity/Social_entity/documentation.adoc b/entity/Social_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d770659d662fe20c487092e14301d2d9cee83cf3
--- /dev/null
+++ b/entity/Social_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Social_entity
+
+This entity provides information for the twitter and facebook dashlets
\ No newline at end of file
diff --git a/entity/Stock_entity/documentation.adoc b/entity/Stock_entity/documentation.adoc
index 988a6942455abacabdd88bb4170f27b36ed446e5..ae7fe61c3f2d0d40800e9e7c115006d067724cad 100644
--- a/entity/Stock_entity/documentation.adoc
+++ b/entity/Stock_entity/documentation.adoc
@@ -1,4 +1,4 @@
-= STOCK
+= Stock_entity
 
 :hardbreaks:
 
diff --git a/entity/Stock_entity/recordcontainers/db/conditionProcess.js b/entity/Stock_entity/recordcontainers/db/conditionProcess.js
index f8785a43f394cc5d9e5fa93b18d6b485034ae8d4..c14c6b016babe5709bc7a06349f3a99bd8346143 100644
--- a/entity/Stock_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Stock_entity/recordcontainers/db/conditionProcess.js
@@ -3,6 +3,7 @@ import("system.vars");
 import("system.db");
 import("Sql_lib");
 
-result.string(db.translateCondition(SqlCondition.begin()
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin()
                           .andPrepareVars("STOCK.PRODUCT_ID", "$param.ProductId_param")
-                          .build("1 = 0")));
+                          .translate("1 = 0"));
diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod
index 55bb20dcf129a71f68038c8d61c240ebd87828f4..99b313b2f6c735c3b1571b0e8ee130515d708d7a 100644
--- a/entity/SupportTicket_entity/SupportTicket_entity.aod
+++ b/entity/SupportTicket_entity/SupportTicket_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>SupportTicket_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/SupportTicket_entity/documentation.adoc</documentation>
   <title>Support Ticket</title>
   <contentTitleProcess>%aditoprj%/entity/SupportTicket_entity/contentTitleProcess.js</contentTitleProcess>
   <afterUiInit>%aditoprj%/entity/SupportTicket_entity/afterUiInit.js</afterUiInit>
@@ -100,6 +101,7 @@
       <name>TASK_PRIORITY_ICON</name>
       <colorProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/task_priority_icon/colorProcess.js</colorProcess>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/task_priority_icon/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
diff --git a/entity/SupportTicket_entity/documentation.adoc b/entity/SupportTicket_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..19136880c827e6d4e2713a53ea5bd8421a5d86b3
--- /dev/null
+++ b/entity/SupportTicket_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= SupportTicket_entity
+
+Entity representing the SupportTickets and the related process
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/maindocuments/stateProcess.js b/entity/SupportTicket_entity/entityfields/maindocuments/stateProcess.js
index 5458354c9a9f66b8f11aa4e84682bbc666bea207..da31e521f917fc004c0014cf0d8ff444813aca7c 100644
--- a/entity/SupportTicket_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/SupportTicket_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("TASK", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("TASK", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
index fe0848af0b20c3fd92d98030779b011fbb42e11f..01cc59b4278534bee4115ffaf2c41394bdc98bd0 100644
--- a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
@@ -26,7 +26,7 @@ if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.
                                                .andPrepareVars("TASKLINK.OBJECT_TYPE", "$param.ObjectId_param");
 
                                                             // TODO: more performant way than IN. Maybe a join?
-    cond.and(db.translateStatement(taskLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
+    cond.and(SqlUtils.translateStatementWithQuotes(taskLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
 }
 
 if (loadNothing) 
@@ -35,7 +35,6 @@ if (loadNothing)
 }
 else
 {
-    //TODO: use a preparedCondition when available #1030812 #1034026
-    var resCond = db.translateCondition(cond.build("1=1"));
-    result.string(resCond);
+    //TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+    result.string(cond.translate("1=1"));
 }
\ No newline at end of file
diff --git a/entity/TaskLink_entity/TaskLink_entity.aod b/entity/TaskLink_entity/TaskLink_entity.aod
index 7eaef2f0d25a43c6306dc369095485d36221ada2..ca568e491d56a0f72f4f8f7c95169e8091145740 100644
--- a/entity/TaskLink_entity/TaskLink_entity.aod
+++ b/entity/TaskLink_entity/TaskLink_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>TaskLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/TaskLink_entity/documentation.adoc</documentation>
   <title>Connection</title>
   <titlePlural>Connections</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/TaskLink_entity/documentation.adoc b/entity/TaskLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..637ce2d7b0552186a516af5951299ae00e02bab4
--- /dev/null
+++ b/entity/TaskLink_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= TaskLink_entity
+
+Takes care of linking a task to another module
\ No newline at end of file
diff --git a/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js b/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
index 999bbab7e03925acba9c128902830a9fb5b95f3e..4e718f44637410bf704964b8fb0de5ef11f7ea05 100644
--- a/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,5 @@ import("Sql_lib");
 var cond = SqlCondition.begin()
                        .andPrepareVars("TASKLINK.TASK_ID", "$param.TaskId_param");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 0")));
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(cond.translate("1 = 0"));
\ No newline at end of file
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 701cceee3729ed3762d8666867f38c0de2365dcc..cb1f5a06cb8c3d36208cd4abc017bf246be42443 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -377,6 +377,7 @@
       <name>PRIORITY_ICON</name>
       <colorProcess>%aditoprj%/entity/Task_entity/entityfields/priority_icon/colorProcess.js</colorProcess>
       <contentType>IMAGE</contentType>
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Task_entity/entityfields/priority_icon/valueProcess.js</valueProcess>
     </entityField>
     <entityConsumer>
diff --git a/entity/Task_entity/documentation.adoc b/entity/Task_entity/documentation.adoc
index cdbad20ffc5a74d460d1420118fe5e12358e6a14..5da37fa7a44ccb07cf5e434d386576854fba9436 100644
--- a/entity/Task_entity/documentation.adoc
+++ b/entity/Task_entity/documentation.adoc
@@ -1 +1,3 @@
+= Task_entity
+
 CAUTION: Do not confuse these tasks with calendar-tasks(=todos). The context datamodel `Task` is not syncable to a groupware system.
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/maindocuments/stateProcess.js b/entity/Task_entity/entityfields/maindocuments/stateProcess.js
index 788c43bfb9e51fb5bcf1c53dde9d810595835cf3..8eb39f3ffeefbb9fdeea4d59a7704595f583af43 100644
--- a/entity/Task_entity/entityfields/maindocuments/stateProcess.js
+++ b/entity/Task_entity/entityfields/maindocuments/stateProcess.js
@@ -4,7 +4,7 @@ import("system.vars");
 import("system.neon");
 import("Sql_lib");
 
-if (0 == db.getBinaryCount("TASK", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getSystemAlias(), "MAINDOCUMENT"))
+if (0 == db.getBinaryCount("TASK", "DOCUMENT", vars.get("$sys.uid"), SqlUtils.getBinariesAlias(), "MAINDOCUMENT"))
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
diff --git a/entity/Task_entity/entityfields/protectionlevel/valueProcess.js b/entity/Task_entity/entityfields/protectionlevel/valueProcess.js
index 2080ca4fd3985740c4dab03d53fab5fa48203732..06be75dc391630efc92dffbff413d7b9fa2100ab 100644
--- a/entity/Task_entity/entityfields/protectionlevel/valueProcess.js
+++ b/entity/Task_entity/entityfields/protectionlevel/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 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");
\ No newline at end of file
diff --git a/entity/Task_entity/grantDeleteProcess.js b/entity/Task_entity/grantDeleteProcess.js
index 33915f18594e33e4aa413f9e737dd36158c312f3..091371f74225852c84eefb8c0e43a051a514a9f4 100644
--- a/entity/Task_entity/grantDeleteProcess.js
+++ b/entity/Task_entity/grantDeleteProcess.js
@@ -2,4 +2,5 @@ import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("TASK", null, vars.get("$field.TASKID")));
\ No newline at end of file
+// TODO: Commented because of performance problems: in Filter view this Process is called for every row. Waiting for bugfix
+//result.string(!DocumentUtil.hasDocuments("TASK", null, vars.get("$field.TASKID")));
\ No newline at end of file
diff --git a/entity/Task_entity/recordcontainers/db/conditionProcess.js b/entity/Task_entity/recordcontainers/db/conditionProcess.js
index 7b2cb50176cb704458f0ab6d943e63e67b6c71da..d19dececad6cf1fa2361aa88a1622782fc7fc523 100644
--- a/entity/Task_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Task_entity/recordcontainers/db/conditionProcess.js
@@ -24,7 +24,7 @@ if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.
                                                .andPrepareVars("TASKLINK.OBJECT_TYPE", "$param.ObjectId_param");
 
                                                             // TODO: more performant way than IN. Maybe a join?
-    cond.and(db.translateStatement(activityLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
+    cond.and(SqlUtils.translateStatementWithQuotes(activityLinkCond.buildSql("TASK.TASKID in (select TASKLINK.TASK_ID from TASKLINK", "1=2", ")")))
 }
 
 if (loadNothing)
@@ -33,7 +33,7 @@ if (loadNothing)
 }
 else
 {
-    //TODO: use a preparedCondition when available #1030812 #1034026
-    var resCond = db.translateCondition(cond.build("1=1"));
+    //TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+    var resCond = cond.translate("1=1");
     result.string(resCond);
 }
\ No newline at end of file
diff --git a/entity/Timetracking_entity/Timetracking_entity.aod b/entity/Timetracking_entity/Timetracking_entity.aod
index f2aee77b56396053d2d2eed051f4b9464ee3fe89..a54a326468576a48d18fb534e20a91024affcbd9 100644
--- a/entity/Timetracking_entity/Timetracking_entity.aod
+++ b/entity/Timetracking_entity/Timetracking_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>Timetracking_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/Timetracking_entity/documentation.adoc</documentation>
   <title>Timetracking</title>
   <titlePlural>Timetracking entries</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/Timetracking_entity/documentation.adoc b/entity/Timetracking_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f92935dd858d4771c557ac3ba469b503707183d6
--- /dev/null
+++ b/entity/Timetracking_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= Timetracking_entity
+
+Make time bookings and display them in any modules.
+Current use in the sales project.
\ No newline at end of file
diff --git a/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js b/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
index 738211bd92c9b8d50cdbc73e18ce356650219cc5..79f47c2f3e18c79390f619a1458eedcd473da7f8 100644
--- a/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
@@ -3,8 +3,8 @@ import("system.db");
 import("system.result");
 import("Sql_lib");
 
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(SqlCondition.begin()
+//TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
+result.string(SqlCondition.begin()
             .andPrepareVars("TIMETRACKING.OBJECT_ID", "$param.ObjectId_param")
             .andPrepareVars("TIMETRACKING.ROW_ID", "$param.RowId_param")
-            .build("1 = 2")));
\ No newline at end of file
+            .translate("1 = 2"));
\ No newline at end of file
diff --git a/entity/TurnoverTree_entity/TurnoverTree_entity.aod b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
index a7a5c0bbd16f8741b812b8b823cd25e5115bc543..4ab018adaccd82ea14d23f7d134ee7ca3496b3e3 100644
--- a/entity/TurnoverTree_entity/TurnoverTree_entity.aod
+++ b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>TurnoverTree_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/TurnoverTree_entity/documentation.adoc</documentation>
   <title>Tree</title>
   <iconId>NEON:LOGO</iconId>
   <recordContainer>jdito</recordContainer>
@@ -55,6 +56,7 @@
     </entityParameter>
     <entityProvider>
       <name>FilteredTurnovers</name>
+      <documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>0ea4ad47-985b-4a9c-81d8-946be324ae04</name>
diff --git a/entity/TurnoverTree_entity/documentation.adoc b/entity/TurnoverTree_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..50bc8a67a562c087cfe8b804fa1a42c17c118dfd
--- /dev/null
+++ b/entity/TurnoverTree_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= TurnoverTree_entity
+
+This entity provides information to display the Turnover via tree.
\ No newline at end of file
diff --git a/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc b/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..faf662afed01df5e51efc187149a4d682721d5e0
--- /dev/null
+++ b/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc
@@ -0,0 +1,3 @@
+= Turnover_entity - FilteredTurnovers
+
+Provides the data with an additional filter for turnover
\ No newline at end of file
diff --git a/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js b/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js
index d12d20da8e7b6d59c27b87c298a673f940788fe6..3493235775d5b1183b589f1d210dac6c5ff5f100 100644
--- a/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js
@@ -8,6 +8,19 @@ import("KeywordRegistry_basic");
 import("Keyword_lib");
 import("system.translate");
 
+/**
+ * This content process is similar to the Turnover_entity content process.
+ * It is modified for the tree table. This means
+ *  - months with no forecast or turnover are not added explicitely
+ *  - the _addCount function adds the layerIndex to the countData, which is used...
+ *  - ... to sort the table so that all parents are added before the childs (as the treetable needs it in this order)
+ *  - the sort function also sorts the data by year, month and productgroup name (using TreeUtils.treeOrderBy)
+ *  - the _addCount is modified specially for THIS tree. 
+ *    TODO: make more generic and use for both: the tree and the chart
+ *    
+ * See Turnover_entity content process for more documentation
+ */
+
 var turnoverCategory = translate.text('Turnover');
 var forecastCategory = translate.text('Forecast');
 
@@ -41,15 +54,12 @@ var columns = {
     groupcodeName: 8
 };
 
-// combine both data sources
-
-
 var treeData = [];
 var countData = {};
 
 turnover.forEach(function(row) 
 {    
-    var monthDate = new Date(row[columns.year], row[columns.month]-1);
+    var monthDate = new Date(row[columns.year], row[columns.month]);
     monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
     _addCount([row[columns.year], [row[columns.month], monthDate], [row[columns.groupcodeId], row[columns.groupcodeName]]], row[columns.type], row[columns.year], row[columns.month],
         MoneyUtils.getGross(
diff --git a/entity/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod
index 5917a75329edd0c5b6b362855b5ecc01f57b20de..613cc822c05cfb5d3c78815b4f95a654cafa6dd4 100644
--- a/entity/Turnover_entity/Turnover_entity.aod
+++ b/entity/Turnover_entity/Turnover_entity.aod
@@ -53,6 +53,7 @@
     </entityParameter>
     <entityProvider>
       <name>FilteredTurnovers</name>
+      <documentation>%aditoprj%/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name>
diff --git a/entity/Turnover_entity/documentation.adoc b/entity/Turnover_entity/documentation.adoc
index cfd100705032ff392213ed40451a66a62c2e5301..ec1b621a8fee13d649b12d91f26d920dd2fdf2ba 100644
--- a/entity/Turnover_entity/documentation.adoc
+++ b/entity/Turnover_entity/documentation.adoc
@@ -1,3 +1,6 @@
-== Turnover ==
+= Turnover_entity
 
-This entity provides charts to display the Turnover.
\ No newline at end of file
+This entity provides charts to display the Turnover.
+This chart can show any data in a cumulative way:
+ * It loads the most specific data (e.g. Productgroups) and calculates the layers above (e.g. Productgroups -> Months -> years)
+ * And then it shows the most top layer (years) at the top. If you click on it, it drills down to the more specific layer (Months / Productgroups)
\ No newline at end of file
diff --git a/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc b/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..faf662afed01df5e51efc187149a4d682721d5e0
--- /dev/null
+++ b/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc
@@ -0,0 +1,3 @@
+= Turnover_entity - FilteredTurnovers
+
+Provides the data with an additional filter for turnover
\ No newline at end of file
diff --git a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
index f8be0738cc3f1f21620f6de50751beac38a60d34..bd20eceda69bc4ed288c1090ba77ee4918831b57 100644
--- a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
@@ -7,6 +7,26 @@ import("KeywordRegistry_basic");
 import("Keyword_lib");
 import("system.translate");
 
+/**
+ * Documentation:
+ * This chart can show any data in a cumulative way:
+ * It loads the most specific data (e.g. Productgroups) and calculates the layers above (e.g. Productgroups -> Months -> years)
+ * And then it shows the most top layer (years) at the top. If you click on it, it drills down to the more specific layer (Months / Productgroups)
+ * 
+ * Technic:
+ * 1. Loading data
+ *    The data is loaded via selects in the TurnoverUtil. (You may change this in your porjects to your liking)
+ *    The select has to provide at least the following fields:
+ *    - Type (e.g. "Forecast" / "Turnover") this will split the data into different groups which are displayed ina a seperate color (connected to the chart viewtemplate as "Category"
+ *    - For each layer an ID (e.g. for the years layer a year-number, for the Productgroups the productgroup keyid,...)
+ *    - Optionally: if the displayvalue should be different: a display value for the id. 
+ *      The X-axis will display either the ID or the disply value
+ *    - The Value (used as Y-Value) which should be a number
+ *    
+ *  ... (see next comment block)
+ */
+
+
 var turnoverCategory = translate.text('Turnover');
 var forecastCategory = translate.text('Forecast');
 
@@ -21,6 +41,7 @@ var salesprojectId = vars.exists("$param.SalesprojectId_param") && vars.get("$pa
 
 var data = TurnoverUtil.getTurnoverAndForecastData(maxYear, yearCountToShow, showForecast, showTurnover, salesprojectId);
 
+// this object is for better code with readable names to access the data-fields
 var columns = {
     type: 0,
     year: 1,
@@ -37,13 +58,22 @@ var chartData = [];
 var countData = {}
 
 var monthDate;
-    
-// add all months for all years
+/**
+ * 2. Special treatment for some layers
+ * Some data needs special treatment. You may ommit these if you don't need it.
+ *  - As there should each month of a year be displayed, this for loops add empty (0.0) datasets for each month.
+ *    (note that it is done for each month to set it initally to 0.0)
+ *    
+ *  NOTE: the _addCount function will be explaned later
+ *  
+ *  ...
+ */
 for (let y = minYear; y <= maxYear; y++)
 {
     for (let m = 0; m < 12; m++) 
     {
-        monthDate = new Date(y, m-1);
+        // load the display value for the months
+        monthDate = new Date(y, m);
         monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
         
         if (showForecast)
@@ -54,8 +84,20 @@ for (let y = minYear; y <= maxYear; y++)
     }
 }
 
+/**
+ * 3. iterate through all data and add it to the chart
+ *  - this is done via _addCount-calls
+ *  - Note that for turnover MoneyUtils.getGross is called. This is needed because the raw data does provides vat, price, quantity and discount but not the final gross-price
+ *    You may ommit this if it is not needed by your project
+ * 
+ * 
+ * NOTE: the _addCount function will be explaned later
+ *  
+ *  ...
+ */
 data.forEach(function(row) 
 {    
+    // load the display value for the months
     monthDate = new Date(row[columns.year], row[columns.month]-1);
     monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
     
@@ -75,50 +117,92 @@ data.forEach(function(row)
     }
 });
 
+/**
+ * 4. iterate through the final counts - generate chart
+ *  - this is done via simple push to the final chartData
+ */
 for (let key in countData) {
     var countDataSet = countData[key];
     chartData.push([key, countDataSet.parent, countDataSet.category, countDataSet.x, countDataSet.count]);
 }
 
+// return the final chart
 result.object(chartData);
 
 /**
- * add the counts to countData for the given key and value
+ * 5. _addCount
+ *  - It counts the final values for each layer. So if you put in: (simplified)
+ *  [year1, month5, product10, 50.8]
+ *  it counts +50.8 for each layer:
+ *  year1; += 50.8
+ *  year1;month5; += 50.8
+ *  year1;month5;product10; += 50.8
+ *  
+ *  This values are all stored in the "countData" object and the keys of it are later used as UID.
+ *  The Keys just consist of the concatenated id's mentioned in 1.
+ *  
+ *  You can provide any count of keys so if you need another layer, just add it to the data (1.) and add the keyid (or [keyid, keydisplayvalue]) to the _addCount-calls appended to the array provided as first parameter
+ *  
  * @param {Array} pKeys an array containing all keys for this value. If the x-value for one key is different from the key-value: add an array [key, value] instead of only the key
  *                      the first key is the Category
+ *                      e.g.
+ *                      [ 
+ *                          category,
+ *                          year,
+ *                          [ 
+ *                             month(number),
+ *                             monthName(displayValue)
+ *                          ],
+ *                          [ 
+ *                             productGroupcodeId,
+ *                             productGroupcodeName(displayValue)
+ *                          ]
+ *                      ]
+ * This will lead to 3 layers: year -> month -> productGroup
+ *                      
  * @param {float} pValue the value to display
  */
 function _addCount(pKeys, pValue) {
     var key = "";
     
+    // iterate through all keys (e.g. through each layer) and count for each of them seperately
     for (let i = 0; i < pKeys.length; i++) {
         let keyId;
         let keyName;
         
+        // if the key type is not "object" it is a string ("object" means Array of ["id", "displayValue"], "string" means only "id"
         if (typeof pKeys[i] != "object")
         {
+            // add key as id and display value
             keyId = pKeys[i];
             keyName = pKeys[i];
         }
-        else // handle array: first is id seccond is name for X-value
+        else 
         {
+            // handle array: first is id seccond is name for X-value
             keyId = pKeys[i][0];
             keyName = pKeys[i][1];
         }
         var parent = key;
+        // if we are first or second: we are category or the top layer -> we have no parent
         if (i < 2)
         {
             parent = ""
         }
-
+        
+        // concatenate the previous (parent) key with the new one to get a new unique id
         key += ";" + keyId;
+        // if we are not category
         if (i > 0)
         {
+            // add the data to the count-object
             if (countData[key] == undefined)
             {
+                // if the key was not added before create it with initial value 0.0
                 countData[key] = {parent: parent, count: 0.0, category: pKeys[0], x: keyName}; // keys[0] is the category
             }
-
+            
+            // count
             countData[key].count += parseFloat(pValue);
         }
     }
diff --git a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
index fad730eb5633e1628ea7c992a6784b77f5ff1fc1..84847a8cf57d331ab91fc43143ff8d3a10604286 100644
--- a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
+++ b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>UniversalFileProcessor_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/UniversalFileProcessor_entity/documentation.adoc</documentation>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
diff --git a/entity/UniversalFileProcessor_entity/documentation.adoc b/entity/UniversalFileProcessor_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..36f710f5f0505fda6a92e01d4edeccd62367f29c
--- /dev/null
+++ b/entity/UniversalFileProcessor_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= UniversalFileProcessor_entity
+
+Performs actions for drag and drop. Example: dashlet for unlinked mails.
+This entity does not have a record container
\ No newline at end of file
diff --git a/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js b/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
index b2db244c25ca2825fed534f0e654f38842b3c929..53fe713f00a837c1931303dc011f49a4af4ee17c 100644
--- a/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
+++ b/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
@@ -20,6 +20,7 @@ var status = {
 
 for (var i = 0, l = files.length; i < l; i++) 
 {
+    vars.set("$field.INFO", translate.withArguments("processing %0/%1", [i.toString(), l.toString()]) + " . . .");
     switch (files[i].mimeType)
     {
         case "application/octet-stream"://.msg-files will not get any mimetype from the browser so let's use 
@@ -51,7 +52,7 @@ if (status.activitiesCreated > 0 || status.unlinkedMailsCreated > 0 || status.ot
 
 var messages = _getMessages(status);
 if (messages.length)
-    vars.set("$field.INFO", messages.join(", "));
+    vars.set("$field.INFO", translate.withArguments("processed %0/%1:", [i.toString(), l.toString()]) + "\n" + messages.join(", "));
 
 function _getMailObj(pDroppedFile)
 {
diff --git a/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod
index e749b7a469ea1c59b1eb16dd07699dcbd560acaf..c6c4c213d4e80e5b18f8d826aa94c8e88dd29d2a 100644
--- a/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod
+++ b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>UnlinkedMailMappingLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/UnlinkedMailMappingLink_entity/documentation.adoc</documentation>
   <title>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</title>
   <titlePlural>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</titlePlural>
   <recordContainer>jdito</recordContainer>
@@ -55,6 +56,7 @@
       <name>jdito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
       <contentProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess>
       <onInsert>%aditoprj%/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js</onInsert>
       <recordFieldMappings>
         <jDitoRecordFieldMapping>
diff --git a/entity/UnlinkedMailMappingLink_entity/documentation.adoc b/entity/UnlinkedMailMappingLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..43ef8cb2b222f95b3047bdb925d9f8068308f322
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/documentation.adoc
@@ -0,0 +1,7 @@
+= UnlinkedMailMappingLink_entity
+
+The purpose of this whole entity is to be a dummy datamodel that allows the user to provide some information.
+That's the reason why this entity has a dummy-jdito-record container that does nothing. 
+It does not load any "real" data and does not execute anything within the insert/update/delete progress.
+
+Currently this can only be solved with help of a dummy entity like this one here.
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js
index cfd1bf845e20edbe7cc993e39fec6fa9837b72c0..1272eb14ad40f65819e0937b94eeedbb7673634e 100644
--- a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js
@@ -1,11 +1,14 @@
-import("IncomingEmailExecutor_lib");
-import("system.mail");
-import("system.util");
-import("system.db");
 import("system.vars");
 import("system.result");
 
-var mailObject = null;
 var res = [];
+var idvalues = vars.get("$local.idvalues");
+if (idvalues)
+{
+    for (var i = 0, l = idvalues.length; i < l; i++) 
+    {
+        res.push([idvalues[i], "", ""]);
+    }
+}
 
 result.object(res);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js
index d162d2aeccc9d9c33903a3940185471e91d01b19..9e1560a292a218d418788217d794c18114d11a7f 100644
--- a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js
@@ -1,2 +1,9 @@
-/*nothing happens here, everything is done within the UnlinkedMailMappingWrapper
- --do not remove this comment otherwhile the kernel will detect that this process is empty and throws an error--*/
\ No newline at end of file
+import("system.datetime");
+
+/* In this process here basically nothing happens because everything is done within the UnlinkedMailMappingWrapper.
+ * To make the UnlinkedMailMappingLink_entity NOT read only we've to specify some code (comments excluded). This seems (and IS) odd but it's currenty
+ * the only way to do the job
+ * If you wan't more information about the entity and why it exists like this: See the documentation of the entity.
+ * 
+ * Tl;dr; do not remove the following line: */
+datetime.date();
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/rowCountProcess.js b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/rowCountProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9358b57687a079539606124e88b74f15c7e3ac72
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/rowCountProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(0);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
index d2162015a96e47ffa3f5f2f12430233ee1a4d881..b11446d9a0ca3f0ff925623f1a2368504a63425e 100644
--- a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
+++ b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>UnlinkedMailMappingWrapper_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/documentation.adoc</documentation>
   <title>Link unlinked e-mail</title>
   <recordContainer>dummyJdito</recordContainer>
   <entityFields>
@@ -46,6 +47,7 @@
     </entityConsumer>
     <entityConsumer>
       <name>UnlinkedMailMappingLinks</name>
+      <documentation>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/documentation.adoc</documentation>
       <dependency>
         <name>dependency</name>
         <entityName>UnlinkedMailMappingLink_entity</entityName>
diff --git a/entity/UnlinkedMailMappingWrapper_entity/documentation.adoc b/entity/UnlinkedMailMappingWrapper_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8559ac9a3d3510fee097ccf7ae20ef2a3d086328
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= UnlinkedMailMappingWrapper_entity
+
+For manual linking of an unlinked mail
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/documentation.adoc b/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..47f9f809306602313ce110768864b0770784c334
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/documentation.adoc
@@ -0,0 +1,2 @@
+In the target entity basically nothing happens. It's only for configuring the creation of the activity.
+Within this entity (the UnlinkedMailMappingWrapper_entity) the data of the consumer is read and processed.
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js
index 1c866cce85e6ee96fb86a86ef55ea0b0503ba232..42654e03c0f48ffa67cc488dcada55d67653f704 100644
--- a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js
+++ b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js
@@ -33,9 +33,10 @@ if (changedRows.length > 0)
     var loadingConfig = entities.createConfigForLoadingRows().entity("AnyContact_entity")
                                                              .uids(contactIds)
                                                              .fields(["CONTACTID", "ORGANISATION_ID", "PERSON_ID", "STANDARD_EMAIL_COMMUNICATION"]);
+    //TODO: ignore grants when available since this is only for techincal decisions (like: does a standard-comm exist?)
     var contactRows = entities.getRows(loadingConfig);
-    //decide what to do with the data
     
+    //decide what to do with the data
     for (var i = 0, l = contactRows.length; i < l; i++) 
     {
         //first create a link
@@ -59,7 +60,7 @@ var mailObj = mail.parseRFC(vars.get("$param.MailAsText_param"));
 var unlinkedMailId = vars.get("$param.UnlinkedMailId_param");
 
 var incomingMailExec = new IncomingEmailExecutor(mailObj);
-incomingMailExec.setActivityEmployeeContactId(EmployeeUtils.getCurrentContactId());
+incomingMailExec.setActivityEmployeeContact(vars.get("$field.RESPONSIBLE_ID"));//TODO: language!
 var activityRes = incomingMailExec.createActivity(activityLinks);
 incomingMailExec.deleteUnlinkedMail(unlinkedMailId);
 
diff --git a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
index b302dcc9e402e4a3aee51f032a65db4ae2ecc5dd..86b8240c8943eed279bf998b49ceb690ba6762c7 100644
--- a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
+++ b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.11" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.11">
   <name>UnlinkedMail_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/UnlinkedMail_entity/documentation.adoc</documentation>
   <title>Unlinked e-mail</title>
   <grantCreate v="false" />
   <grantUpdate v="false" />
@@ -44,7 +45,7 @@
         <entityActionField>
           <name>DownloadMail_action</name>
           <title>Download Mail</title>
-          <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/downloadmail_actiongroup/children/downloadmail_action/onActionProcess.js</onActionProcess>
+          <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/downloadmail_action/onActionProcess.js</onActionProcess>
           <isSelectionAction v="true" />
           <iconId>VAADIN:DOWNLOAD_ALT</iconId>
           <tooltip>Download e-mail</tooltip>
diff --git a/entity/UnlinkedMail_entity/documentation.adoc b/entity/UnlinkedMail_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..83e8716e7258d5bae6e80efca46dba9a61c4ffd1
--- /dev/null
+++ b/entity/UnlinkedMail_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= UnlinkedMail_entity
+
+Entity for displaying and managing unlinked mails. This is also provided as Dashlet
\ No newline at end of file
diff --git a/entity/UnlinkedMail_entity/entityfields/downloadmail_actiongroup/children/downloadmail_action/onActionProcess.js b/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/downloadmail_action/onActionProcess.js
similarity index 100%
rename from entity/UnlinkedMail_entity/entityfields/downloadmail_actiongroup/children/downloadmail_action/onActionProcess.js
rename to entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/downloadmail_action/onActionProcess.js
diff --git a/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js b/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
index 38238664039762ee14eb60459947c46d3e12dd0c..773f204fd3e645dfc9e94e7e5b3f3bf3cdfd05a2 100644
--- a/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
+++ b/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
@@ -13,7 +13,7 @@ if (incomingMailExec.isUnlinkable())
 }
 else
 {
-    incomingMailExec.setActivityEmployeeContactId(EmployeeUtils.getCurrentContactId());
+    incomingMailExec.setActivityEmployeeContact(EmployeeUtils.getCurrentContactId());
     incomingMailExec.createActivity();
     incomingMailExec.deleteUnlinkedMail(vars.get("$sys.uid"));
     //refresh is needed for the dashboard: other elements are refreshed and display for example a new activity in the filter view while the own record (=ulinked mail) is removed
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 1565ea777ebbd43365a113191ecc584024642a25..b3b878750dbea46b71c2c3e378ca684b76bbc45d 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -162,15 +162,9 @@
     <entry>
       <key>Switzerland</key>
     </entry>
-    <entry>
-      <key>Internal (2)</key>
-    </entry>
     <entry>
       <key>Company Addresses</key>
     </entry>
-    <entry>
-      <key>yyyyMMdd</key>
-    </entry>
     <entry>
       <key>standard address</key>
     </entry>
@@ -831,9 +825,6 @@
     <entry>
       <key>Total</key>
     </entry>
-    <entry>
-      <key>yearly series not specified</key>
-    </entry>
     <entry>
       <key>no standard email office</key>
     </entry>
@@ -849,15 +840,9 @@
     <entry>
       <key>Deliveryspecification</key>
     </entry>
-    <entry>
-      <key>Ignore daily series</key>
-    </entry>
     <entry>
       <key>Tentative</key>
     </entry>
-    <entry>
-      <key>Ignore series</key>
-    </entry>
     <entry>
       <key>Plus Salestax</key>
     </entry>
@@ -3690,9 +3675,6 @@
     <entry>
       <key>No risk</key>
     </entry>
-    <entry>
-      <key>Urlaubsprüfung durch</key>
-    </entry>
     <entry>
       <key>Acquisition</key>
     </entry>
@@ -4119,9 +4101,6 @@
     <entry>
       <key>Next steps</key>
     </entry>
-    <entry>
-      <key>Urlaubsgenehmigung durch</key>
-    </entry>
     <entry>
       <key>Assessment</key>
     </entry>
@@ -4386,21 +4365,12 @@
     <entry>
       <key>Data Privacy</key>
     </entry>
-    <entry>
-      <key>No data has been anonymized.</key>
-    </entry>
     <entry>
       <key>Anonymization</key>
     </entry>
-    <entry>
-      <key>The following data has been anonymised: %0</key>
-    </entry>
     <entry>
       <key>Names</key>
     </entry>
-    <entry>
-      <key>DSGVO anonymisation</key>
-    </entry>
     <entry>
       <key>contract of sale</key>
     </entry>
@@ -4413,9 +4383,6 @@
     <entry>
       <key>Information Report</key>
     </entry>
-    <entry>
-      <key>other personal data</key>
-    </entry>
     <entry>
       <key>Disclosure Report</key>
     </entry>
@@ -4854,51 +4821,21 @@
     <entry>
       <key>Possibility to search for terms</key>
     </entry>
-    <entry>
-      <key>1</key>
-    </entry>
-    <entry>
-      <key>2</key>
-    </entry>
-    <entry>
-      <key>versendet</key>
-    </entry>
-    <entry>
-      <key>Netto</key>
-    </entry>
-    <entry>
-      <key>Währung</key>
-    </entry>
     <entry>
       <key>Transfer to Invoice</key>
     </entry>
     <entry>
       <key>Pay due date</key>
     </entry>
-    <entry>
-      <key>Invoice</key>
-    </entry>
     <entry>
       <key>Payment address</key>
     </entry>
-    <entry>
-      <key>Receipt Footer Text</key>
-    </entry>
     <entry>
       <key>Texts</key>
     </entry>
     <entry>
       <key>keine Standard-E-Mail Büro vorhanden !</key>
     </entry>
-    <entry>
-      <key>Delivery note</key>
-    </entry>
-    <entry>
-      <key>Belegdatum</key>
-    </entry>
-    <entry>
-      <key>Firma</key>
-    </entry>
     <entry>
       <key>Choose payment address</key>
     </entry>
@@ -4908,9 +4845,6 @@
     <entry>
       <key>Dunning level</key>
     </entry>
-    <entry>
-      <key>Order confirmation</key>
-    </entry>
     <entry>
       <key>Beleg</key>
     </entry>
@@ -4923,30 +4857,18 @@
     <entry>
       <key>Bitte einen Adressat in 'to' eintragen!</key>
     </entry>
-    <entry>
-      <key>Receipt Header Text</key>
-    </entry>
     <entry>
       <key>Dunning text</key>
     </entry>
     <entry>
       <key>Choose delivery address</key>
     </entry>
-    <entry>
-      <key>Cancellation</key>
-    </entry>
     <entry>
       <key>Links</key>
     </entry>
-    <entry>
-      <key>geprüft</key>
-    </entry>
     <entry>
       <key>Set dunning</key>
     </entry>
-    <entry>
-      <key>Beleg-Nr.</key>
-    </entry>
     <entry>
       <key>Cancel</key>
     </entry>
@@ -4956,9 +4878,6 @@
     <entry>
       <key>Set paid amount</key>
     </entry>
-    <entry>
-      <key>Belegliste</key>
-    </entry>
     <entry>
       <key>Pay date</key>
     </entry>
@@ -4968,18 +4887,12 @@
     <entry>
       <key>Dunning date</key>
     </entry>
-    <entry>
-      <key>Credit</key>
-    </entry>
     <entry>
       <key>Print order</key>
     </entry>
     <entry>
       <key>Create activities</key>
     </entry>
-    <entry>
-      <key>Adds the selection to a bulk mail</key>
-    </entry>
     <entry>
       <key>Order number</key>
     </entry>
@@ -4992,9 +4905,6 @@
     <entry>
       <key>Recipient status</key>
     </entry>
-    <entry>
-      <key>Adds the selection to a serial letter</key>
-    </entry>
     <entry>
       <key>Actions</key>
     </entry>
@@ -5025,9 +4935,6 @@
     <entry>
       <key>Due</key>
     </entry>
-    <entry>
-      <key>Testing contact</key>
-    </entry>
     <entry>
       <key>Recipient address</key>
     </entry>
@@ -5038,52 +4945,181 @@
       <key>Save settings</key>
     </entry>
     <entry>
-      <key>No calls</key>
+      <key>Only </key>
     </entry>
     <entry>
-      <key>No mails</key>
+      <key>Action '</key>
     </entry>
     <entry>
-      <key>No fax</key>
+      <key>No duplicates allowed: action '</key>
     </entry>
     <entry>
-      <key>No SMS</key>
+      <key>Empty actions are not allowed!</key>
     </entry>
     <entry>
-      <key>No letters</key>
+      <key>Download template</key>
     </entry>
     <entry>
-      <key>Only </key>
+      <key>Bulk mail \"%0\" sent</key>
+    </entry>
+    <entry>
+      <key>Entrydate (Year)</key>
+    </entry>
+    <entry>
+      <key>Attributes must be unique!</key>
+    </entry>
+    <entry>
+      <key>Open tasks</key>
+    </entry>
+    <entry>
+      <key>Appointment checkup</key>
+    </entry>
+    <entry>
+      <key>Appointment CheckUp</key>
+    </entry>
+    <entry>
+      <key>Permissions without actions are invalid!</key>
+    </entry>
+    <entry>
+      <key>This error should never appear - contact administrator (PermissionDetail_entity.PermissionAction.onValidation).</key>
+    </entry>
+    <entry>
+      <key>Empty actions are invalid!</key>
+    </entry>
+    <entry>
+      <key>Problem</key>
+    </entry>
+    <entry>
+      <key>%0 attachments:</key>
+    </entry>
+    <entry>
+      <key>%0 attachment:</key>
+    </entry>
+    <entry>
+      <key>Please select a documenttemplate or upload a new file.</key>
+    </entry>
+    <entry>
+      <key>processed %0/%1:</key>
+    </entry>
+    <entry>
+      <key>processing %0/%1</key>
+    </entry>
+    <entry>
+      <key>no attachments</key>
+    </entry>
+    <entry>
+      <key>Recipients: %0</key>
+    </entry>
+    <entry>
+      <key>Sender: %0</key>
+    </entry>
+    <entry>
+      <key>1</key>
+    </entry>
+    <entry>
+      <key>2</key>
     </entry>
     <entry>
       <key>Theme</key>
     </entry>
     <entry>
-      <key>Action '</key>
+      <key>Invoice</key>
     </entry>
     <entry>
-      <key>No duplicates allowed: action '</key>
+      <key>Receipt Footer Text</key>
     </entry>
     <entry>
-      <key>Empty actions are not allowed!</key>
+      <key>Delivery note</key>
     </entry>
     <entry>
-      <key>Download template</key>
+      <key>Order confirmation</key>
     </entry>
     <entry>
-      <key>Bulk mail \"%0\" sent</key>
+      <key>Email blocked</key>
     </entry>
     <entry>
-      <key>This error should never appear - contact administrator.</key>
+      <key>Email address does not exist</key>
     </entry>
     <entry>
-      <key>Entrydate (Year)</key>
+      <key>Receipt Header Text</key>
     </entry>
     <entry>
-      <key>Permissions without actions are not allowed!</key>
+      <key>Cancellation</key>
     </entry>
     <entry>
-      <key>Attributes must be unique!</key>
+      <key>Vacation examination by</key>
+    </entry>
+    <entry>
+      <key>Vacation approval by</key>
+    </entry>
+    <entry>
+      <key>Credit</key>
+    </entry>
+    <entry>
+      <key>Show tickets where I am editor</key>
+    </entry>
+    <entry>
+      <key>My tickets</key>
+    </entry>
+    <entry>
+      <key>Replacement name</key>
+    </entry>
+    <entry>
+      <key>The replacement name has to be unique.</key>
+    </entry>
+    <entry>
+      <key>Only .odt files are supported for bulkletters.</key>
+    </entry>
+    <entry>
+      <key>Preview</key>
+    </entry>
+    <entry>
+      <key>Action not supported</key>
+    </entry>
+    <entry>
+      <key>Wrong filetype for the current document template type and classification.</key>
+    </entry>
+    <entry>
+      <key>HTML template - Only for .html</key>
+    </entry>
+    <entry>
+      <key>Plaintext template - Only for .txt and .html</key>
+    </entry>
+    <entry>
+      <key>Use template attachments</key>
+    </entry>
+    <entry>
+      <key>My Turnover</key>
+    </entry>
+    <entry>
+      <key>My Forecast</key>
+    </entry>
+    <entry>
+      <key>Copy bulkmail</key>
+    </entry>
+    <entry>
+      <key>Count template attachments</key>
+    </entry>
+    <entry>
+      <key>Private persons</key>
+    </entry>
+    <entry>
+      <key>Private person</key>
+    </entry>
+    <entry>
+      <key>Displays the amounts of my personal forecast and the turnover I have already made</key>
+    </entry>
+    <entry>
+      <key>My Keyfigures</key>
+    </entry>
+    <entry>
+      <key>My Forecast and Turnover </key>
+    </entry>
+    <entry>
+      <key>Shows my Forecast and Turnover for the actual year</key>
+    </entry>
+    <entry>
+      <key>My Forecast and Turnover</key>
     </entry>
     <entry>
       <key>The combination of filter name and target entity is already in use</key>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 4bc8175b2d5b19fcd3378a1e3cad6c387ec2fd83..4084c713c771d52ff7d55bf6673c9b71494faf14 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -7,665 +7,609 @@
   <variant></variant>
   <keyValueMap>
     <entry>
-      <key>DSGVO Information</key>
-      <value>DSGVO Informationen</value>
-    </entry>
-    <entry>
-      <key>Recipient address</key>
-      <value>Empfängeradresse</value>
-    </entry>
-    <entry>
-      <key>Data Privacy</key>
-      <value>Datenschutz</value>
-    </entry>
-    <entry>
-      <key>No letters</key>
-      <value>Keine Briefe</value>
-    </entry>
-    <entry>
-      <key>No SMS</key>
-      <value>Keine SMS</value>
-    </entry>
-    <entry>
-      <key>Add the selection to a bulk mail</key>
-      <value>Fügt die Auswahl einer Serienmail hinzu</value>
-    </entry>
-    <entry>
-      <key>Testing</key>
-      <value>Testen</value>
-    </entry>
-    <entry>
-      <key>Number of activities</key>
-      <value>Anzahl Aktivitäten</value>
-    </entry>
-    <entry>
-      <key>Bulk mails</key>
-      <value>Serienmails</value>
-    </entry>
-    <entry>
-      <key>Copy Campaign</key>
-      <value>Kopiere Kampagne</value>
-    </entry>
-    <entry>
-      <key>No data has been anonymized.</key>
-      <value>Keine Daten wurden anonymisiert.</value>
-    </entry>
-    <entry>
-      <key>No fax</key>
-      <value>Kein Fax</value>
-    </entry>
-    <entry>
-      <key>Excreted can't be in the future</key>
-      <value>Ausgeschieden darf nicht in der Zukunft liegen</value>
-    </entry>
-    <entry>
-      <key>Anonymization</key>
-      <value>Anonymisierung</value>
-    </entry>
-    <entry>
-      <key>Turnover change</key>
-      <value>Entwicklung Umsatz</value>
-    </entry>
-    <entry>
-      <key>The following data has been anonymised: %0</key>
-      <value>Die folgenden Daten wurden anonymisiert: %0</value>
-    </entry>
-    <entry>
-      <key>Write bulk mail</key>
-      <value>Serienmail schreiben</value>
-    </entry>
-    <entry>
-      <key>MAX</key>
-      <value>maximal</value>
-    </entry>
-    <entry>
-      <key>No mails</key>
-      <value>Keine E-Mails</value>
-    </entry>
-    <entry>
-      <key>Create activities</key>
-      <value>Aktivitäten erstellen</value>
+      <key>Project management</key>
+      <value>Projektmanagement</value>
     </entry>
     <entry>
-      <key>No calls</key>
-      <value>Keine Anrufe</value>
+      <key>ARCHIVE</key>
+      <value>Archiviert</value>
     </entry>
     <entry>
-      <key>NONE</key>
-      <value>keine</value>
+      <key>Maximal</key>
     </entry>
     <entry>
-      <key>Recipient status</key>
+      <key>Sender address</key>
+      <value>Senderadresse</value>
     </entry>
     <entry>
-      <key>LOW</key>
-      <value>gering</value>
+      <key>Failed</key>
+      <value>Fehlgeschlagen</value>
     </entry>
     <entry>
-      <key>NORMAL</key>
-      <value>normal</value>
+      <key>Is being sent</key>
+      <value>Wird versendet</value>
     </entry>
     <entry>
-      <key>Add the selection to a serial letter</key>
-      <value>Fügt die Auswahl einem Serienbrief hinzu</value>
+      <key>User Administration</key>
+      <value>Benutzerverwaltung</value>
     </entry>
     <entry>
-      <key>HIGH</key>
-      <value>hoch</value>
+      <key>Restrictions</key>
+      <value>Einschränkungen</value>
     </entry>
     <entry>
-      <key>Update campaign step</key>
-      <value>Aktualisieren des Kampagnenschrittes</value>
+      <key>Notifications</key>
+      <value>Benachrichtigungen</value>
     </entry>
     <entry>
-      <key>Serial letters</key>
-      <value>Serienbriefe</value>
+      <key>Do you really want to delete this recurring appointment?</key>
+      <value>Wollen Sie wirklich die Serie löschen?</value>
     </entry>
     <entry>
-      <key>Categorization</key>
-      <value>Kategorisierung</value>
+      <key>Serial letter</key>
+      <value>Serienbrief</value>
     </entry>
     <entry>
-      <key>Should the mail be sent now?</key>
-      <value>Soll die Mail jetzt versendet werden?</value>
+      <key>Remove recipients with advertising ban</key>
+      <value>Empfänger mit Werbesperre entfernen</value>
     </entry>
     <entry>
-      <key>Names</key>
-      <value>Namen</value>
+      <key>Open admin view</key>
+      <value>Admin-Ansicht öffnen</value>
     </entry>
     <entry>
-      <key>DSGVO anonymisation</key>
-      <value>DSGVO Anonymisierung</value>
+      <key>Long string value</key>
+      <value>Langer String-Wert</value>
     </entry>
     <entry>
-      <key>The contact is already a recipient!</key>
-      <value>Der Kontakt ist bereits als Empfänger eingetragen!</value>
+      <key>Object selection</key>
+      <value>Objektauswahl</value>
     </entry>
     <entry>
-      <key>contract of sale</key>
-      <value>Kaufvertrag</value>
+      <key>Send</key>
+      <value>Senden</value>
     </entry>
     <entry>
-      <key>DataPrivacy Use</key>
-      <value>Nutzung</value>
+      <key>CONFIRMED</key>
+      <value>Gelesen</value>
     </entry>
     <entry>
-      <key>Show my campaigns</key>
-      <value>Meine Kampagnen anzeigen</value>
+      <key>Advertising bans</key>
+      <value>Werbesperren</value>
     </entry>
     <entry>
-      <key>consent</key>
-      <value>Zustimmung</value>
+      <key>Add to Campaign</key>
+      <value>Zu Kampagne hinzufügen</value>
     </entry>
     <entry>
-      <key>Information Report</key>
-      <value>Informationsbericht</value>
+      <key>Bulk mail</key>
+      <value>Serienmail</value>
     </entry>
     <entry>
-      <key>other personal data</key>
-      <value>andere persönliche Daten</value>
+      <key>Bulk mail \"%0\" was sent!</key>
+      <value>Serienmail \"%0\" wurde versendet!</value>
     </entry>
     <entry>
-      <key>The contact has an advertising ban for emails!</key>
-      <value>Der Kontakt hat ein Werbeverbot für E-Mails!</value>
+      <key>Company</key>
+      <value>Firma</value>
     </entry>
     <entry>
-      <key>Disclosure Report</key>
-      <value>Auskunftsbericht</value>
+      <key>SEEN</key>
+      <value>Neu</value>
     </entry>
     <entry>
-      <key>Forecasts</key>
+      <key>UNSEEN</key>
+      <value>Neu</value>
     </entry>
     <entry>
-      <key>Update data privacy information</key>
-      <value>Datenschutzinformationen aktualisieren</value>
+      <key>Advertising ban</key>
+      <value>Werbesperre</value>
     </entry>
     <entry>
-      <key>DataPrivacy Right</key>
-      <value>Datenschutzrecht</value>
+      <key>Permissions</key>
+      <value>Berechtigungen</value>
     </entry>
     <entry>
-      <key>The transfer of data to recipients located in a third country is based on the following guarantees:</key>
-      <value>Die Übermittlung von Daten an Empfänger in einem Drittland basiert auf folgenden Garantien:</value>
+      <key>${SQL_LIB_FIELD_WRONG_FORMAT} field: %0</key>
+      <value>Das Feld %0 hat ein falsches Format. Das Datenbankfeld muss wie "tablename.columnname" ("ORGANISATION.NAME") oder als Array mit Column-alias formatiert sein: ["ORGANISATION", "NAME", "myorgAlias"]</value>
     </entry>
     <entry>
-      <key>We save your data until </key>
-      <value>Wir speichern Ihre Daten bis </value>
+      <key>Attribute \"%0\" can't be used more than %1.</key>
+      <value>Eigenschaft \"%0\" darf maximal %1 verwendet werden.</value>
     </entry>
     <entry>
-      <key>On time</key>
-      <value>Pünktlich</value>
+      <key>Picture</key>
+      <value>Bild</value>
     </entry>
     <entry>
-      <key>For this report</key>
-      <value>Für diesen Bericht</value>
+      <key>New letter</key>
+      <value>Brief schreiben</value>
     </entry>
     <entry>
-      <key>SqlBuilder must contain a select clause!</key>
-      <value>SqlBuilder muss eine Select-Clause enthalten!</value>
+      <key>Delivery specification</key>
+      <value>Lieferbedingung</value>
     </entry>
     <entry>
-      <key>Inland</key>
-      <value>Inland</value>
+      <key>Office staff</key>
+      <value>Innendienst</value>
     </entry>
     <entry>
-      <key>The data is transmitted to the following recipients:</key>
-      <value>Die Daten werden an folgende Empfänger übertragen:</value>
+      <key>Recipient</key>
+      <value>Empfänger</value>
     </entry>
     <entry>
-      <key>SqlBuilder must be instanciated with 'new'</key>
-      <value>SqlBuilder muss mit 'new' instanziiert werden.</value>
+      <key>Overdue tasks</key>
+      <value>Überfällige Aufgaben</value>
     </entry>
     <entry>
-      <key>Balancing of interests</key>
-      <value>Interessenausgleich</value>
+      <key>Attribute \"%0\" has to be used at least %1.</key>
+      <value>Eigenschaft \"%0\" muss mindestens %1 verwendet werden.</value>
     </entry>
     <entry>
-      <key>SqlBuilder must contain a from clause!</key>
-      <value>SqlBuilder muss eine from-Clause enthalten!</value>
+      <key>Delete appointment</key>
+      <value>Termin löschen</value>
     </entry>
     <entry>
-      <key>None</key>
-      <value>Keine</value>
+      <key>Show tasks where I am editor</key>
+      <value>Zeigt Aufgaben an, in denen ich der Bearbeiter bin</value>
     </entry>
     <entry>
-      <key>Date of request</key>
-      <value>Datum der Anforderung</value>
+      <key>Confirm password</key>
+      <value>Passwort prüfen</value>
     </entry>
     <entry>
-      <key>Export CSV</key>
-      <value>CSV exportieren</value>
+      <key>Delete recurring appointment</key>
+      <value>Serie löschen</value>
     </entry>
     <entry>
-      <key>Not all data privacy fields for all private data is filled. Cannot create report.</key>
-      <value>Nicht alle Datenschutzfelder für alle privaten Daten werden ausgefüllt. Bericht kann nicht erstellt werden.</value>
+      <key>Human Resources</key>
+      <value>Personal</value>
     </entry>
     <entry>
-      <key>Birthday</key>
-      <value>Geburtstag</value>
+      <key>Single</key>
+      <value>Einzel</value>
     </entry>
     <entry>
-      <key>Extend - request count</key>
-      <value>Verlängert - Anfrageanzahl</value>
+      <key>ended (abandoned)</key>
+      <value>abgeschlossen (aufgegeben)</value>
     </entry>
     <entry>
-      <key>Transmission</key>
-      <value>Übermittlung</value>
+      <key>Permission</key>
+      <value>Berechtigung</value>
     </entry>
     <entry>
-      <key>You don't have permission for this view.</key>
-      <value>Sie haben keine Berechtigung für diese Ansicht.</value>
+      <key>Entrydate (Day)</key>
+      <value>Eingangsdatum (Tag)</value>
     </entry>
     <entry>
-      <key>Extend - complexity</key>
-      <value>Verlängert - Komplexität</value>
+      <key>still incorrect</key>
+      <value>weiterhin fehlerhaft</value>
     </entry>
     <entry>
-      <key>Advertising consent</key>
-      <value>Werbeeinwilligung</value>
+      <key>Priority</key>
+      <value>Priorität</value>
     </entry>
     <entry>
-      <key>We hereby comply with your request within the statutory period of one month.</key>
-      <value>Wir kommen Ihrer Aufforderung hiermit innerhalb der gesetzlichen Frist von einem Monat nach.</value>
+      <key>Salesproject phases</key>
+      <value>Vertriebsprojektphasen</value>
     </entry>
     <entry>
-      <key>%0 mails sent sucessfully, %1 mails failed. Process took %2 s.</key>
-      <value>%0 Mails erfolgreich gesendet, %1 Mails fehlgeschlagen. Der Prozess nahm %2 s. in Anspruch.</value>
+      <key>%0 new recipients will be added to the bulk mail.</key>
+      <value>Der Serienmail weden %0 neue Empfänger hinzugefügt.</value>
     </entry>
     <entry>
-      <key>Foreign country</key>
-      <value>Ausland</value>
+      <key>DSGVO Information</key>
+      <value>DSGVO Informationen</value>
     </entry>
     <entry>
-      <key>the high complexity of your application</key>
-      <value>die hohe Komplexität Ihrer Anwendung</value>
+      <key>Recipient address</key>
+      <value>Empfängeradresse</value>
     </entry>
     <entry>
-      <key>As stated in our letter of %0, we have made use of the possibility to extend the deadline to three months due to %1.</key>
-      <value>Wie in unserem Schreiben von %0 erwähnt, haben wir von der Möglichkeit Gebrauch gemacht, die Frist aufgrund von %1 auf drei Monate zu verlängern.</value>
+      <key>Write email</key>
+      <value>E-Mail schreiben</value>
     </entry>
     <entry>
-      <key>Deadline</key>
-      <value>Frist</value>
+      <key>Data Privacy</key>
+      <value>Datenschutz</value>
     </entry>
     <entry>
-      <key>Newsletter dispatch</key>
-      <value>Newsletterversand</value>
+      <key>Add the selection to a bulk mail</key>
+      <value>Fügt die Auswahl einer Serienmail hinzu</value>
     </entry>
     <entry>
-      <key>We received data from</key>
-      <value>Wir haben Daten erhalten von</value>
+      <key>Testing</key>
+      <value>Testen</value>
     </entry>
     <entry>
-      <key>the number of your applications</key>
-      <value>die Anzahl Ihrer Anwendungen</value>
+      <key>Number of activities</key>
+      <value>Anzahl Aktivitäten</value>
     </entry>
     <entry>
-      <key>Your changes may have an impact on the data privacy information (DSGVO).\n Please update these.</key>
-      <value>Ihre Änderungen können sich auf die Datenschutzinformationen (DSGVO) auswirken.\n Bitte aktualisieren Sie diese.</value>
+      <key>${ATTRIBUTE_VOID}</key>
+      <value>Tag</value>
     </entry>
     <entry>
-      <key>Export letter for selection</key>
-      <value>Brief für Auswahl exportieren</value>
+      <key>Bulk mails</key>
+      <value>Serienmails</value>
     </entry>
     <entry>
-      <key>External Datasource</key>
-      <value>Externe Datenquelle</value>
+      <key>Campaign Period</key>
+      <value>Kampagnen Laufzeit</value>
     </entry>
     <entry>
-      <key>Steps</key>
-      <value>Stufen</value>
+      <key>Copy Campaign</key>
+      <value>Kopiere Kampagne</value>
     </entry>
     <entry>
-      <key>Project management</key>
-      <value>Projektmanagement</value>
+      <key>Turnover</key>
+      <value>Umsatz</value>
     </entry>
     <entry>
-      <key>ARCHIVE</key>
-      <value>Archiviert</value>
+      <key>Excreted can't be in the future</key>
+      <value>Ausgeschieden darf nicht in der Zukunft liegen</value>
     </entry>
     <entry>
-      <key>Maximal</key>
+      <key>Discount %</key>
+      <value>Rabatt %</value>
     </entry>
     <entry>
-      <key>Sender address</key>
-      <value>Senderadresse</value>
+      <key>Open tasks</key>
+      <value>Offene Aufgaben</value>
     </entry>
     <entry>
-      <key>Failed</key>
-      <value>Fehlgeschlagen</value>
+      <key>My Forecast</key>
+      <value>Mein Forecast</value>
     </entry>
     <entry>
-      <key>Is being sent</key>
-      <value>Wird versendet</value>
+      <key>Anonymization</key>
+      <value>Anonymisierung</value>
     </entry>
     <entry>
-      <key>User Administration</key>
-      <value>Benutzerverwaltung</value>
+      <key>Turnover change</key>
+      <value>Entwicklung Umsatz</value>
     </entry>
     <entry>
-      <key>Restrictions</key>
-      <value>Einschränkungen</value>
+      <key>Write bulk mail</key>
+      <value>Serienmail schreiben</value>
     </entry>
     <entry>
-      <key>Notifications</key>
-      <value>Benachrichtigungen</value>
+      <key>MAX</key>
+      <value>maximal</value>
     </entry>
     <entry>
-      <key>Do you really want to delete this recurring appointment?</key>
-      <value>Wollen Sie wirklich die Serie löschen?</value>
+      <key>Create activities</key>
+      <value>Aktivitäten erstellen</value>
     </entry>
     <entry>
-      <key>Serial letter</key>
-      <value>Serienbrief</value>
+      <key>NONE</key>
+      <value>keine</value>
     </entry>
     <entry>
-      <key>Remove recipients with advertising ban</key>
-      <value>Empfänger mit Werbesperre entfernen</value>
+      <key>Recipient status</key>
     </entry>
     <entry>
-      <key>Open admin view</key>
-      <value>Admin-Ansicht öffnen</value>
+      <key>LOW</key>
+      <value>gering</value>
     </entry>
     <entry>
-      <key>Long string value</key>
-      <value>Langer String-Wert</value>
+      <key>My Turnover</key>
+      <value>Mein Umsatz</value>
     </entry>
     <entry>
-      <key>Object selection</key>
-      <value>Objektauswahl</value>
+      <key>NORMAL</key>
+      <value>normal</value>
     </entry>
     <entry>
-      <key>Send</key>
-      <value>Senden</value>
+      <key>${COUNT_PREPOSITION_MULTIPLE}</key>
+      <value>mal</value>
     </entry>
     <entry>
-      <key>CONFIRMED</key>
-      <value>Gelesen</value>
+      <key>Data privacy entries</key>
+      <value>Datenschutzeinträge</value>
     </entry>
     <entry>
-      <key>Advertising bans</key>
-      <value>Werbesperren</value>
+      <key>Email must be unique!</key>
+      <value>Die E-Mail-Adresse muss eindeutig sein!</value>
     </entry>
     <entry>
-      <key>Add to Campaign</key>
-      <value>Zu Kampagne hinzufügen</value>
+      <key>${COUNT_PREPOSITION_SINGLE}</key>
+      <value>mal</value>
     </entry>
     <entry>
-      <key>Bulk mail</key>
-      <value>Serienmail</value>
+      <key>E-Mail</key>
+      <value>E-Mail</value>
     </entry>
     <entry>
-      <key>Bulk mail \"%0\" was sent!</key>
-      <value>Serienmail \"%0\" wurde versendet!</value>
+      <key>Maximal Count</key>
+      <value>Maximale Anzahl</value>
     </entry>
     <entry>
-      <key>Company</key>
-      <value>Firma</value>
+      <key>Entrydate (Month)</key>
+      <value>Eingangsdatum (Monat)</value>
     </entry>
     <entry>
-      <key>SEEN</key>
-      <value>Neu</value>
+      <key>Usage</key>
+      <value>Verwendung</value>
     </entry>
     <entry>
-      <key>UNSEEN</key>
-      <value>Neu</value>
+      <key>Campaign status</key>
+      <value>Kampagnenstatus</value>
     </entry>
     <entry>
-      <key>Advertising ban</key>
-      <value>Werbesperre</value>
+      <key>Show all activities</key>
+      <value>Alle Aktivitäten anzeigen</value>
     </entry>
     <entry>
-      <key>Permissions</key>
-      <value>Berechtigungen</value>
+      <key>Add the selection to a serial letter</key>
+      <value>Fügt die Auswahl einem Serienbrief hinzu</value>
     </entry>
     <entry>
-      <key>${SQL_LIB_FIELD_WRONG_FORMAT} field: %0</key>
-      <value>Das Feld %0 hat ein falsches Format. Das Datenbankfeld muss wie "tablename.columnname" ("ORGANISATION.NAME") oder als Array mit Column-alias formatiert sein: ["ORGANISATION", "NAME", "myorgAlias"]</value>
+      <key>Add the selection to a campaign</key>
+      <value>Fügt die Auswahl zur Kampagne hinzu</value>
     </entry>
     <entry>
-      <key>Attribute \"%0\" can't be used more than %1.</key>
-      <value>Eigenschaft \"%0\" darf maximal %1 verwendet werden.</value>
+      <key>HIGH</key>
+      <value>hoch</value>
     </entry>
     <entry>
-      <key>Picture</key>
-      <value>Bild</value>
+      <key>${ADDRESS_STATE}</key>
+      <value>Staat</value>
     </entry>
     <entry>
-      <key>New letter</key>
-      <value>Brief schreiben</value>
+      <key>Update campaign step</key>
+      <value>Aktualisieren des Kampagnenschrittes</value>
     </entry>
     <entry>
-      <key>Delivery specification</key>
-      <value>Lieferbedingung</value>
+      <key>Serial letters</key>
+      <value>Serienbriefe</value>
     </entry>
     <entry>
-      <key>Office staff</key>
-      <value>Innendienst</value>
+      <key>Categorization</key>
+      <value>Kategorisierung</value>
     </entry>
     <entry>
-      <key>Recipient</key>
-      <value>Empfänger</value>
+      <key>Should the mail be sent now?</key>
+      <value>Soll die Mail jetzt versendet werden?</value>
     </entry>
     <entry>
-      <key>Overdue tasks</key>
-      <value>Überfällige Aufgaben</value>
+      <key>Names</key>
+      <value>Namen</value>
     </entry>
     <entry>
-      <key>Attribute \"%0\" has to be used at least %1.</key>
-      <value>Eigenschaft \"%0\" muss mindestens %1 verwendet werden.</value>
+      <key>Show all contracts</key>
+      <value>Alle Verträge anzeigen</value>
     </entry>
     <entry>
-      <key>Delete appointment</key>
-      <value>Termin löschen</value>
+      <key>The contact is already a recipient!</key>
+      <value>Der Kontakt ist bereits als Empfänger eingetragen!</value>
     </entry>
     <entry>
-      <key>Show tasks where I am editor</key>
-      <value>Zeigt Aufgaben an wo ich Bearbeiter bin</value>
+      <key>contract of sale</key>
+      <value>Kaufvertrag</value>
     </entry>
     <entry>
-      <key>Confirm password</key>
-      <value>Passwort prüfen</value>
+      <key>Max participants</key>
+      <value>Maximale Teilnehmer</value>
     </entry>
     <entry>
-      <key>Delete recurring appointment</key>
-      <value>Serie löschen</value>
+      <key>Show my campaigns</key>
+      <value>Meine Kampagnen anzeigen</value>
     </entry>
     <entry>
-      <key>Human Resources</key>
-      <value>Personal</value>
+      <key>consent</key>
+      <value>Zustimmung</value>
     </entry>
     <entry>
-      <key>Single</key>
-      <value>Einzel</value>
+      <key>This combination of person and organisation does already exist and can not be created once more.</key>
+      <value>Diese Kombination aus Person und Organisation existiert bereits und kann daher nicht noch ein mal angelegt werden.</value>
     </entry>
     <entry>
-      <key>ended (abandoned)</key>
-      <value>abgeschlossen (aufgegeben)</value>
+      <key>Information Report</key>
+      <value>Informationsbericht</value>
     </entry>
     <entry>
-      <key>Permission</key>
-      <value>Berechtigung</value>
+      <key>The contact has an advertising ban for emails!</key>
+      <value>Der Kontakt hat ein Werbeverbot für E-Mails!</value>
     </entry>
     <entry>
-      <key>Entrydate (Day)</key>
-      <value>Eingangsdatum (Tag)</value>
+      <key>Disclosure Report</key>
+      <value>Auskunftsbericht</value>
     </entry>
     <entry>
-      <key>still incorrect</key>
-      <value>weiterhin fehlerhaft</value>
+      <key>Forecasts</key>
     </entry>
     <entry>
-      <key>Priority</key>
-      <value>Priorität</value>
+      <key>${SALESPROJECT_NEGOTIATION}</key>
+      <value>Negotiation</value>
     </entry>
     <entry>
-      <key>Salesproject phases</key>
-      <value>Vertriebsprojektphasen</value>
+      <key>Update data privacy information</key>
+      <value>Datenschutzinformationen aktualisieren</value>
     </entry>
     <entry>
-      <key>%0 new recipients will be added to the bulk mail.</key>
-      <value>Der Serienmail weden %0 neue Empfänger hinzugefügt.</value>
+      <key>DataPrivacy Right</key>
+      <value>Datenschutzrecht</value>
     </entry>
     <entry>
-      <key>Write email</key>
-      <value>E-Mail schreiben</value>
+      <key>The transfer of data to recipients located in a third country is based on the following guarantees:</key>
+      <value>Die Übermittlung von Daten an Empfänger in einem Drittland basiert auf folgenden Garantien:</value>
     </entry>
     <entry>
-      <key>${ATTRIBUTE_VOID}</key>
-      <value>Tag</value>
+      <key>Filename</key>
+      <value>Dateiname</value>
     </entry>
     <entry>
-      <key>Campaign Period</key>
-      <value>Kampagnen Laufzeit</value>
+      <key>We save your data until </key>
+      <value>Wir speichern Ihre Daten bis </value>
     </entry>
     <entry>
-      <key>Turnover</key>
-      <value>Umsatz</value>
+      <key>On time</key>
+      <value>Pünktlich</value>
     </entry>
     <entry>
-      <key>Discount %</key>
-      <value>Rabatt %</value>
+      <key>For this report</key>
+      <value>Für diesen Bericht</value>
     </entry>
     <entry>
-      <key>${COUNT_PREPOSITION_MULTIPLE}</key>
-      <value>mal</value>
+      <key>Male</key>
+      <value>Männlich</value>
     </entry>
     <entry>
-      <key>Data privacy entries</key>
-      <value>Datenschutzeinträge</value>
+      <key>SqlBuilder must contain a select clause!</key>
+      <value>SqlBuilder muss eine Select-Clause enthalten!</value>
     </entry>
     <entry>
-      <key>Email must be unique!</key>
-      <value>Die E-Mail-Adresse muss eindeutig sein!</value>
+      <key>Inland</key>
+      <value>Inland</value>
     </entry>
     <entry>
-      <key>${COUNT_PREPOSITION_SINGLE}</key>
-      <value>mal</value>
+      <key>Activity</key>
+      <value>Aktivität</value>
     </entry>
     <entry>
-      <key>E-Mail</key>
-      <value>E-Mail</value>
+      <key>The data is transmitted to the following recipients:</key>
+      <value>Die Daten werden an folgende Empfänger übertragen:</value>
     </entry>
     <entry>
-      <key>Maximal Count</key>
-      <value>Maximale Anzahl</value>
+      <key>SqlBuilder must be instanciated with 'new'</key>
+      <value>SqlBuilder muss mit 'new' instanziiert werden.</value>
     </entry>
     <entry>
-      <key>Entrydate (Month)</key>
-      <value>Eingangsdatum (Monat)</value>
+      <key>Balancing of interests</key>
+      <value>Interessenausgleich</value>
     </entry>
     <entry>
-      <key>Usage</key>
-      <value>Verwendung</value>
+      <key>SqlBuilder must contain a from clause!</key>
+      <value>SqlBuilder muss eine from-Clause enthalten!</value>
     </entry>
     <entry>
-      <key>Campaign status</key>
-      <value>Kampagnenstatus</value>
+      <key>None</key>
+      <value>Keine</value>
     </entry>
     <entry>
-      <key>Show all activities</key>
-      <value>Alle Aktivitäten anzeigen</value>
+      <key>Date of request</key>
+      <value>Datum der Anforderung</value>
     </entry>
     <entry>
-      <key>Add the selection to a campaign</key>
-      <value>Fügt die Auswahl zur Kampagne hinzu</value>
+      <key>New time tracking</key>
+      <value>Neuer Zeiteintrag</value>
     </entry>
     <entry>
-      <key>${ADDRESS_STATE}</key>
-      <value>Staat</value>
+      <key>Export CSV</key>
+      <value>CSV exportieren</value>
     </entry>
     <entry>
-      <key>New tasks</key>
-      <value>Neue Aufgaben</value>
+      <key>Not all data privacy fields for all private data is filled. Cannot create report.</key>
+      <value>Nicht alle Datenschutzfelder für alle privaten Daten werden ausgefüllt. Bericht kann nicht erstellt werden.</value>
     </entry>
     <entry>
-      <key>New module</key>
-      <value>Neuanlage</value>
+      <key>Customercode</key>
+      <value>Kundennummer</value>
     </entry>
     <entry>
-      <key>Show all contracts</key>
-      <value>Alle Verträge anzeigen</value>
+      <key>Birthday</key>
+      <value>Geburtstag</value>
     </entry>
     <entry>
-      <key>Max participants</key>
-      <value>Maximale Teilnehmer</value>
+      <key>Extend - request count</key>
+      <value>Verlängert - Anfrageanzahl</value>
     </entry>
     <entry>
-      <key>This combination of person and organisation does already exist and can not be created once more.</key>
-      <value>Diese Kombination aus Person und Organisation existiert bereits und kann daher nicht noch ein mal angelegt werden.</value>
+      <key>The person is already associated with another employee!</key>
+      <value>Die Person ist bereits mit einem anderen Mitarbeiter verknüpft!</value>
     </entry>
     <entry>
-      <key>Communication data</key>
-      <value>Kommunikationsdaten</value>
+      <key>Transmission</key>
+      <value>Übermittlung</value>
     </entry>
     <entry>
-      <key>${SALESPROJECT_NEGOTIATION}</key>
-      <value>Negotiation</value>
+      <key>You don't have permission for this view.</key>
+      <value>Sie haben keine Berechtigung für diese Ansicht.</value>
     </entry>
     <entry>
-      <key>Filename</key>
-      <value>Dateiname</value>
+      <key>Appointments</key>
+      <value>Termine</value>
     </entry>
     <entry>
-      <key>Male</key>
-      <value>Männlich</value>
+      <key>Extend - complexity</key>
+      <value>Verlängert - Komplexität</value>
     </entry>
     <entry>
-      <key>Activity</key>
-      <value>Aktivität</value>
+      <key>Advertising consent</key>
+      <value>Werbeeinwilligung</value>
     </entry>
     <entry>
-      <key>Name</key>
-      <value>Name</value>
+      <key>Time expenses</key>
+      <value>Aufwand</value>
     </entry>
     <entry>
-      <key>Austria</key>
-      <value>Österreich</value>
+      <key>We hereby comply with your request within the statutory period of one month.</key>
+      <value>Wir kommen Ihrer Aufforderung hiermit innerhalb der gesetzlichen Frist von einem Monat nach.</value>
     </entry>
     <entry>
-      <key>New time tracking</key>
-      <value>Neuer Zeiteintrag</value>
+      <key>%0 mails sent sucessfully, %1 mails failed. Process took %2 s.</key>
+      <value>%0 Mails erfolgreich gesendet, %1 Mails fehlgeschlagen. Der Prozess nahm %2 s. in Anspruch.</value>
     </entry>
     <entry>
-      <key>Customercode</key>
-      <value>Kundennummer</value>
+      <key>${SALESPROJECT_OFFER}</key>
+      <value>Offer</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>
+      <key>Foreign country</key>
+      <value>Ausland</value>
     </entry>
     <entry>
-      <key>Appointments</key>
-      <value>Termine</value>
+      <key>the high complexity of your application</key>
+      <value>die hohe Komplexität Ihrer Anwendung</value>
     </entry>
     <entry>
-      <key>Time expenses</key>
-      <value>Aufwand</value>
+      <key>Appointment checkup for the selected day</key>
+      <value>Termin Vorschau für den ausgewählten Tag</value>
     </entry>
     <entry>
-      <key>${SALESPROJECT_OFFER}</key>
-      <value>Offer</value>
+      <key>As stated in our letter of %0, we have made use of the possibility to extend the deadline to three months due to %1.</key>
+      <value>Wie in unserem Schreiben von %0 erwähnt, haben wir von der Möglichkeit Gebrauch gemacht, die Frist aufgrund von %1 auf drei Monate zu verlängern.</value>
     </entry>
     <entry>
       <key>Status</key>
       <value>Status</value>
     </entry>
+    <entry>
+      <key>Deadline</key>
+      <value>Frist</value>
+    </entry>
+    <entry>
+      <key>Newsletter dispatch</key>
+      <value>Newsletterversand</value>
+    </entry>
     <entry>
       <key>Campaigns</key>
       <value>Kampagnen</value>
     </entry>
+    <entry>
+      <key>We received data from</key>
+      <value>Wir haben Daten erhalten von</value>
+    </entry>
     <entry>
       <key>${SALESPROJECT_MEMBER}</key>
       <value>Projektteam</value>
     </entry>
     <entry>
-      <key>${QUANTITY_LOWER_THAN_1}</key>
-      <value>Die Menge muss mindestens 1 sein.</value>
+      <key>Your changes may have an impact on the data privacy information (DSGVO).\n Please update these.</key>
+      <value>Ihre Änderungen können sich auf die Datenschutzinformationen (DSGVO) auswirken.\n Bitte aktualisieren Sie diese.</value>
     </entry>
     <entry>
-      <key>date of birth must not be in the future</key>
-      <value>Geburtsdatum darf nicht in der Zukunft liegen</value>
+      <key>Export letter for selection</key>
+      <value>Brief für Auswahl exportieren</value>
+    </entry>
+    <entry>
+      <key>External Datasource</key>
+      <value>Externe Datenquelle</value>
+    </entry>
+    <entry>
+      <key>Steps</key>
+      <value>Stufen</value>
     </entry>
     <entry>
       <key>Days inactive</key>
@@ -683,14 +627,6 @@
       <key>Germany</key>
       <value>Deutschland</value>
     </entry>
-    <entry>
-      <key>Online-Meeting</key>
-      <value>Online-Meeting</value>
-    </entry>
-    <entry>
-      <key>Set password</key>
-      <value>Passwort setzen</value>
-    </entry>
     <entry>
       <key>Choose address</key>
       <value>Adresse auswählen</value>
@@ -727,10 +663,6 @@
       <key>Female</key>
       <value>Weiblich</value>
     </entry>
-    <entry>
-      <key>Contactmanagement</key>
-      <value>Kontaktmanagement</value>
-    </entry>
     <entry>
       <key>Office address</key>
       <value>Firmenadresse</value>
@@ -739,10 +671,6 @@
       <key>Contact</key>
       <value>Kontakt</value>
     </entry>
-    <entry>
-      <key>Home address</key>
-      <value>Privatadresse</value>
-    </entry>
     <entry>
       <key>Type</key>
       <value>Typ</value>
@@ -751,10 +679,6 @@
       <key>Contacts</key>
       <value>Kontakte</value>
     </entry>
-    <entry>
-      <key>Norway</key>
-      <value>Norwegen</value>
-    </entry>
     <entry>
       <key>Address</key>
       <value>Adresse</value>
@@ -788,41 +712,53 @@
       <value>Geburtsdatum</value>
     </entry>
     <entry>
-      <key>Lastname</key>
-      <value>Nachname</value>
+      <key>New tasks</key>
+      <value>Neue Aufgaben</value>
+    </entry>
+    <entry>
+      <key>New module</key>
+      <value>Neuanlage</value>
     </entry>
     <entry>
       <key>Salutation</key>
       <value>Anrede</value>
     </entry>
     <entry>
-      <key>setRead</key>
-      <value>Gelesen setzen</value>
+      <key>Communication data</key>
+      <value>Kommunikationsdaten</value>
     </entry>
     <entry>
-      <key>Middlename</key>
-      <value>Zwischenname</value>
+      <key>setRead</key>
+      <value>Gelesen setzen</value>
     </entry>
     <entry>
       <key>Title</key>
       <value>Titel</value>
     </entry>
     <entry>
-      <key>Addresstype</key>
-      <value>Adresstyp</value>
+      <key>Name</key>
+      <value>Name</value>
     </entry>
     <entry>
-      <key>Add participants to Campaign</key>
-      <value>Kampagnenteilnehmer/innen hinzufügen</value>
+      <key>Austria</key>
+      <value>Österreich</value>
     </entry>
     <entry>
-      <key>Firstname</key>
-      <value>Vorname</value>
+      <key>Addresstype</key>
+      <value>Adresstyp</value>
     </entry>
     <entry>
       <key>Show all contacts</key>
       <value>Alle Kontaktpersonen anzeigen</value>
     </entry>
+    <entry>
+      <key>${QUANTITY_LOWER_THAN_1}</key>
+      <value>Die Menge muss mindestens 1 sein.</value>
+    </entry>
+    <entry>
+      <key>date of birth must not be in the future</key>
+      <value>Geburtsdatum darf nicht in der Zukunft liegen</value>
+    </entry>
     <entry>
       <key>Description</key>
       <value>Beschreibung</value>
@@ -832,16 +768,16 @@
       <value>Richtung</value>
     </entry>
     <entry>
-      <key>Entrydate</key>
-      <value>Eingangsdatum</value>
+      <key>Online-Meeting</key>
+      <value>Online-Meeting</value>
     </entry>
     <entry>
-      <key>Subject</key>
-      <value>Betreff</value>
+      <key>Set password</key>
+      <value>Passwort setzen</value>
     </entry>
     <entry>
-      <key>Post office box</key>
-      <value>Postfach</value>
+      <key>Subject</key>
+      <value>Betreff</value>
     </entry>
     <entry>
       <key>Delivery address</key>
@@ -852,17 +788,25 @@
       <value>Teilnehmer/innen</value>
     </entry>
     <entry>
-      <key>House number</key>
-      <value>Hausnummer</value>
+      <key>Contactmanagement</key>
+      <value>Kontaktmanagement</value>
     </entry>
     <entry>
       <key>Country</key>
       <value>Land</value>
     </entry>
+    <entry>
+      <key>Home address</key>
+      <value>Privatadresse</value>
+    </entry>
     <entry>
       <key>Communication</key>
       <value>Kommunikation</value>
     </entry>
+    <entry>
+      <key>Norway</key>
+      <value>Norwegen</value>
+    </entry>
     <entry>
       <key>Postcode</key>
       <value>Postleitzahl</value>
@@ -871,21 +815,17 @@
       <key>City</key>
       <value>Ort</value>
     </entry>
-    <entry>
-      <key>State</key>
-      <value>Status</value>
-    </entry>
     <entry>
       <key>Region</key>
       <value>Gebiet</value>
     </entry>
     <entry>
-      <key>District</key>
-      <value>Kreis</value>
+      <key>Lastname</key>
+      <value>Nachname</value>
     </entry>
     <entry>
-      <key>Companies</key>
-      <value>Firmen</value>
+      <key>Middlename</key>
+      <value>Zwischenname</value>
     </entry>
     <entry>
       <key>Switzerland</key>
@@ -895,6 +835,14 @@
       <key>Confirmed</key>
       <value>Bestätigt</value>
     </entry>
+    <entry>
+      <key>Add participants to Campaign</key>
+      <value>Kampagnenteilnehmer/innen hinzufügen</value>
+    </entry>
+    <entry>
+      <key>Firstname</key>
+      <value>Vorname</value>
+    </entry>
     <entry>
       <key>Descriptions</key>
       <value>Beschreibungen</value>
@@ -908,39 +856,36 @@
       <value>Vorläufig</value>
     </entry>
     <entry>
-      <key>Ignore series</key>
-      <value>Monatliche Serie nicht genauer spezifiziert. Ignoriere Serie.</value>
+      <key>Entrydate</key>
+      <value>Eingangsdatum</value>
     </entry>
     <entry>
       <key>Attachments</key>
       <value>Anhänge</value>
     </entry>
     <entry>
-      <key>Internal (2)</key>
+      <key>Post office box</key>
+      <value>Postfach</value>
     </entry>
     <entry>
       <key>Touchpoints</key>
       <value>Kontaktpunkte</value>
     </entry>
     <entry>
-      <key>archieve</key>
-      <value>Archivieren</value>
-    </entry>
-    <entry>
-      <key>ended (done)</key>
-      <value>abgeschlossen (erledigt)</value>
+      <key>House number</key>
+      <value>Hausnummer</value>
     </entry>
     <entry>
-      <key>Document Template</key>
-      <value>Dokumentvorlage</value>
+      <key>State</key>
+      <value>Status</value>
     </entry>
     <entry>
-      <key>Company Addresses</key>
-      <value>Firmenadressen</value>
+      <key>District</key>
+      <value>Kreis</value>
     </entry>
     <entry>
-      <key>yearly series not specified</key>
-      <value>Jährliche Serie nicht genauer spezifiziert. Ignoriere Serie.</value>
+      <key>Companies</key>
+      <value>Firmen</value>
     </entry>
     <entry>
       <key>OutOfOffice</key>
@@ -951,16 +896,20 @@
       <value>Abgesagt</value>
     </entry>
     <entry>
-      <key>Ignore daily series</key>
-      <value>Tägliche Serie nicht genauer spezifiziert. Ignoriere Serie.</value>
+      <key>standard address</key>
+      <value>Standard-Adresse</value>
+    </entry>
+    <entry>
+      <key>ended (done)</key>
+      <value>abgeschlossen (erledigt)</value>
     </entry>
     <entry>
-      <key>yyyyMMdd</key>
-      <value>yyyyMMdd</value>
+      <key>Document Template</key>
+      <value>Dokumentvorlage</value>
     </entry>
     <entry>
-      <key>standard address</key>
-      <value>Standard-Adresse</value>
+      <key>Company Addresses</key>
+      <value>Firmenadressen</value>
     </entry>
     <entry>
       <key>Create receipt</key>
@@ -1045,10 +994,6 @@
       <key>Discount</key>
       <value>Rabatt</value>
     </entry>
-    <entry>
-      <key>The next due date must be after the start of the contract and before the expiry of the contract!</key>
-      <value>Nächste Fälligkeit muss nach Vertragsbeginn und vor Vertragsende liegen!</value>
-    </entry>
     <entry>
       <key>Sales</key>
       <value>Vertrieb</value>
@@ -1089,6 +1034,10 @@
       <key>Contract start date</key>
       <value>Vertragsbeginn</value>
     </entry>
+    <entry>
+      <key>The next due date must be after the start of the contract and before the expiry of the contract!</key>
+      <value>Nächste Fälligkeit muss nach Vertragsbeginn und vor Vertragsende liegen!</value>
+    </entry>
     <entry>
       <key>Remaining Runtime</key>
       <value>Restlaufzeit</value>
@@ -1145,10 +1094,6 @@
       <key>Product group</key>
       <value>Produktgruppe</value>
     </entry>
-    <entry>
-      <key>${CONTRACT_STATUS}</key>
-      <value>Status</value>
-    </entry>
     <entry>
       <key>From no. of units</key>
       <value>ab Stückzahl</value>
@@ -1172,10 +1117,6 @@
       <key>I / O</key>
       <value>E / A</value>
     </entry>
-    <entry>
-      <key>Date</key>
-      <value>Datum</value>
-    </entry>
     <entry>
       <key>IN</key>
       <value>EIN</value>
@@ -1184,18 +1125,10 @@
       <key>OUT</key>
       <value>AUS</value>
     </entry>
-    <entry>
-      <key>Warehouse</key>
-      <value>Lager</value>
-    </entry>
     <entry>
       <key>Reference</key>
       <value>Referenz</value>
     </entry>
-    <entry>
-      <key>The contract number already exists!</key>
-      <value>Die Vertragsnummer existiert bereits!</value>
-    </entry>
     <entry>
       <key>The product number already exists!</key>
       <value>Die Produktnummer existiert bereits!</value>
@@ -1280,10 +1213,6 @@
       <key>Probability</key>
       <value>Wahrscheinlichkeit</value>
     </entry>
-    <entry>
-      <key>Total VAT</key>
-      <value>Betrag MWST</value>
-    </entry>
     <entry>
       <key>The offer number already exists!</key>
       <value>Die Angebotsnummer existiert bereits!</value>
@@ -1304,6 +1233,10 @@
     <entry>
       <key>25 %</key>
     </entry>
+    <entry>
+      <key>Date</key>
+      <value>Datum</value>
+    </entry>
     <entry>
       <key>50 %</key>
     </entry>
@@ -1327,6 +1260,10 @@
       <key>Sent</key>
       <value>Versendet</value>
     </entry>
+    <entry>
+      <key>Warehouse</key>
+      <value>Lager</value>
+    </entry>
     <entry>
       <key>Offeritems</key>
       <value>Angebotsposten</value>
@@ -1570,18 +1507,10 @@
       <key>Main document</key>
       <value>Hauptdokument</value>
     </entry>
-    <entry>
-      <key>False</key>
-      <value>Nein</value>
-    </entry>
     <entry>
       <key>Show all Facebook posts of a user</key>
       <value>Alle Facebook Beiträge eines Benutzers anzeigen</value>
     </entry>
-    <entry>
-      <key>My Activities</key>
-      <value>Meine Aktivitäten</value>
-    </entry>
     <entry>
       <key>Combobox Value</key>
       <value>Combobox-Wert</value>
@@ -1628,10 +1557,6 @@
       <key>Show all tweets of a user</key>
       <value>Alle tweets eines Benutzers anzeigen</value>
     </entry>
-    <entry>
-      <key>Please update the ${FORECAST_ENGLISH}.</key>
-      <value>Bitte den Forecast überprüfen.</value>
-    </entry>
     <entry>
       <key>Industry</key>
       <value>Branche</value>
@@ -1731,10 +1656,6 @@
       <key>New offer</key>
       <value>Angebot erstellen</value>
     </entry>
-    <entry>
-      <key>dd.MM.yyyy</key>
-      <value>dd.MM.yyyy</value>
-    </entry>
     <entry>
       <key>Articledescription</key>
       <value>Artikelbezeichnung</value>
@@ -1774,10 +1695,6 @@
       <key>Timetracking</key>
       <value>Zeiterfassung</value>
     </entry>
-    <entry>
-      <key>Further informations</key>
-      <value>Weitere Informationen</value>
-    </entry>
     <entry>
       <key>Social</key>
       <value>Sozial</value>
@@ -1865,6 +1782,14 @@
     <entry>
       <key>ADITO Facebook Feed</key>
     </entry>
+    <entry>
+      <key>False</key>
+      <value>Nein</value>
+    </entry>
+    <entry>
+      <key>My Activities</key>
+      <value>Meine Aktivitäten</value>
+    </entry>
     <entry>
       <key>ADITO Twitter Feed</key>
     </entry>
@@ -1892,6 +1817,10 @@
       <key>November</key>
       <value>November</value>
     </entry>
+    <entry>
+      <key>Please update the ${FORECAST_ENGLISH}.</key>
+      <value>Bitte den Forecast überprüfen.</value>
+    </entry>
     <entry>
       <key>December</key>
       <value>Dezember</value>
@@ -1964,9 +1893,6 @@
       <key>{$TASK_PRIORITY_HIGH}</key>
       <value>hoch</value>
     </entry>
-    <entry>
-      <key>Seite</key>
-    </entry>
     <entry>
       <key>Senden per E-Mail</key>
     </entry>
@@ -2050,12 +1976,12 @@
       <value>Beziehungen</value>
     </entry>
     <entry>
-      <key>${FORECAST_ENGLISH}</key>
-      <value>Forecast</value>
+      <key>dd.MM.yyyy</key>
+      <value>dd.MM.yyyy</value>
     </entry>
     <entry>
-      <key>Title (original language)</key>
-      <value>Titel (ursprüngliche Sprache)</value>
+      <key>${FORECAST_ENGLISH}</key>
+      <value>Forecast</value>
     </entry>
     <entry>
       <key>My Dashboard</key>
@@ -2083,9 +2009,6 @@
       <key>Sorting</key>
       <value>Sortierung</value>
     </entry>
-    <entry>
-      <key>jdito</key>
-    </entry>
     <entry>
       <key>Context id</key>
     </entry>
@@ -2124,6 +2047,10 @@
       <key>Montserrat</key>
       <value>Montserrat</value>
     </entry>
+    <entry>
+      <key>Further informations</key>
+      <value>Weitere Informationen</value>
+    </entry>
     <entry>
       <key>Guadeloupe</key>
       <value>Guadeloupe</value>
@@ -2152,10 +2079,6 @@
       <key>Comoros</key>
       <value>Komoren</value>
     </entry>
-    <entry>
-      <key>Faroe Islands</key>
-      <value>Färöer Inseln</value>
-    </entry>
     <entry>
       <key>Finland</key>
       <value>Finnland</value>
@@ -2184,10 +2107,6 @@
       <key>Libya</key>
       <value>Libyen</value>
     </entry>
-    <entry>
-      <key>French</key>
-      <value>Französisch</value>
-    </entry>
     <entry>
       <key>Cocos (Keeling) Islands</key>
       <value>Kokosinseln (Keelinginseln)</value>
@@ -2380,22 +2299,10 @@
       <key>Korea (Democratic People's Republic of)</key>
       <value>Korea, Demokratische Volksrepublik)</value>
     </entry>
-    <entry>
-      <key>United States dollar</key>
-      <value>US-Dollar</value>
-    </entry>
     <entry>
       <key>Superordinate Attribute</key>
       <value>Übergeordnete Eigenschaft</value>
     </entry>
-    <entry>
-      <key>Kyrgyzstan</key>
-      <value>Kirgisistan</value>
-    </entry>
-    <entry>
-      <key>Togo</key>
-      <value>Togo</value>
-    </entry>
     <entry>
       <key>Other_existing Customer</key>
       <value>Sonstiges_Bestandskunde</value>
@@ -2416,10 +2323,6 @@
       <key>Virgin Islands (British)</key>
       <value>Virgin Inseln, Britisch)</value>
     </entry>
-    <entry>
-      <key>Sudan</key>
-      <value>Sudan</value>
-    </entry>
     <entry>
       <key>Portugal</key>
       <value>Portugal</value>
@@ -2436,10 +2339,6 @@
       <key>Mongolia</key>
       <value>Mongolei</value>
     </entry>
-    <entry>
-      <key>Morocco</key>
-      <value>Marokko</value>
-    </entry>
     <entry>
       <key>Guatemala</key>
       <value>Guatemala</value>
@@ -2452,6 +2351,9 @@
       <key>Heard Island and McDonald Islands</key>
       <value>Heard Island und McDonald Islands</value>
     </entry>
+    <entry>
+      <key>Seite</key>
+    </entry>
     <entry>
       <key>Incoming</key>
       <value>eingehend</value>
@@ -2532,10 +2434,6 @@
       <key>Nigeria</key>
       <value>Nigeria</value>
     </entry>
-    <entry>
-      <key>Syrian Arab Republic</key>
-      <value>Syrische Arabische Republik</value>
-    </entry>
     <entry>
       <key>Timor-Leste</key>
       <value>Timor-Leste</value>
@@ -2617,12 +2515,8 @@
       <value>Südsudan</value>
     </entry>
     <entry>
-      <key>Mauritius</key>
-      <value>Mauritius</value>
-    </entry>
-    <entry>
-      <key>Bouvet Island</key>
-      <value>Bouvet Island</value>
+      <key>Title (original language)</key>
+      <value>Titel (ursprüngliche Sprache)</value>
     </entry>
     <entry>
       <key>Bolivia (Plurinational State of)</key>
@@ -2668,6 +2562,9 @@
       <key>Project_volume</key>
       <value>Projekt_Volumen</value>
     </entry>
+    <entry>
+      <key>jdito</key>
+    </entry>
     <entry>
       <key>Ireland</key>
       <value>Irland</value>
@@ -2680,10 +2577,6 @@
       <key>unassigned</key>
       <value>nicht zugewiesen</value>
     </entry>
-    <entry>
-      <key>France</key>
-      <value>Frankreich</value>
-    </entry>
     <entry>
       <key>Lithuania</key>
       <value>Litauen</value>
@@ -2820,10 +2713,6 @@
       <key>Svalbard and Jan Mayen</key>
       <value>Svalbard und Jan Mayen</value>
     </entry>
-    <entry>
-      <key>South Georgia and the South Sandwich Islands</key>
-      <value>Süd-Georgien und die südlichen Sandwich-Inseln</value>
-    </entry>
     <entry>
       <key>Sweden</key>
       <value>Schweden</value>
@@ -2856,6 +2745,10 @@
       <key>Azerbaijan</key>
       <value>Aserbaidschan</value>
     </entry>
+    <entry>
+      <key>French</key>
+      <value>Französisch</value>
+    </entry>
     <entry>
       <key>Czech Republic</key>
       <value>Tschechische Republik</value>
@@ -2932,10 +2825,6 @@
       <key>Participated</key>
       <value>Teilgenommen</value>
     </entry>
-    <entry>
-      <key>Colombia</key>
-      <value>Kolumbien</value>
-    </entry>
     <entry>
       <key>Project_reference</key>
       <value>Projekt_Referenz</value>
@@ -3172,8 +3061,8 @@
       <value>Südafrika</value>
     </entry>
     <entry>
-      <key>Trinidad and Tobago</key>
-      <value>Trinidad und Tobago</value>
+      <key>United States dollar</key>
+      <value>US-Dollar</value>
     </entry>
     <entry>
       <key>Bermuda</key>
@@ -3187,6 +3076,10 @@
       <key>Peru</key>
       <value>Peru</value>
     </entry>
+    <entry>
+      <key>Kyrgyzstan</key>
+      <value>Kirgisistan</value>
+    </entry>
     <entry>
       <key>Turkmenistan</key>
       <value>Turkmenistan</value>
@@ -3195,6 +3088,10 @@
       <key>Venezuela (Bolivarian Republic of)</key>
       <value>Venezuela (Bolivarische Republik)</value>
     </entry>
+    <entry>
+      <key>Togo</key>
+      <value>Togo</value>
+    </entry>
     <entry>
       <key>Tokelau</key>
       <value>Tokelau</value>
@@ -3203,10 +3100,6 @@
       <key>Hong Kong</key>
       <value>Hongkong</value>
     </entry>
-    <entry>
-      <key>Password</key>
-      <value>Passwort</value>
-    </entry>
     <entry>
       <key>Chad</key>
       <value>Tschad</value>
@@ -3235,6 +3128,10 @@
       <key>Croatia</key>
       <value>Kroatien</value>
     </entry>
+    <entry>
+      <key>Sudan</key>
+      <value>Sudan</value>
+    </entry>
     <entry>
       <key>Cook Islands</key>
       <value>Cookinseln</value>
@@ -3383,10 +3280,6 @@
       <key>French Southern Territories</key>
       <value>Südfranzösische Territorien</value>
     </entry>
-    <entry>
-      <key>Bangladesh</key>
-      <value>Bangladesch</value>
-    </entry>
     <entry>
       <key>Barbados</key>
       <value>Barbados</value>
@@ -3422,6 +3315,10 @@
     <entry>
       <key>SAL</key>
     </entry>
+    <entry>
+      <key>Syrian Arab Republic</key>
+      <value>Syrische Arabische Republik</value>
+    </entry>
     <entry>
       <key>Checkbox</key>
       <value>Checkbox</value>
@@ -3441,18 +3338,10 @@
       <key>Group</key>
       <value>Gruppe</value>
     </entry>
-    <entry>
-      <key>Combobox</key>
-      <value>Combobox</value>
-    </entry>
     <entry>
       <key>tentative</key>
       <value>Vorläufig</value>
     </entry>
-    <entry>
-      <key>${NUMBER}</key>
-      <value>Zahl</value>
-    </entry>
     <entry>
       <key>Name \"%0\" already used for container \"%1\"</key>
     </entry>
@@ -3560,10 +3449,18 @@
     <entry>
       <key>0%</key>
     </entry>
+    <entry>
+      <key>Mauritius</key>
+      <value>Mauritius</value>
+    </entry>
     <entry>
       <key>acquainted with</key>
       <value>Bekannt mit</value>
     </entry>
+    <entry>
+      <key>Bouvet Island</key>
+      <value>Bouvet Island</value>
+    </entry>
     <entry>
       <key>collaboration with</key>
       <value>Zusammenarbeit mit</value>
@@ -3632,10 +3529,6 @@
       <key>Function</key>
       <value>Funktion</value>
     </entry>
-    <entry>
-      <key>Username already exists!</key>
-      <value>Der Benutzername existiert bereits!</value>
-    </entry>
     <entry>
       <key>Relational</key>
     </entry>
@@ -3646,6 +3539,10 @@
     <entry>
       <key>MQC</key>
     </entry>
+    <entry>
+      <key>France</key>
+      <value>Frankreich</value>
+    </entry>
     <entry>
       <key>Japan</key>
       <value>Japan</value>
@@ -3712,9 +3609,6 @@
     <entry>
       <key>Bitte Filterbedingungen setzen</key>
     </entry>
-    <entry>
-      <key>Bestätigt</key>
-    </entry>
     <entry>
       <key>True</key>
       <value>Ja</value>
@@ -3749,9 +3643,6 @@
     <entry>
       <key>Abgesagt</key>
     </entry>
-    <entry>
-      <key>Außer Haus</key>
-    </entry>
     <entry>
       <key>Abbrechen</key>
     </entry>
@@ -3811,10 +3702,6 @@
       <key>VAT in %</key>
       <value>UmsSt. in %</value>
     </entry>
-    <entry>
-      <key>Time in minutes</key>
-      <value>Zeit in Minuten</value>
-    </entry>
     <entry>
       <key>Sales manager</key>
       <value>Vertriebsleiter</value>
@@ -3842,6 +3729,10 @@
       <key>Production</key>
       <value>Produktion</value>
     </entry>
+    <entry>
+      <key>South Georgia and the South Sandwich Islands</key>
+      <value>Süd-Georgien und die südlichen Sandwich-Inseln</value>
+    </entry>
     <entry>
       <key>CEO</key>
     </entry>
@@ -3880,18 +3771,10 @@
       <key>Manufacturer</key>
       <value>Hersteller</value>
     </entry>
-    <entry>
-      <key>Competitor</key>
-      <value>Wettbewerber</value>
-    </entry>
     <entry>
       <key>Partner</key>
       <value>Partner</value>
     </entry>
-    <entry>
-      <key>Protected</key>
-      <value>Geschützt</value>
-    </entry>
     <entry>
       <key>false</key>
     </entry>
@@ -3922,10 +3805,6 @@
       <key>Begin</key>
       <value>Beginn</value>
     </entry>
-    <entry>
-      <key>Maturity</key>
-      <value>Fällig</value>
-    </entry>
     <entry>
       <key>This private person doeas already exist and can not be created once more.</key>
       <value>Diese Privatperson existiert bereits und kann daher nicht noch ein mal angelegt werden.</value>
@@ -4209,9 +4088,6 @@
     <entry>
       <key>Timetracking Id</key>
     </entry>
-    <entry>
-      <key>Exec type</key>
-    </entry>
     <entry>
       <key>Date value</key>
     </entry>
@@ -4320,6 +4196,10 @@
     <entry>
       <key>Labels</key>
     </entry>
+    <entry>
+      <key>Trinidad and Tobago</key>
+      <value>Trinidad und Tobago</value>
+    </entry>
     <entry>
       <key>%0 deleted.</key>
       <value>%0 gelöscht.</value>
@@ -4333,9 +4213,6 @@
     <entry>
       <key>Offer item Id</key>
     </entry>
-    <entry>
-      <key>Offer Id</key>
-    </entry>
     <entry>
       <key>Name native</key>
     </entry>
@@ -4345,9 +4222,6 @@
     <entry>
       <key>Address Id</key>
     </entry>
-    <entry>
-      <key>Name latin</key>
-    </entry>
     <entry>
       <key>Destination Id</key>
     </entry>
@@ -4586,10 +4460,6 @@
       <key>Keyword Attributes</key>
       <value>Schlüsselwort-Eigenschaften</value>
     </entry>
-    <entry>
-      <key>Student/Internship</key>
-      <value>Student/Praktikant</value>
-    </entry>
     <entry>
       <key>Food</key>
       <value>Lebensmittel</value>
@@ -4666,10 +4536,6 @@
       <key>Link</key>
       <value>Verknüpfung</value>
     </entry>
-    <entry>
-      <key>Counsellor</key>
-      <value>Berater</value>
-    </entry>
     <entry>
       <key>50 to 100</key>
       <value>50 bis 100</value>
@@ -4814,6 +4680,10 @@
       <key>ScoreBased</key>
       <value>Unternehmenssitz</value>
     </entry>
+    <entry>
+      <key>Combobox</key>
+      <value>Combobox</value>
+    </entry>
     <entry>
       <key>Score</key>
     </entry>
@@ -4825,6 +4695,10 @@
       <key>${HIGHER_THAN_MAX} max: %0</key>
       <value>Der eingegebene Wert ist über dem Maximalwert %0.</value>
     </entry>
+    <entry>
+      <key>${NUMBER}</key>
+      <value>Zahl</value>
+    </entry>
     <entry>
       <key>Test email</key>
       <value>E-Mail testen</value>
@@ -4875,9 +4749,6 @@
     <entry>
       <key>File</key>
     </entry>
-    <entry>
-      <key> User</key>
-    </entry>
     <entry>
       <key>Condition Type</key>
     </entry>
@@ -5104,6 +4975,10 @@
       <key>Product B2</key>
       <value>Produkt B2</value>
     </entry>
+    <entry>
+      <key>Username already exists!</key>
+      <value>Der Benutzername existiert bereits!</value>
+    </entry>
     <entry>
       <key>General</key>
       <value>Allgemein</value>
@@ -5252,6 +5127,9 @@
       <key>Send documents (WV)</key>
       <value>Unterlagen senden (WV)</value>
     </entry>
+    <entry>
+      <key>Bestätigt</key>
+    </entry>
     <entry>
       <key>Make offer (WV)</key>
       <value>Angebot erstellen (WV)</value>
@@ -5280,10 +5158,6 @@
       <key>Weakness</key>
       <value>Schwäche</value>
     </entry>
-    <entry>
-      <key>Interests</key>
-      <value>Interessen</value>
-    </entry>
     <entry>
       <key>Goodwill</key>
       <value>Kulanz</value>
@@ -5308,6 +5182,9 @@
       <key>0 low</key>
       <value>gering</value>
     </entry>
+    <entry>
+      <key>Außer Haus</key>
+    </entry>
     <entry>
       <key>good</key>
       <value>gut</value>
@@ -5447,10 +5324,6 @@
       <key>Treat</key>
       <value>Genuss</value>
     </entry>
-    <entry>
-      <key>Testing contact</key>
-      <value>Testkontakt</value>
-    </entry>
     <entry>
       <key>Motor cycle</key>
       <value>Motorrad</value>
@@ -5495,10 +5368,6 @@
       <key>Birthday list</key>
       <value>Geburtstagsliste</value>
     </entry>
-    <entry>
-      <key>Project type</key>
-      <value>Projektart</value>
-    </entry>
     <entry>
       <key>Consisted customer</key>
       <value>Bestandskunde</value>
@@ -5515,10 +5384,6 @@
       <key>Conveyor</key>
       <value>Förderband</value>
     </entry>
-    <entry>
-      <key>Additional data</key>
-      <value>zusätzliche Daten</value>
-    </entry>
     <entry>
       <key>No risk</key>
       <value>kein Risiko</value>
@@ -5563,6 +5428,10 @@
       <key>Weight (kg)</key>
       <value>Gewicht (kg)</value>
     </entry>
+    <entry>
+      <key>Competitor</key>
+      <value>Wettbewerber</value>
+    </entry>
     <entry>
       <key>Creditworthiness</key>
       <value>Bonität</value>
@@ -5571,6 +5440,10 @@
       <key>Occupation</key>
       <value>Beruf</value>
     </entry>
+    <entry>
+      <key>Protected</key>
+      <value>Geschützt</value>
+    </entry>
     <entry>
       <key>C</key>
       <value>C</value>
@@ -5631,6 +5504,10 @@
       <key>Writes for</key>
       <value>schreibt für</value>
     </entry>
+    <entry>
+      <key>Maturity</key>
+      <value>Fällig</value>
+    </entry>
     <entry>
       <key>Subordinate campaign of</key>
       <value>Unterkampagne von</value>
@@ -5655,14 +5532,6 @@
       <key>Reports to</key>
       <value>berichtet an</value>
     </entry>
-    <entry>
-      <key>Urlaubsgenehmigung durch</key>
-      <value>Urlaubsgenehmigung durch</value>
-    </entry>
-    <entry>
-      <key>Urlaubsprüfung durch</key>
-      <value>Urlaubsprüfung durch</value>
-    </entry>
     <entry>
       <key>UID</key>
     </entry>
@@ -5714,10 +5583,6 @@
     <entry>
       <key>Ticket</key>
     </entry>
-    <entry>
-      <key>Delivery problems</key>
-      <value>Lieferprobleme</value>
-    </entry>
     <entry>
       <key>Tickets</key>
     </entry>
@@ -5827,9 +5692,6 @@
     <entry>
       <key>no keyword attribute \"%0\" found in keyword \"%1\" from container \"%2\"</key>
     </entry>
-    <entry>
-      <key>Total time</key>
-    </entry>
     <entry>
       <key>SALESORDERID (UID)</key>
     </entry>
@@ -5837,10 +5699,6 @@
       <key>Cause</key>
       <value>Ursache</value>
     </entry>
-    <entry>
-      <key>Assembly</key>
-      <value>Montage</value>
-    </entry>
     <entry>
       <key>Dokument template usage</key>
     </entry>
@@ -5859,10 +5717,6 @@
       <key>Not enough slots for %0/%1 participant(s)</key>
       <value>Nicht genügend Teilnehmerplätze verfügbar für %0/%1 Teilnehmer</value>
     </entry>
-    <entry>
-      <key>Support Ticket</key>
-      <value>Supportticket</value>
-    </entry>
     <entry>
       <key>No contacts selected</key>
       <value>Keine Kontakte ausgewählt</value>
@@ -5873,7 +5727,7 @@
     </entry>
     <entry>
       <key>Add to Bulkmail</key>
-      <value>Zu Massenmail hinzufügen</value>
+      <value>Zu Serienmail hinzufügen</value>
     </entry>
     <entry>
       <key>phase information</key>
@@ -5908,6 +5762,7 @@
     </entry>
     <entry>
       <key>Add to serial letter</key>
+      <value>Zu Serienbrief hinzufügen</value>
     </entry>
     <entry>
       <key>The contact has an advertising ban for letters!</key>
@@ -5953,10 +5808,6 @@
       <key>Accepted call from %0 (%1) to %2, duration: %3</key>
       <value>Angenommener Anruf von %0 (%1) nach %2, Dauer: %3</value>
     </entry>
-    <entry>
-      <key>Call from %0</key>
-      <value>Anruf von %0</value>
-    </entry>
     <entry>
       <key>one file ignored</key>
       <value>eine Datei ignoriert</value>
@@ -6038,391 +5889,574 @@
       <value>Sekunden</value>
     </entry>
     <entry>
-      <key>Duplicate configuration</key>
-      <value>Dublettenkonfiguration</value>
+      <key>Duplicate configuration</key>
+      <value>Dublettenkonfiguration</value>
+    </entry>
+    <entry>
+      <key>Use external Scanservice</key>
+      <value>Nutze externen Scan Webservice</value>
+    </entry>
+    <entry>
+      <key>Filter Name</key>
+      <value>Filter Name</value>
+    </entry>
+    <entry>
+      <key>Target Entity</key>
+      <value>Ziel Entity</value>
+    </entry>
+    <entry>
+      <key>Prefilter Configuration</key>
+      <value>Vorfilter</value>
+    </entry>
+    <entry>
+      <key>Characters to use</key>
+      <value>Anzahl Zeichen</value>
+    </entry>
+    <entry>
+      <key>Configuration name</key>
+      <value>Konfigurationsname</value>
+    </entry>
+    <entry>
+      <key>Download letter</key>
+      <value>Brief herunterladen</value>
+    </entry>
+    <entry>
+      <key>Phase progression</key>
+      <value>Phasenfortschritt</value>
+    </entry>
+    <entry>
+      <key>Milestones Phase</key>
+      <value>Meilensteinphase</value>
+    </entry>
+    <entry>
+      <key>Occurrences</key>
+      <value>Ereignisse</value>
+    </entry>
+    <entry>
+      <key>Milestones Status</key>
+      <value>Meilensteinstatus</value>
+    </entry>
+    <entry>
+      <key>no valid phone number</key>
+      <value>keine gültige Telefonnummer</value>
+    </entry>
+    <entry>
+      <key>Prognose</key>
+    </entry>
+    <entry>
+      <key>EntityToFilterParam</key>
+    </entry>
+    <entry>
+      <key>Sender</key>
+    </entry>
+    <entry>
+      <key>parameter</key>
+    </entry>
+    <entry>
+      <key>Test DuplicateSearch</key>
+    </entry>
+    <entry>
+      <key>Unlinked e-mail</key>
+      <value>Unverknüpfte E-Mail</value>
+    </entry>
+    <entry>
+      <key>(optional) E-Mail to store in contact</key>
+      <value>(optional) E-Mail bei Kontakt speichern</value>
+    </entry>
+    <entry>
+      <key>Link unlinked e-mail</key>
+      <value>Verknüpfe E-Mail</value>
+    </entry>
+    <entry>
+      <key>Link e-mail addresses to contacts</key>
+      <value>Verknüpfe E-Mail-Adressen zu Kontakten</value>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</key>
+      <value>Weitere Verknüpfungen</value>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</key>
+      <value>Weitere Verknüpfung</value>
+    </entry>
+    <entry>
+      <key>Create activity</key>
+      <value>Erstelle Aktivität</value>
+    </entry>
+    <entry>
+      <key>Unlinked e-mails</key>
+      <value>Unverknüpfte E-Mails</value>
+    </entry>
+    <entry>
+      <key>Download</key>
+      <value>Herunterladen</value>
+    </entry>
+    <entry>
+      <key>Turnover Current Year</key>
+      <value>Umsatz aktuelles Jahr</value>
+    </entry>
+    <entry>
+      <key>Exec type</key>
+    </entry>
+    <entry>
+      <key>Permission Details</key>
+    </entry>
+    <entry>
+      <key>Remaining tasks and appointments</key>
+      <value>Aufgaben und Termine, die noch ausstehen</value>
+    </entry>
+    <entry>
+      <key>Tasks for which I am responsible</key>
+      <value>Aufgaben, für die ich zuständig bin</value>
+    </entry>
+    <entry>
+      <key>Shows unread notifications about different content, e.g. Appointments, serial mails, ...</key>
+      <value>Zeigt alle ungelesenen Benachrichtigungen mit verschiedenen Inhalten, z.B. zu Terminen, Serienmails</value>
+    </entry>
+    <entry>
+      <key>Shows how many sales projects are in the various sales phases</key>
+      <value>Zeigt wie viele Vertriebsprojekte in den einzelnen Vertriebsphasen sind</value>
+    </entry>
+    <entry>
+      <key>Most important salse key figures</key>
+      <value>Zeigt die wichtigsten Vertriebskennzahlen</value>
+    </entry>
+    <entry>
+      <key>Shows the organisations turnover and forecast</key>
+      <value>Zeigt den Umsatz und den Forecast der Firma für den Zeitraum von 4 Jahren</value>
+    </entry>
+    <entry>
+      <key>Campaign management</key>
+      <value>Kampagnenmanagement</value>
+    </entry>
+    <entry>
+      <key>Campaign costs</key>
+      <value>Kampagnenkosten</value>
+    </entry>
+    <entry>
+      <key>Shows all campaigns</key>
+      <value>Alle Kampagnen anzeigen</value>
+    </entry>
+    <entry>
+      <key>Shows campaing costs graphically processed</key>
+      <value>Kampagnenkosten graphisch aufbereitet</value>
+    </entry>
+    <entry>
+      <key>Shows linked appointments</key>
+      <value>Verknüpfte Termine anzeigen</value>
+    </entry>
+    <entry>
+      <key>Possibility to search for terms</key>
+      <value>Möglichkeit nach Begriffen zu suchen</value>
+    </entry>
+    <entry>
+      <key>Transfer to Invoice</key>
+      <value>In Rechnung übertragen</value>
+    </entry>
+    <entry>
+      <key>Pay due date</key>
+      <value>Zahlungsziel</value>
+    </entry>
+    <entry>
+      <key>Payment address</key>
+      <value>Zahlungsadresse</value>
+    </entry>
+    <entry>
+      <key>Texts</key>
+      <value>Texte</value>
+    </entry>
+    <entry>
+      <key>keine Standard-E-Mail Büro vorhanden !</key>
+    </entry>
+    <entry>
+      <key>Choose payment address</key>
+      <value>Zahlungsadresse auswählen</value>
+    </entry>
+    <entry>
+      <key>Paid</key>
+      <value>Bezahlt</value>
+    </entry>
+    <entry>
+      <key>Dunning level</key>
+      <value>Mahnstufe</value>
+    </entry>
+    <entry>
+      <key>Beleg</key>
+    </entry>
+    <entry>
+      <key>Order Type</key>
+      <value>Belegtyp</value>
+    </entry>
+    <entry>
+      <key>Bitte einen Adressat in 'to' eintragen!</key>
+    </entry>
+    <entry>
+      <key>Dunning text</key>
+      <value>Mahnungstext</value>
     </entry>
     <entry>
-      <key>Use external Scanservice</key>
-      <value>Nutze externen Scan Webservice</value>
+      <key>Choose delivery address</key>
+      <value>Lieferadresse auswählen</value>
     </entry>
     <entry>
-      <key>Filter Name</key>
-      <value>Filter Name</value>
+      <key>Links</key>
     </entry>
     <entry>
-      <key>Target Entity</key>
-      <value>Ziel Entity</value>
+      <key>Set dunning</key>
+      <value>Mahnstufe setzen</value>
     </entry>
     <entry>
-      <key>Prefilter Configuration</key>
-      <value>Vorfilter</value>
+      <key>Cancel</key>
+      <value>Stornieren</value>
     </entry>
     <entry>
-      <key>Characters to use</key>
-      <value>Anzahl Zeichen</value>
+      <key>Set to sent</key>
+      <value>Versendet setzen</value>
     </entry>
     <entry>
-      <key>Configuration name</key>
-      <value>Konfigurationsname</value>
+      <key>Set paid amount</key>
+      <value>Bezahlten Betrag setzen</value>
     </entry>
     <entry>
-      <key>Download letter</key>
-      <value>Brief herunterladen</value>
+      <key>Pay date</key>
+      <value>Zahlungseingang</value>
     </entry>
     <entry>
-      <key>Phase progression</key>
-      <value>Phasenfortschritt</value>
+      <key>Dunning date</key>
+      <value>Mahndatum</value>
     </entry>
     <entry>
-      <key>Milestones Phase</key>
-      <value>Meilensteinphase</value>
+      <key>Print order</key>
+      <value>Beleg drucken</value>
     </entry>
     <entry>
-      <key>Occurrences</key>
-      <value>Ereignisse</value>
+      <key>Order number</key>
+      <value>Belegsnummer</value>
     </entry>
     <entry>
-      <key>Milestones Status</key>
-      <value>Meilensteinstatus</value>
+      <key>Permission Action</key>
     </entry>
     <entry>
-      <key>no valid phone number</key>
-      <value>keine gültige Telefonnummer</value>
+      <key>Filter</key>
     </entry>
     <entry>
-      <key>Prognose</key>
+      <key>Actions</key>
     </entry>
     <entry>
-      <key>EntityToFilterParam</key>
+      <key>Reminder</key>
+      <value>Mahnung</value>
     </entry>
     <entry>
-      <key>Sender</key>
+      <key>Print reminder</key>
+      <value>Mahnung drucken</value>
     </entry>
     <entry>
-      <key>parameter</key>
+      <key>Rech.-Betrag</key>
     </entry>
     <entry>
-      <key>Test DuplicateSearch</key>
+      <key>Order date</key>
+      <value>Belegsdatum</value>
     </entry>
     <entry>
-      <key>Unlinked e-mail</key>
-      <value>Unverknüpfte E-Mail</value>
+      <key>Due date</key>
+      <value>Mahndatum</value>
     </entry>
     <entry>
-      <key>(optional) E-Mail to store in contact</key>
-      <value>(optional) E-Mail bei Kontakt speichern</value>
+      <key>Order amount</key>
     </entry>
     <entry>
-      <key>Link unlinked e-mail</key>
-      <value>Verknüpfe E-Mail</value>
+      <key>Mahnung</key>
     </entry>
     <entry>
-      <key>Link e-mail addresses to contacts</key>
-      <value>Verknüpfe E-Mail-Adressen zu Kontakten</value>
+      <key>Due</key>
+      <value>Fällig</value>
     </entry>
     <entry>
-      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</key>
-      <value>Weitere Verknüpfungen</value>
+      <key>Only </key>
     </entry>
     <entry>
-      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</key>
-      <value>Weitere Verknüpfung</value>
+      <key>Action '</key>
     </entry>
     <entry>
-      <key>Create activity</key>
-      <value>Erstelle Aktivität</value>
+      <key>No duplicates allowed: action '</key>
     </entry>
     <entry>
-      <key>Unlinked e-mails</key>
-      <value>Unverknüpfte E-Mails</value>
+      <key>Empty actions are not allowed!</key>
     </entry>
     <entry>
-      <key>Download</key>
-      <value>Herunterladen</value>
+      <key>Download template</key>
+      <value>Vorlage herunterladen</value>
     </entry>
     <entry>
-      <key>Turnover Current Year</key>
-      <value>Umsatz aktuelles Jahr</value>
+      <key>Bulk mail \"%0\" sent</key>
+      <value>Serienmail \"%0\" versendet</value>
     </entry>
     <entry>
-      <key>Permission Details</key>
+      <key>Entrydate (Year)</key>
+      <value>Eingangsdatum (Jahr)</value>
     </entry>
     <entry>
-      <key>Remaining tasks and appointments</key>
-      <value>Aufgaben und Termine, die noch ausstehen</value>
+      <key>Attributes must be unique!</key>
     </entry>
     <entry>
-      <key>Tasks for which I am responsible</key>
-      <value>Aufgaben, für die ich zuständig bin</value>
+      <key>Appointment checkup</key>
+      <value>Termin Vorschau</value>
     </entry>
     <entry>
-      <key>Shows unread notifications about different content, e.g. Appointments, serial mails, ...</key>
-      <value>Zeigt alle ungelesenen Benachrichtigungen mit verschiedenen Inhalten, z.B. zu Terminen, Serienmails</value>
+      <key>Appointment CheckUp</key>
+      <value>Termin Vorschau</value>
     </entry>
     <entry>
-      <key>Shows how many sales projects are in the various sales phases</key>
-      <value>Zeigt wie viele Vertriebsprojekte in den einzelnen Vertriebsphasen sind</value>
+      <key>Permissions without actions are invalid!</key>
     </entry>
     <entry>
-      <key>Most important salse key figures</key>
+      <key>This error should never appear - contact administrator (PermissionDetail_entity.PermissionAction.onValidation).</key>
     </entry>
     <entry>
-      <key>Shows the organisations turnover and forecast</key>
-      <value>Zeigt den Umsatz und den Forecast der Firma für den Zeitraum von 4 Jahren</value>
+      <key>Empty actions are invalid!</key>
     </entry>
     <entry>
-      <key>Campaign management</key>
-      <value>Kampagnenmanagement</value>
+      <key>Problem</key>
     </entry>
     <entry>
-      <key>Campaign costs</key>
-      <value>Kampagnenkosten</value>
+      <key>%0 attachments:</key>
+      <value>%0 Anhänge:</value>
     </entry>
     <entry>
-      <key>Shows all campaigns</key>
-      <value>Alle Kampagnen anzeigen</value>
+      <key>%0 attachment:</key>
+      <value>%0 Anhang:</value>
     </entry>
     <entry>
-      <key>Shows campaing costs graphically processed</key>
-      <value>Kampagnenkosten graphisch aufbereitet</value>
+      <key>Please select a documenttemplate or upload a new file.</key>
+      <value>Bitte wählen Sie eine Dokumentenvorlage oder laden Sie eine neue Datei hoch.</value>
     </entry>
     <entry>
-      <key>Shows linked appointments</key>
-      <value>Verknüpfte Termine anzeigen</value>
+      <key>processed %0/%1:</key>
+      <value>%0/%1 verarbeitet:</value>
     </entry>
     <entry>
-      <key>Possibility to search for terms</key>
-      <value>Möglichkeit nach Begriffen zu suchen</value>
+      <key>processing %0/%1</key>
+      <value>verarbeite %0/%1:</value>
     </entry>
     <entry>
-      <key>1</key>
+      <key>no attachments</key>
+      <value>keine Anhänge</value>
     </entry>
     <entry>
-      <key>2</key>
+      <key>Recipients: %0</key>
+      <value>Empfänger: %0</value>
     </entry>
     <entry>
-      <key>versendet</key>
+      <key>Sender: %0</key>
     </entry>
     <entry>
-      <key>Netto</key>
+      <key>Offer Id</key>
     </entry>
     <entry>
-      <key>Währung</key>
+      <key>1</key>
     </entry>
     <entry>
-      <key>Transfer to Invoice</key>
-      <value>In Rechnung übertragen</value>
+      <key>2</key>
     </entry>
     <entry>
-      <key>Pay due date</key>
-      <value>Zahlungsziel</value>
+      <key>Theme</key>
     </entry>
     <entry>
       <key>Invoice</key>
       <value>Rechnung</value>
     </entry>
-    <entry>
-      <key>Payment address</key>
-      <value>Zahlungsadresse</value>
-    </entry>
     <entry>
       <key>Receipt Footer Text</key>
-      <value>Beleg Fußtext</value>
     </entry>
     <entry>
-      <key>Texts</key>
-      <value>Texte</value>
+      <key>Delivery note</key>
+      <value>Lieferschein</value>
     </entry>
     <entry>
-      <key>keine Standard-E-Mail Büro vorhanden !</key>
+      <key>Name latin</key>
     </entry>
     <entry>
-      <key>Delivery note</key>
-      <value>Lieferschein</value>
+      <key>Order confirmation</key>
+      <value>Auftragsbestätigung</value>
     </entry>
     <entry>
-      <key>Belegdatum</key>
+      <key>Email blocked</key>
     </entry>
     <entry>
-      <key>Firma</key>
+      <key>Email address does not exist</key>
     </entry>
     <entry>
-      <key>Choose payment address</key>
-      <value>Zahlungsadresse auswählen</value>
+      <key>Receipt Header Text</key>
     </entry>
     <entry>
-      <key>Paid</key>
-      <value>Bezahlt</value>
+      <key>Cancellation</key>
+      <value>Stornierung</value>
     </entry>
     <entry>
-      <key>Dunning level</key>
-      <value>Mahnstufe</value>
+      <key>Vacation examination by</key>
     </entry>
     <entry>
-      <key>Order confirmation</key>
-      <value>Auftragsbestätigung</value>
+      <key>Vacation approval by</key>
     </entry>
     <entry>
-      <key>Beleg</key>
+      <key>Credit</key>
+      <value>Gutschrift</value>
     </entry>
     <entry>
-      <key>Order Type</key>
-      <value>Belegtyp</value>
+      <key>The replacement name has to be unique.</key>
     </entry>
     <entry>
-      <key>Notice</key>
-      <value>Notiz</value>
+      <key>Only .odt files are supported for bulkletters.</key>
     </entry>
     <entry>
-      <key>Bitte einen Adressat in 'to' eintragen!</key>
+      <key>Show tickets where I am the editor</key>
+      <value>Zeigt Tickets an, in denen ich der Bearbeiter bin</value>
     </entry>
     <entry>
-      <key>Receipt Header Text</key>
-      <value>Beleg Kopftext</value>
+      <key>Wrong filetype for the current document template type and classification.</key>
     </entry>
     <entry>
-      <key>Dunning text</key>
-      <value>Mahnungstext</value>
+      <key>Use template attachments</key>
     </entry>
     <entry>
-      <key>Choose delivery address</key>
-      <value>Lieferadresse auswählen</value>
+      <key>My tickets</key>
+      <value>Meine Tickets</value>
     </entry>
     <entry>
-      <key>Cancellation</key>
-      <value>Storno</value>
+      <key>HTML template - Only for .html</key>
     </entry>
     <entry>
-      <key>Links</key>
+      <key>Preview</key>
     </entry>
     <entry>
-      <key>geprüft</key>
+      <key>Plaintext template - Only for .txt and .html</key>
     </entry>
     <entry>
-      <key>Set dunning</key>
-      <value>Mahnstufe setzen</value>
+      <key>Action not supported</key>
     </entry>
     <entry>
-      <key>Beleg-Nr.</key>
+      <key>Replacement name</key>
     </entry>
     <entry>
-      <key>Cancel</key>
-      <value>Stornieren</value>
+      <key>Copy bulkmail</key>
+      <value>Kopiere Serienmail</value>
     </entry>
     <entry>
-      <key>Set to sent</key>
-      <value>Versendet setzen</value>
+      <key>Count template attachments</key>
+      <value>Anzahl Vorlagenanhänge</value>
     </entry>
     <entry>
-      <key>Set paid amount</key>
-      <value>Bezahlten Betrag setzen</value>
+      <key>Private person</key>
+      <value>Privatperson</value>
     </entry>
     <entry>
-      <key>Belegliste</key>
+      <key>Student/Internship</key>
+      <value>Student/Praktikant</value>
     </entry>
     <entry>
-      <key>Pay date</key>
-      <value>Zahlungseingang</value>
+      <key>Counsellor</key>
+      <value>Berater</value>
     </entry>
     <entry>
-      <key>Transfer to delivery note</key>
-      <value>In Lieferschein übertragen</value>
+      <key> User</key>
     </entry>
     <entry>
-      <key>Dunning date</key>
-      <value>Mahndatum</value>
+      <key>Interests</key>
+      <value>Interessen</value>
     </entry>
     <entry>
-      <key>Credit</key>
-      <value>Gutschrift</value>
+      <key>Project type</key>
+      <value>Projektart</value>
     </entry>
     <entry>
-      <key>Print order</key>
-      <value>Beleg drucken</value>
+      <key>Additional data</key>
+      <value>zusätzliche Daten</value>
     </entry>
     <entry>
-      <key>Adds the selection to a bulk mail</key>
+      <key>Delivery problems</key>
+      <value>Lieferprobleme</value>
     </entry>
     <entry>
-      <key>Order number</key>
-      <value>Belegsnummer</value>
+      <key>Total time</key>
     </entry>
     <entry>
-      <key>Permission Action</key>
+      <key>Assembly</key>
+      <value>Montage</value>
     </entry>
     <entry>
-      <key>Filter</key>
+      <key>Support Ticket</key>
+      <value>Supportticket</value>
     </entry>
     <entry>
-      <key>Adds the selection to a serial letter</key>
+      <key>Call from %0</key>
+      <value>Anruf von %0</value>
     </entry>
     <entry>
-      <key>Actions</key>
+      <key>Notice</key>
+      <value>Notiz</value>
     </entry>
     <entry>
-      <key>Reminder</key>
-      <value>Mahnung</value>
+      <key>Transfer to delivery note</key>
+      <value>In Lieferschein übertragen</value>
     </entry>
     <entry>
-      <key>Print reminder</key>
-      <value>Mahnung drucken</value>
+      <key>Private persons</key>
+      <value>Privatpersonen</value>
     </entry>
     <entry>
-      <key>Rech.-Betrag</key>
+      <key>The contract number already exists!</key>
     </entry>
     <entry>
-      <key>Order date</key>
-      <value>Belegsdatum</value>
+      <key>Morocco</key>
     </entry>
     <entry>
-      <key>Due date</key>
-      <value>Mahndatum</value>
+      <key>Colombia</key>
     </entry>
     <entry>
-      <key>Order amount</key>
+      <key>Password</key>
     </entry>
     <entry>
-      <key>Mahnung</key>
+      <key>archieve</key>
     </entry>
     <entry>
-      <key>Due</key>
-      <value>Fällig</value>
+      <key>Bangladesh</key>
     </entry>
     <entry>
-      <key>Only </key>
+      <key>Total VAT</key>
     </entry>
     <entry>
-      <key>Theme</key>
-      <value>Thema</value>
+      <key>DataPrivacy Use</key>
     </entry>
     <entry>
-      <key>Action '</key>
+      <key>Faroe Islands</key>
     </entry>
     <entry>
-      <key>No duplicates allowed: action '</key>
+      <key>${CONTRACT_STATUS}</key>
     </entry>
     <entry>
-      <key>Empty actions are not allowed!</key>
+      <key>Time in minutes</key>
     </entry>
     <entry>
-      <key>Download template</key>
-      <value>Vorlage herunterladen</value>
+      <key>the number of your applications</key>
     </entry>
     <entry>
-      <key>Bulk mail \"%0\" sent</key>
+      <key>Displays the amounts of my personal forecast and the turnover I have already made</key>
     </entry>
     <entry>
-      <key>This error should never appear - contact administrator.</key>
+      <key>My Keyfigures</key>
+      <value>Mein Umsatz und Forecast</value>
     </entry>
     <entry>
-      <key>Entrydate (Year)</key>
-      <value>Eingangsdatum (Jahr)</value>
+      <key>My Forecast and Turnover </key>
+      <value>Mein Forecast und Umsatz</value>
     </entry>
     <entry>
-      <key>Attributes must be unique!</key>
+      <key>Shows my Forecast and Turnover for the actual year</key>
+      <value>Zeigt meinen Forecast und meinen Umsatz für das aktuelle Jahr</value>
     </entry>
     <entry>
-      <key>Permissions without actions are not allowed!</key>
+      <key>My Forecast and Turnover</key>
+      <value>Mein Forecast und Umsatz</value>
     </entry>
     <entry>
       <key>The combination of filter name and target entity is already in use</key>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 53c5a0442434e372703f8ed8cb27959ab00f6b95..675269a5927cd6ea37d5051c129e5ee66b2fb5bb 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -169,15 +169,9 @@
     <entry>
       <key>Switzerland</key>
     </entry>
-    <entry>
-      <key>Internal (2)</key>
-    </entry>
     <entry>
       <key>Company Addresses</key>
     </entry>
-    <entry>
-      <key>yyyyMMdd</key>
-    </entry>
     <entry>
       <key>standard address</key>
     </entry>
@@ -844,9 +838,6 @@
     <entry>
       <key>Total</key>
     </entry>
-    <entry>
-      <key>yearly series not specified</key>
-    </entry>
     <entry>
       <key>no standard email office</key>
     </entry>
@@ -862,15 +853,9 @@
     <entry>
       <key>Deliveryspecification</key>
     </entry>
-    <entry>
-      <key>Ignore daily series</key>
-    </entry>
     <entry>
       <key>Tentative</key>
     </entry>
-    <entry>
-      <key>Ignore series</key>
-    </entry>
     <entry>
       <key>Plus Salestax</key>
     </entry>
@@ -3740,9 +3725,6 @@
     <entry>
       <key>No risk</key>
     </entry>
-    <entry>
-      <key>Urlaubsprüfung durch</key>
-    </entry>
     <entry>
       <key>Acquisition</key>
     </entry>
@@ -4169,9 +4151,6 @@
     <entry>
       <key>Next steps</key>
     </entry>
-    <entry>
-      <key>Urlaubsgenehmigung durch</key>
-    </entry>
     <entry>
       <key>Assessment</key>
     </entry>
@@ -4415,9 +4394,6 @@
     <entry>
       <key>Data Privacy</key>
     </entry>
-    <entry>
-      <key>other personal data</key>
-    </entry>
     <entry>
       <key>LinkedIn</key>
     </entry>
@@ -4448,15 +4424,6 @@
     <entry>
       <key>DataPrivacy Use</key>
     </entry>
-    <entry>
-      <key>No data has been anonymized.</key>
-    </entry>
-    <entry>
-      <key>The following data has been anonymised: %0</key>
-    </entry>
-    <entry>
-      <key>DSGVO anonymisation</key>
-    </entry>
     <entry>
       <key>Update data privacy information</key>
     </entry>
@@ -4904,51 +4871,21 @@
     <entry>
       <key>Possibility to search for terms</key>
     </entry>
-    <entry>
-      <key>1</key>
-    </entry>
-    <entry>
-      <key>2</key>
-    </entry>
-    <entry>
-      <key>versendet</key>
-    </entry>
-    <entry>
-      <key>Netto</key>
-    </entry>
-    <entry>
-      <key>Währung</key>
-    </entry>
     <entry>
       <key>Transfer to Invoice</key>
     </entry>
     <entry>
       <key>Pay due date</key>
     </entry>
-    <entry>
-      <key>Invoice</key>
-    </entry>
     <entry>
       <key>Payment address</key>
     </entry>
-    <entry>
-      <key>Receipt Footer Text</key>
-    </entry>
     <entry>
       <key>Texts</key>
     </entry>
     <entry>
       <key>keine Standard-E-Mail Büro vorhanden !</key>
     </entry>
-    <entry>
-      <key>Delivery note</key>
-    </entry>
-    <entry>
-      <key>Belegdatum</key>
-    </entry>
-    <entry>
-      <key>Firma</key>
-    </entry>
     <entry>
       <key>Choose payment address</key>
     </entry>
@@ -4958,9 +4895,6 @@
     <entry>
       <key>Dunning level</key>
     </entry>
-    <entry>
-      <key>Order confirmation</key>
-    </entry>
     <entry>
       <key>Beleg</key>
     </entry>
@@ -4973,30 +4907,18 @@
     <entry>
       <key>Bitte einen Adressat in 'to' eintragen!</key>
     </entry>
-    <entry>
-      <key>Receipt Header Text</key>
-    </entry>
     <entry>
       <key>Dunning text</key>
     </entry>
     <entry>
       <key>Choose delivery address</key>
     </entry>
-    <entry>
-      <key>Cancellation</key>
-    </entry>
     <entry>
       <key>Links</key>
     </entry>
-    <entry>
-      <key>geprüft</key>
-    </entry>
     <entry>
       <key>Set dunning</key>
     </entry>
-    <entry>
-      <key>Beleg-Nr.</key>
-    </entry>
     <entry>
       <key>Cancel</key>
     </entry>
@@ -5006,9 +4928,6 @@
     <entry>
       <key>Set paid amount</key>
     </entry>
-    <entry>
-      <key>Belegliste</key>
-    </entry>
     <entry>
       <key>Pay date</key>
     </entry>
@@ -5018,18 +4937,12 @@
     <entry>
       <key>Dunning date</key>
     </entry>
-    <entry>
-      <key>Credit</key>
-    </entry>
     <entry>
       <key>Print order</key>
     </entry>
     <entry>
       <key>Create activities</key>
     </entry>
-    <entry>
-      <key>Adds the selection to a bulk mail</key>
-    </entry>
     <entry>
       <key>Order number</key>
     </entry>
@@ -5042,9 +4955,6 @@
     <entry>
       <key>Recipient status</key>
     </entry>
-    <entry>
-      <key>Adds the selection to a serial letter</key>
-    </entry>
     <entry>
       <key>Actions</key>
     </entry>
@@ -5075,9 +4985,6 @@
     <entry>
       <key>Due</key>
     </entry>
-    <entry>
-      <key>Testing contact</key>
-    </entry>
     <entry>
       <key>Recipient address</key>
     </entry>
@@ -5088,52 +4995,181 @@
       <key>Save settings</key>
     </entry>
     <entry>
-      <key>No calls</key>
+      <key>Only </key>
     </entry>
     <entry>
-      <key>No mails</key>
+      <key>Action '</key>
     </entry>
     <entry>
-      <key>No fax</key>
+      <key>No duplicates allowed: action '</key>
     </entry>
     <entry>
-      <key>No SMS</key>
+      <key>Empty actions are not allowed!</key>
     </entry>
     <entry>
-      <key>No letters</key>
+      <key>Download template</key>
     </entry>
     <entry>
-      <key>Only </key>
+      <key>Bulk mail \"%0\" sent</key>
+    </entry>
+    <entry>
+      <key>Entrydate (Year)</key>
+    </entry>
+    <entry>
+      <key>Attributes must be unique!</key>
+    </entry>
+    <entry>
+      <key>Open tasks</key>
+    </entry>
+    <entry>
+      <key>Appointment checkup</key>
+    </entry>
+    <entry>
+      <key>Appointment CheckUp</key>
+    </entry>
+    <entry>
+      <key>Permissions without actions are invalid!</key>
+    </entry>
+    <entry>
+      <key>This error should never appear - contact administrator (PermissionDetail_entity.PermissionAction.onValidation).</key>
+    </entry>
+    <entry>
+      <key>Empty actions are invalid!</key>
+    </entry>
+    <entry>
+      <key>Problem</key>
+    </entry>
+    <entry>
+      <key>%0 attachments:</key>
+    </entry>
+    <entry>
+      <key>%0 attachment:</key>
+    </entry>
+    <entry>
+      <key>Please select a documenttemplate or upload a new file.</key>
+    </entry>
+    <entry>
+      <key>processed %0/%1:</key>
+    </entry>
+    <entry>
+      <key>processing %0/%1</key>
+    </entry>
+    <entry>
+      <key>no attachments</key>
+    </entry>
+    <entry>
+      <key>Recipients: %0</key>
+    </entry>
+    <entry>
+      <key>Sender: %0</key>
+    </entry>
+    <entry>
+      <key>1</key>
+    </entry>
+    <entry>
+      <key>2</key>
     </entry>
     <entry>
       <key>Theme</key>
     </entry>
     <entry>
-      <key>Action '</key>
+      <key>Invoice</key>
     </entry>
     <entry>
-      <key>No duplicates allowed: action '</key>
+      <key>Receipt Footer Text</key>
     </entry>
     <entry>
-      <key>Empty actions are not allowed!</key>
+      <key>Delivery note</key>
     </entry>
     <entry>
-      <key>Download template</key>
+      <key>Order confirmation</key>
     </entry>
     <entry>
-      <key>Bulk mail \"%0\" sent</key>
+      <key>Email blocked</key>
     </entry>
     <entry>
-      <key>This error should never appear - contact administrator.</key>
+      <key>Email address does not exist</key>
     </entry>
     <entry>
-      <key>Entrydate (Year)</key>
+      <key>Receipt Header Text</key>
     </entry>
     <entry>
-      <key>Permissions without actions are not allowed!</key>
+      <key>Cancellation</key>
     </entry>
     <entry>
-      <key>Attributes must be unique!</key>
+      <key>Vacation examination by</key>
+    </entry>
+    <entry>
+      <key>Vacation approval by</key>
+    </entry>
+    <entry>
+      <key>Credit</key>
+    </entry>
+    <entry>
+      <key>The replacement name has to be unique.</key>
+    </entry>
+    <entry>
+      <key>Only .odt files are supported for bulkletters.</key>
+    </entry>
+    <entry>
+      <key>Show tickets where I am editor</key>
+    </entry>
+    <entry>
+      <key>My Turnover</key>
+    </entry>
+    <entry>
+      <key>Wrong filetype for the current document template type and classification.</key>
+    </entry>
+    <entry>
+      <key>Use template attachments</key>
+    </entry>
+    <entry>
+      <key>My tickets</key>
+    </entry>
+    <entry>
+      <key>HTML template - Only for .html</key>
+    </entry>
+    <entry>
+      <key>Preview</key>
+    </entry>
+    <entry>
+      <key>My Forecast</key>
+    </entry>
+    <entry>
+      <key>Plaintext template - Only for .txt and .html</key>
+    </entry>
+    <entry>
+      <key>Action not supported</key>
+    </entry>
+    <entry>
+      <key>Replacement name</key>
+    </entry>
+    <entry>
+      <key>Copy bulkmail</key>
+    </entry>
+    <entry>
+      <key>Count template attachments</key>
+    </entry>
+    <entry>
+      <key>Private persons</key>
+    </entry>
+    <entry>
+      <key>Private person</key>
+    </entry>
+    <entry>
+      <key>Displays the amounts of my personal forecast and the turnover I have already made</key>
+    </entry>
+    <entry>
+      <key>My Keyfigures</key>
+    </entry>
+    <entry>
+      <key>My Forecast and Turnover </key>
+    </entry>
+    <entry>
+      <key>Shows my Forecast and Turnover for the actual year</key>
+    </entry>
+    <entry>
+      <key>My Forecast and Turnover</key>
     </entry>
     <entry>
       <key>Export letter</key>
diff --git a/neonContext/Appointment/Appointment.aod b/neonContext/Appointment/Appointment.aod
index 67da92ae2faee58f5e7fe5e08c9a7c212f32ca27..276dc413dd1362ed6483776cddb92d0db8ad5787 100644
--- a/neonContext/Appointment/Appointment.aod
+++ b/neonContext/Appointment/Appointment.aod
@@ -1,31 +1,35 @@
-<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>Appointment</name>
-  <title>Termin</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/neonContext/Appointment/documentation.adoc</documentation>
-  <icon>VAADIN:CALENDAR</icon>
-  <mainview>AppointmentEdit_view</mainview>
-  <filterview>AppointmentPreview_view</filterview>
-  <editview>AppointmentEdit_view</editview>
-  <preview>AppointmentPreview_view</preview>
-  <entity>Appointment_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>90fe74fe-9bc6-4f63-9c06-52e1b0ccfcb3</name>
-      <view>AppointmentEdit_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>9cf48e57-ca02-4cee-911c-20b09e36637d</name>
-      <view>AppointmentPreview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>2a5e05b2-3f12-43b4-a3f4-3c31dbe0dace</name>
-      <view>AppointmentFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>de97b676-6504-4edc-96ba-77ff8483a3a0</name>
-      <view>AppointmentFilterDashlet_view</view>
-    </neonViewReference>
-  </references>
-</neonContext>
+<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>Appointment</name>
+  <title>Termin</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/neonContext/Appointment/documentation.adoc</documentation>
+  <icon>VAADIN:CALENDAR</icon>
+  <mainview>AppointmentEdit_view</mainview>
+  <filterview>AppointmentPreview_view</filterview>
+  <editview>AppointmentEdit_view</editview>
+  <preview>AppointmentPreview_view</preview>
+  <entity>Appointment_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>90fe74fe-9bc6-4f63-9c06-52e1b0ccfcb3</name>
+      <view>AppointmentEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>9cf48e57-ca02-4cee-911c-20b09e36637d</name>
+      <view>AppointmentPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>2a5e05b2-3f12-43b4-a3f4-3c31dbe0dace</name>
+      <view>AppointmentFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>de97b676-6504-4edc-96ba-77ff8483a3a0</name>
+      <view>AppointmentFilterDashlet_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>2f707344-d5ef-4abc-99d9-b6eec3318ae5</name>
+      <view>AppointmentCheckUp_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/Appointment/documentation.adoc b/neonContext/Appointment/documentation.adoc
index 5d82bff15ff9bb7817312c026035c23aac82e6a9..738818874e16b168726de7549ed0f88fdf028167 100644
--- a/neonContext/Appointment/documentation.adoc
+++ b/neonContext/Appointment/documentation.adoc
@@ -2,7 +2,7 @@
 
 :hardbreaks:
 
-This context handels all the needs of appointments for the Adito calendar.
+This context handling all the needs of appointments for the Adito calendar.
 Even with an exchange connection. Wow.
 
 == Important!
diff --git a/neonContext/Attribute/Attribute.aod b/neonContext/Attribute/Attribute.aod
index b5df2588451587bfb01da4465a6211ce5bdd4988..41c89314536548dde56af8bad6207bdf8b893c5b 100644
--- a/neonContext/Attribute/Attribute.aod
+++ b/neonContext/Attribute/Attribute.aod
@@ -7,6 +7,7 @@
   <filterview>AttributeFilter_view</filterview>
   <editview>AttributeEdit_view</editview>
   <preview>AttributePreview_view</preview>
+  <lookupview>AttributeLookup_view</lookupview>
   <entity>Attribute_entity</entity>
   <references>
     <neonViewReference>
@@ -25,5 +26,9 @@
       <name>6ab8d733-544c-4e48-ade9-b5210a5e5355</name>
       <view>AttributeTree_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>a380915a-6946-4923-9b13-7a981606ce60</name>
+      <view>AttributeLookup_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Contact/Contact.aod b/neonContext/Contact/Contact.aod
index 90ffc09e088b096753d5484199a057e08d5db395..48183dfe0b31955090924fe5ac1631139778aa3e 100644
--- a/neonContext/Contact/Contact.aod
+++ b/neonContext/Contact/Contact.aod
@@ -13,5 +13,9 @@
       <name>dde4fdab-4a5e-4183-8d4d-4e96d34054c7</name>
       <view>ContactList_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>16736185-107f-4ef9-bd38-a01ff0b4f618</name>
+      <view>ContactTitledList_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/DocumentTemplateTypeCategory/DocumentTemplateTypeCategory.aod b/neonContext/DocumentTemplateTypeCategory/DocumentTemplateTypeCategory.aod
index ad75f71610b6d0e768955aff86aa94ae59e410f8..6fdc32935be9b99930ffc180d1f4aa888a98ac8a 100644
--- a/neonContext/DocumentTemplateTypeCategory/DocumentTemplateTypeCategory.aod
+++ b/neonContext/DocumentTemplateTypeCategory/DocumentTemplateTypeCategory.aod
@@ -2,5 +2,13 @@
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
   <name>DocumentTemplateTypeCategory</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterview>DocumentTemplateTypeCategoryFilter_view</filterview>
+  <lookupview>DocumentTemplateTypeCategoryFilter_view</lookupview>
   <entity>DocumentTemplateTypeCategory_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>39ed18c7-8c74-4129-a07d-d4cd5ed79cd3</name>
+      <view>DocumentTemplateTypeCategoryFilter_view</view>
+    </neonViewReference>
+  </references>
 </neonContext>
diff --git a/neonContext/Options/Options.aod b/neonContext/Options/Options.aod
deleted file mode 100644
index ca93a799a06f0f6ac3e9eb79a3b816fb1cd5411e..0000000000000000000000000000000000000000
--- a/neonContext/Options/Options.aod
+++ /dev/null
@@ -1,23 +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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>Options</name>
-  <title>Options</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <mainview>Options_View</mainview>
-  <editview>Options_View</editview>
-  <entity>Options_Entity</entity>
-  <references>
-    <neonViewReference>
-      <name>41b764ba-7d8f-4f54-8d88-808038ff01a2</name>
-      <view>Options_View</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>c3116b4a-d4a1-4851-9587-5a3e4617e8a6</name>
-      <view>Options1_View</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>7d218935-8b37-4506-89f0-778ad6e7ae06</name>
-      <view>Options2_View</view>
-    </neonViewReference>
-  </references>
-</neonContext>
diff --git a/neonContext/PermissionAction/PermissionAction.aod b/neonContext/PermissionAction/PermissionAction.aod
index d59ee2df144a9e3cff48b0f6a69a2063c6ab5a71..28f4f791d250e5bbaf7b4dc692de501fd7e47fef 100644
--- a/neonContext/PermissionAction/PermissionAction.aod
+++ b/neonContext/PermissionAction/PermissionAction.aod
@@ -13,5 +13,9 @@
       <name>2d27ce8b-7676-4db8-9644-006b2d83d61f</name>
       <view>PermissionActionFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>c1262905-77d0-42fa-9678-26895eff6cc4</name>
+      <view>PermissionActionList_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/PrivatePerson/PrivatePerson.aod b/neonContext/PrivatePerson/PrivatePerson.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3b5a28fc3eaab439d677c59f1fa7421b42b71cf8
--- /dev/null
+++ b/neonContext/PrivatePerson/PrivatePerson.aod
@@ -0,0 +1,20 @@
+<?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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>PrivatePerson</name>
+  <title>Private person</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterview>PrivatePersonFilter_view</filterview>
+  <preview>PrivatePersonPreview_view</preview>
+  <lookupview>PrivatePersonFilter_view</lookupview>
+  <entity>PrivatePerson_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>deed8653-0c07-48d7-b41f-5243b9ca0aee</name>
+      <view>PrivatePersonFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>3a313893-12c6-4584-997b-e7d2379d091c</name>
+      <view>PrivatePersonPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/SalesprojectAnalyses/SalesprojectAnalyses.aod b/neonContext/SalesprojectAnalyses/SalesprojectAnalyses.aod
index 712d9ac63b328dc3ce8ad4d8392833abb7997703..6bd2147f73b6d97849169c044ddcffdf39f2ad18 100644
--- a/neonContext/SalesprojectAnalyses/SalesprojectAnalyses.aod
+++ b/neonContext/SalesprojectAnalyses/SalesprojectAnalyses.aod
@@ -12,5 +12,9 @@
       <name>ccb97c28-966a-4206-b981-140e87e680bf</name>
       <view>SalesprojectScoreCard_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>061f17e3-6dfc-4908-8bc0-b0a70a6969cb</name>
+      <view>MyTurnoverForecastScoreCard_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/SerialLetter/SerialLetter.aod b/neonContext/SerialLetter/SerialLetter.aod
index 1502915f9ebe1d5a64918e68f77db2d20998faa9..f03c5a6cb27ae37e1fd93ff8ebf0127969d61f3d 100644
--- a/neonContext/SerialLetter/SerialLetter.aod
+++ b/neonContext/SerialLetter/SerialLetter.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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
   <name>SerialLetter</name>
+  <title>Serial letter</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <mainview>SerialLetterMain_view</mainview>
   <filterview>SerialLetterFilter_view</filterview>
diff --git a/neonView/ActivityDetail_view/ActivityDetail_view.aod b/neonView/ActivityDetail_view/ActivityDetail_view.aod
index 3e27e5c05feca4c203ceb49506acd40d42f46985..70a6424c75a5ab4c6404cf43dfe7b002e956d4ce 100644
--- a/neonView/ActivityDetail_view/ActivityDetail_view.aod
+++ b/neonView/ActivityDetail_view/ActivityDetail_view.aod
@@ -11,20 +11,11 @@
     </boxLayout>
   </layout>
   <children>
-    <neonViewReference>
-      <name>f3e3d589-16a5-45a3-878f-7f00548c4370</name>
-      <entityField>ActivityAtrributes</entityField>
-      <view>AttributeTree_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>9a9c4df0-abec-42b8-af90-b9fe57f28337</name>
-      <entityField>AttributeTreeIsTheme</entityField>
-      <view>AttributeRelationTree_view</view>
-    </neonViewReference>
     <genericViewTemplate>
       <name>Generic</name>
       <showDrawer v="true" />
       <fixedDrawer v="true" />
+      <hideLabels v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod
index 6c5f95b50c631abaec7d35e3882b0b2f33e13a04..c5fd875ace54b3d6628af733355e7c1320ca3465 100644
--- a/neonView/ActivityEdit_view/ActivityEdit_view.aod
+++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod
@@ -20,6 +20,10 @@
           <name>290c8b73-4078-47eb-8009-a011f0ae670c</name>
           <entityField>SUBJECT</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>4a15411b-5bd7-45c5-bd6d-7cde461b12d9</name>
+          <entityField>bindata</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>b90a5d96-9d1f-4eeb-b42c-0debeb7cf260</name>
           <entityField>INFO</entityField>
diff --git a/neonView/ActivityFilter_view/ActivityFilter_view.aod b/neonView/ActivityFilter_view/ActivityFilter_view.aod
index c4d2350a98d8e1c2da7d56944d199034e3b706eb..cdfa6fd6a1ff149cc3518dcdb61eba518ed9e1e5 100644
--- a/neonView/ActivityFilter_view/ActivityFilter_view.aod
+++ b/neonView/ActivityFilter_view/ActivityFilter_view.aod
@@ -11,16 +11,13 @@
       <fragment>Activity/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles />
       <icon>VAADIN:HOURGLASS_END</icon>
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
           <title>Contactmanagement</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>activity</name>
-          <title>Activity</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
     <neonDashletConfiguration>
@@ -36,10 +33,6 @@
           <name>contactmanagement</name>
           <title>Contactmanagement</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>activity</name>
-          <title>Activity</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
@@ -94,33 +87,5 @@
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
-    <treeTableViewTemplate>
-      <name>ActivitiesTreeTable</name>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>4167708f-b5a4-42ed-848a-cf9bb604f083</name>
-          <entityField>entryDateDateFormat</entityField>
-          <width v="75" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>ec8f0488-9a9f-4114-8123-1bc21b1d1f68</name>
-          <entityField>#IMAGE</entityField>
-          <width v="75" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>c44d54b5-00b9-4faf-9934-687e3a417b73</name>
-          <entityField>RESPONSIBLE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>f7137699-ae62-48e0-9cd6-e06d37f87f94</name>
-          <entityField>SUBJECT</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>385231ab-204f-498a-8bf2-6fca3f59b7a5</name>
-          <entityField>INFO</entityField>
-        </neonTableColumn>
-      </columns>
-    </treeTableViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/ActivityMain_view/ActivityMain_view.aod b/neonView/ActivityMain_view/ActivityMain_view.aod
index ab6b487ce18af1700ed1a7461f8364c11239e52d..2d300e8eafaea909b754b098b2e8c16e38fcdef3 100644
--- a/neonView/ActivityMain_view/ActivityMain_view.aod
+++ b/neonView/ActivityMain_view/ActivityMain_view.aod
@@ -15,7 +15,7 @@
       <view>ActivityPreview_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>a3a45cd7-587f-4bc0-9980-e6d1c89a8212</name>
+      <name>fe0ed7a3-24eb-4a8b-8ba0-d570c3f63077</name>
       <entityField>#ENTITY</entityField>
       <view>ActivityDetail_view</view>
     </neonViewReference>
diff --git a/neonView/AddressList_view/AddressList_view.aod b/neonView/AddressList_view/AddressList_view.aod
index 10095234b558f9901fbf2462387c9117b99826dc..32133b60729fd3fcabecd38e4ad476e9556ae540 100644
--- a/neonView/AddressList_view/AddressList_view.aod
+++ b/neonView/AddressList_view/AddressList_view.aod
@@ -15,6 +15,7 @@
       <highlightingField>IS_STANDARD</highlightingField>
       <entityField>#ENTITY</entityField>
       <title></title>
+      <devices />
       <columns>
         <neonTableColumn>
           <name>dfaa01a1-0b11-4f92-aa18-89f12ebb2db5</name>
@@ -34,14 +35,26 @@
           <name>29dbb3f5-6f80-4100-aed3-334ac0b9cc48</name>
           <entityField>REGION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>e809ff52-e8f7-443a-bf34-7e36daa2de42</name>
+          <entityField>Zip_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>0336ea99-c4a1-4f39-b5aa-a520a7dcbaab</name>
           <entityField>ZIP</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>69734ec3-b7a6-4efd-8dab-5059975fab70</name>
+          <entityField>City_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>12727b21-0359-4430-a9c2-54eb48e2e864</name>
           <entityField>CITY</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>2e48e6ac-a524-49e7-ad71-a29f1dd68891</name>
+          <entityField>Address_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>4e5e6a4f-f43e-4861-a912-fb05e576f960</name>
           <entityField>ADDRESS</entityField>
diff --git a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
index e7a369269f249718e54c683682892202a415a3b0..90b97f765c2a1b8650fcc8cc6a5f663359cb0fd5 100644
--- a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
+++ b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
@@ -33,15 +33,27 @@
           <name>b62515bf-e89d-44a9-94ff-933766657fe5</name>
           <entityField>REGION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>b9379fcc-3212-488b-8f90-cade09c00f3c</name>
+          <entityField>Zip_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>c1372a93-cf83-4c55-90e6-3b6b352abebf</name>
           <entityField>ZIP</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>5a0d723a-8531-4330-957b-11a1be9d7eab</name>
+          <entityField>City_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>2e7ba632-36ad-4852-bcca-d75bcf3f7de1</name>
           <entityField>CITY</entityField>
           <width v="75" />
         </neonTableColumn>
+        <neonTableColumn>
+          <name>2c104842-2ca1-408d-81d6-e998c0a562f2</name>
+          <entityField>Address_ws</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>ac71d5eb-7ce7-41a0-91aa-5594f2238788</name>
           <entityField>ADDRESS</entityField>
diff --git a/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod b/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..10132c0bd99723d208e8c6074fb95309ba670aa5
--- /dev/null
+++ b/neonView/AppointmentCheckUp_view/AppointmentCheckUp_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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>AppointmentCheckUp_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>AppointmentCheckupDashletConfig</name>
+      <title>Appointment checkup</title>
+      <description>Appointment checkup for the selected day</description>
+      <fragment>Appointment/full</fragment>
+      <storeRoles>
+        <element>INTERNAL_ADMINISTRATOR</element>
+      </storeRoles>
+      <icon>VAADIN:CALENDAR</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>Calendar</name>
+          <title>Calendar</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <appointmentCheckUpViewTemplate>
+      <name>AppointmentCheckup</name>
+      <entityField>CHECKUP</entityField>
+      <title>Appointment CheckUp</title>
+    </appointmentCheckUpViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod b/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
index 509b780078a9944e235d8b1720dd9fcde0c3a1bc..0a1bec97ea00298b474e77e332f6b61e06e393e2 100644
--- a/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
+++ b/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
@@ -10,6 +10,9 @@
       <title>Linked Appointments</title>
       <description>Shows linked appointments</description>
       <fragment>Appointment/full</fragment>
+      <storeRoles>
+        <element>INTERNAL_ADMINISTRATOR</element>
+      </storeRoles>
       <icon>VAADIN:CALENDAR</icon>
       <categories>
         <neonDashletCategory>
diff --git a/neonView/AttributeEdit_view/AttributeEdit_view.aod b/neonView/AttributeEdit_view/AttributeEdit_view.aod
index 22e0de724ed6fcd70dd5ef7a4ea07dad3b81f8f0..65977d66fc49c5d79b373e746b8dcd16c682e7a5 100644
--- a/neonView/AttributeEdit_view/AttributeEdit_view.aod
+++ b/neonView/AttributeEdit_view/AttributeEdit_view.aod
@@ -38,6 +38,10 @@
           <name>c8a5f45e-8092-45f4-ac22-681700447235</name>
           <entityField>ATTRIBUTE_LEVEL</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>7f7616c5-d633-4ffd-b05e-51f9fed982c2</name>
+          <entityField>DROPDOWNFILTER</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <neonViewReference>
@@ -45,11 +49,5 @@
       <entityField>AttributeUsages</entityField>
       <view>AttributeUsageMultiEdit_view</view>
     </neonViewReference>
-    <filterTreeViewTemplate>
-      <name>FilterTree</name>
-      <entityNameField>DROPDOWNDEFINITION</entityNameField>
-      <filterField>DROPDOWNFILTER</filterField>
-      <entityField>#ENTITY</entityField>
-    </filterTreeViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/AttributeLookup_view/AttributeLookup_view.aod b/neonView/AttributeLookup_view/AttributeLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..95ca44e075940a7a14bab32b3a270774707c59f5
--- /dev/null
+++ b/neonView/AttributeLookup_view/AttributeLookup_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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>AttributeLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>9a69a2af-3186-4180-a665-016c30f1fbdc</name>
+          <entityField>FULL_ATTRIBUTE_NAME</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/AttributeTree_view/AttributeTree_view.aod b/neonView/AttributeTree_view/AttributeTree_view.aod
index 98ab9068d15e04a349e86f51fec6b2bba50642a8..4d8fc3533a9c2c2a6cfa5464351261aaee898481 100644
--- a/neonView/AttributeTree_view/AttributeTree_view.aod
+++ b/neonView/AttributeTree_view/AttributeTree_view.aod
@@ -1,22 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>AttributeTree_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <treeViewTemplate>
-      <name>Attributes</name>
-      <parentField>ATTRIBUTE_PARENT_ID</parentField>
-      <titleField>ATTRIBUTE_NAME</titleField>
-      <entryAction>openDetails</entryAction>
-      <entityField>#ENTITY</entityField>
-      <isCreatable v="false" />
-      <isEditable v="false" />
-      <isDeletable v="false" />
-    </treeViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>AttributeTree_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <treeViewTemplate>
+      <name>Attributes</name>
+      <parentField>ATTRIBUTE_PARENT_ID</parentField>
+      <titleField>FULL_ATTRIBUTE_NAME</titleField>
+      <entryAction>openDetails</entryAction>
+      <entityField>#ENTITY</entityField>
+      <isCreatable v="false" />
+      <isEditable v="false" />
+      <isDeletable v="false" />
+    </treeViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/BulkMailContent_view/BulkMailContent_view.aod b/neonView/BulkMailContent_view/BulkMailContent_view.aod
index 83d2fdaa7b9013c602ed68d980cab7a13e1cd1c3..a4aed1aa56551c6f8c7f85a06892e43e3ff5edba 100644
--- a/neonView/BulkMailContent_view/BulkMailContent_view.aod
+++ b/neonView/BulkMailContent_view/BulkMailContent_view.aod
@@ -35,6 +35,10 @@
           <name>af0d45a2-a96f-4031-a93d-62ac177efb43</name>
           <entityField>content</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>3843d183-f2ed-4cc3-9202-e2414e0fb594</name>
+          <entityField>viewmode_preview</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
index 6673a4671bd569e5f51055fce543bea35d3ca5b7..f070bf7a40a5ea6d197db719df04057ffbc60c6c 100644
--- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
+++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
@@ -9,18 +9,53 @@
   </layout>
   <children>
     <genericViewTemplate>
-      <name>BulkMail</name>
+      <name>Generic</name>
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>b68c65de-4ecd-4a23-9242-f85e7b708b1e</name>
+          <name>55842e88-7e2b-41ee-b564-3c2e3fb04125</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>upload</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
-          <name>40628318-2c0e-4324-b676-f7bda2740166</name>
+          <name>e85baf03-5847-4306-afe5-35e53c967260</name>
           <entityField>bindata</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>9c24c14a-a8ff-4387-83c9-cc0f8188dd24</name>
+          <entityField>USE_TEMPLATE_ATTACHMENTS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <genericViewTemplate>
+      <name>countAttachments</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>a2e781e3-31c6-4035-a81c-3114ec04a979</name>
+          <entityField>CountAttachments</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <genericViewTemplate>
+      <name>BulkMail</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
           <name>e363bda2-d8bf-456e-bcae-d1870408022a</name>
           <entityField>NAME</entityField>
@@ -41,9 +76,15 @@
           <name>06f08869-5a81-41cb-8c7e-51be6a7041a7</name>
           <entityField>DESCRIPTION</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <genericViewTemplate>
+      <name>Preview</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
-          <name>0a67f430-dbcd-4605-b626-ee6d715ab248</name>
-          <entityField>content</entityField>
+          <name>cd6a398f-de68-433d-aa67-4f1084ab4971</name>
+          <entityField>preview</entityField>
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
index 619e5a065cd6e9e9714589cdd1b17f2dd77730f7..dfcd3692b17eca3493c53f29f4cf89ac0f5dcee0 100644
--- a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
+++ b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
@@ -29,6 +29,14 @@
           <name>9ad2e3dd-5496-43f4-b6ff-5b2b8c1fb6db</name>
           <entityField>SUBJECT</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>735b4d0d-3730-4bd4-bf29-a3651b5e1e3c</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6bb9e1df-af54-45a5-a9b5-69bfe45e3491</name>
+          <entityField>DOCUMENTTEMPLATE_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>d8f9dce6-8c10-4235-b3c3-2d15d01586bc</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod
index d5529d583077bcfee3707cf20cca98d2b8928d40..9f2369cb8cc5807cb171cd9cc1b4da12a789b265 100644
--- a/neonView/BulkMailMain_view/BulkMailMain_view.aod
+++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod
@@ -19,6 +19,11 @@
       <entityField>#ENTITY</entityField>
       <view>BulkMailContent_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>9e1e1137-f0a8-45d5-8b91-6e36411be6f1</name>
+      <entityField>Activities</entityField>
+      <view>ActivityFilter_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 dc2079b658b5c2eb1cc5b75034f9ecb91dba28d3..2562211c30a9bfcd975a09d133fc2d525fbd9e70 100644
--- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
+++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
@@ -46,6 +46,10 @@
           <name>8bb72d39-3348-4bd6-b57d-f7f5ae573e73</name>
           <entityField>DESCRIPTION</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>65546b24-3f6d-4639-b144-491ff5c478c1</name>
+          <entityField>USE_TEMPLATE_ATTACHMENTS</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/CampaignCostChart_view/CampaignCostChart_view.aod b/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
index 3f59125e8e523cab4e5e7010e23a690d3d542b9a..15599baa63fe6d27f1c9ba03fd588fc8542fdfa6 100644
--- a/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
+++ b/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
@@ -1,40 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>CampaignCostChart_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <dashletConfigurations>
-    <neonDashletConfiguration>
-      <name>CampaignCostsChart</name>
-      <title>Campaign costs</title>
-      <description>Shows campaing costs graphically processed</description>
-      <fragment>Campaign/full</fragment>
-      <singleton v="true" />
-      <icon>VAADIN:MONEY</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>marketing</name>
-          <title>Marketing</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>campaignmanagement</name>
-          <title>Campaign management</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-  </dashletConfigurations>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <singleDataChartViewTemplate>
-      <name>SingleDataChart</name>
-      <chartType>DONUT</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <entityField>#ENTITY</entityField>
-    </singleDataChartViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>CampaignCostChart_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>CampaignCostsChart</name>
+      <title>Campaign costs</title>
+      <description>Shows campaing costs graphically processed</description>
+      <fragment>Campaign/full</fragment>
+      <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_Marketing</element>
+      </storeRoles>
+      <icon>VAADIN:MONEY</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>marketing</name>
+          <title>Marketing</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <singleDataChartViewTemplate>
+      <name>SingleDataChart</name>
+      <chartType>DONUT</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <entityField>#ENTITY</entityField>
+    </singleDataChartViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/CampaignFilter_view/CampaignFilter_view.aod b/neonView/CampaignFilter_view/CampaignFilter_view.aod
index 10ec1fbfe7d56ef510e8d2ad0730b11e0cbf1841..73542fcd0726a2b63f35ab9094e678e3e2001012 100644
--- a/neonView/CampaignFilter_view/CampaignFilter_view.aod
+++ b/neonView/CampaignFilter_view/CampaignFilter_view.aod
@@ -12,16 +12,15 @@
       <description>Show my campaigns</description>
       <fragment>Campaign/filter</fragment>
       <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_Marketing</element>
+      </storeRoles>
       <icon>NEON:GROUP_APPOINTMENT</icon>
       <categories>
         <neonDashletCategory>
           <name>marketing</name>
           <title>Marketing</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>campaignmanagement</name>
-          <title>Campaign management</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
@@ -36,16 +35,15 @@
       <description>Shows all campaigns</description>
       <fragment>Campaign/filter</fragment>
       <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_Marketing</element>
+      </storeRoles>
       <icon>NEON:GROUP_APPOINTMENT</icon>
       <categories>
         <neonDashletCategory>
           <name>marketing</name>
           <title>Marketing</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>campaignmanagement</name>
-          <title>Campaign management</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
diff --git a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
index a358574ccc0c52dc693cef1b8e6e3ff9da118567..a0ea82aea469e2543d7d231c21f153bde45fedae 100644
--- a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
+++ b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
@@ -1,40 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>ClassificationAdminEdit_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <isSmall v="true" />
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-      <autoHeight v="true" />
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>classification</name>
-      <editMode v="true" />
-      <showDrawer v="true" />
-      <drawerCaption>Classification</drawerCaption>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>c702f17c-af6c-4674-bbef-9586adfa3f3b</name>
-          <entityField>CLASSIFICATIONTYPE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>66ce2c02-1cd3-4867-91a6-825655d6d16a</name>
-          <entityField>CLASSIFICATIONGROUP</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>85cf625b-8ea4-4e6f-8b21-2e42314b46d6</name>
-          <entityField>SCORETYPE</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>cedafb39-a59c-480f-aeff-e6276ea4fb9e</name>
-      <entityField>ClassificationScores</entityField>
-      <view>ClassificationScoreMultipleEdit_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>ClassificationAdminEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <isSmall v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>classification</name>
+      <editMode v="true" />
+      <showDrawer v="false" />
+      <drawerCaption>Classification</drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>c702f17c-af6c-4674-bbef-9586adfa3f3b</name>
+          <entityField>CLASSIFICATIONTYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>66ce2c02-1cd3-4867-91a6-825655d6d16a</name>
+          <entityField>CLASSIFICATIONGROUP</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>85cf625b-8ea4-4e6f-8b21-2e42314b46d6</name>
+          <entityField>SCORETYPE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>cedafb39-a59c-480f-aeff-e6276ea4fb9e</name>
+      <entityField>ClassificationScores</entityField>
+      <view>ClassificationScoreMultipleEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/ContactEdit_view/ContactEdit_view.aod b/neonView/ContactEdit_view/ContactEdit_view.aod
index 9eb6099fa1931c5f8ba2578562a9101383a2eddd..113715cb3a65758ada8ffa0fda67097754788861 100644
--- a/neonView/ContactEdit_view/ContactEdit_view.aod
+++ b/neonView/ContactEdit_view/ContactEdit_view.aod
@@ -18,8 +18,8 @@
           <entityField>PERSON_TITLE</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>40d2367e-c197-424c-8442-9b04c7369e3a</name>
-          <entityField>ORGANISATION_ID</entityField>
+          <name>701a09fe-5b49-4579-8298-148f7d696dbe</name>
+          <entityField>ORGANISATION_CONTACTID</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>847e9231-d6df-4ead-903d-b70dbcd69333</name>
diff --git a/neonView/ContactList_view/ContactList_view.aod b/neonView/ContactList_view/ContactList_view.aod
index 5aa047e4afc7dea067e45a03a1b780e7ef0182b1..0c305d7470be57e70089293f42d377bf1541c724 100644
--- a/neonView/ContactList_view/ContactList_view.aod
+++ b/neonView/ContactList_view/ContactList_view.aod
@@ -16,7 +16,7 @@
       <columns>
         <neonTableColumn>
           <name>ef71b5ad-8581-4845-ae66-7df17d1459e0</name>
-          <entityField>ORGANISATION_ID</entityField>
+          <entityField>ORGANISATION_CONTACTID</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>a3f3a2b8-1f7a-4783-b080-1853df3d1613</name>
diff --git a/neonView/ContactTitledList_view/ContactTitledList_view.aod b/neonView/ContactTitledList_view/ContactTitledList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..cdfb2f5e567a4d6582b6d768f039bf4db4d3063a
--- /dev/null
+++ b/neonView/ContactTitledList_view/ContactTitledList_view.aod
@@ -0,0 +1,40 @@
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>ContactTitledList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>Contacts</name>
+      <titleField>ContactLink</titleField>
+      <titleFieldFullWidth v="true" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>9b7d71e4-55f1-46da-94a3-a30a2ccdbd00</name>
+          <entityField>ORGANISATION_CONTACTID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>dd6431bb-d3e6-4f03-af8b-fd7335945b8a</name>
+          <entityField>CONTACTROLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>49fb8998-a3ad-44bb-91bf-db5f49ee51a9</name>
+          <entityField>DEPARTMENT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>b5b303ad-b318-49dd-b326-7c9dfd46895c</name>
+          <entityField>POSITION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>77840c6d-abda-4f93-aec4-bb9b7a66ceec</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ContractFilter_view/ContractFilter_view.aod b/neonView/ContractFilter_view/ContractFilter_view.aod
index f8809576951a467c00e7825be45fbc407c8bc36f..5fc1ae1b6368b81f19158a7155392613b33067bd 100644
--- a/neonView/ContractFilter_view/ContractFilter_view.aod
+++ b/neonView/ContractFilter_view/ContractFilter_view.aod
@@ -11,16 +11,16 @@
       <fragment>Contract/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
       <icon>vaadin:form</icon>
       <categories>
         <neonDashletCategory>
           <name>sales</name>
           <title>Sales</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>contract</name>
-          <title>Contract</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
diff --git a/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod b/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
index b7bd922aa7df3f121444d6b2fcfd8d8d11d07126..f21d944f2853b7e2cc6ee83326e2b4c16a824582 100644
--- a/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
+++ b/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
@@ -1,61 +1,76 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>DocumentTemplateEdit_view</name>
-  <title>Document Template</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <icon>VAADIN:FILE_FONT</icon>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Details</name>
-      <editMode v="true" />
-      <showDrawer v="false" />
-      <entityField>#ENTITY</entityField>
-      <title></title>
-      <fields>
-        <entityFieldLink>
-          <name>63388992-5b40-4f1e-a2be-aa35bedbfd2e</name>
-          <entityField>BINDATA</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>5e68bfdb-b5c9-4ea0-8f5d-152e36262401</name>
-          <entityField>NAME</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>50b5fd96-ef75-41a6-90e8-d928d5cbd6fd</name>
-          <entityField>KIND</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>de86d66c-8281-4050-946b-a6b35bb01db8</name>
-          <entityField>CLASSIFICATION</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>49d5c94c-f2ba-42a5-aab7-82fecc649dea</name>
-          <entityField>ISOLANGUAGE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>bf313ea8-821a-4693-8ba2-4246ad8a4f62</name>
-          <entityField>texText</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>0fed8c5c-1be5-4599-938d-31241c4c9395</name>
-          <entityField>DESCRIPTION</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>2e118acd-473a-4587-9945-a0ca59012f40</name>
-      <entityField>Links</entityField>
-      <view>DocumentTemplateLinkMultiEdit_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>8111a7d1-efc0-4588-a5a7-d798b0a8c7bb</name>
-      <entityField>Attributes</entityField>
-      <view>AttributeRelationMultiEdit_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>DocumentTemplateEdit_view</name>
+  <title>Document Template</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:FILE_FONT</icon>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Details</name>
+      <editMode v="true" />
+      <showDrawer v="false" />
+      <entityField>#ENTITY</entityField>
+      <title></title>
+      <fields>
+        <entityFieldLink>
+          <name>63388992-5b40-4f1e-a2be-aa35bedbfd2e</name>
+          <entityField>BINDATA</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>5e68bfdb-b5c9-4ea0-8f5d-152e36262401</name>
+          <entityField>NAME</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>50b5fd96-ef75-41a6-90e8-d928d5cbd6fd</name>
+          <entityField>KIND</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>de86d66c-8281-4050-946b-a6b35bb01db8</name>
+          <entityField>CLASSIFICATION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>49d5c94c-f2ba-42a5-aab7-82fecc649dea</name>
+          <entityField>ISOLANGUAGE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>44f71053-c555-495c-93aa-ad28507677d5</name>
+          <entityField>REPLACEMENTNAME</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>2a9cfb3c-66d5-4a2e-ad23-d0240b447b7c</name>
+          <entityField>Content</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>0fed8c5c-1be5-4599-938d-31241c4c9395</name>
+          <entityField>DESCRIPTION</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>2e118acd-473a-4587-9945-a0ca59012f40</name>
+      <entityField>Links</entityField>
+      <view>DocumentTemplateLinkMultiEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>8111a7d1-efc0-4588-a5a7-d798b0a8c7bb</name>
+      <entityField>Attributes</entityField>
+      <view>AttributeRelationMultiEdit_view</view>
+    </neonViewReference>
+    <genericViewTemplate>
+      <name>preview</name>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+      <fields>
+        <entityFieldLink>
+          <name>2c39e2df-edab-4411-b611-214cfd7d1d92</name>
+          <entityField>Preview</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod b/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
index 9a9e593a2f186b5e266e5483d307a3b1b2f332af..5144dcf9b42d21a1536291acd25c0da1d7da29cb 100644
--- a/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
+++ b/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
@@ -40,6 +40,10 @@
           <name>0cb3d1b9-40af-4b0c-9fc0-14ab33e4967a</name>
           <entityField>DESCRIPTION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>965a6197-54fd-43f9-873c-c740643984ca</name>
+          <entityField>REPLACEMENTNAME</entityField>
+        </neonTableColumn>
       </columns>
     </treeTableViewTemplate>
   </children>
diff --git a/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod b/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
index c94205a24bc72cc2bd7940a4f3506aba6e32f6d0..9b7ac705d8c81ff7a60c0d3a2d63519badeb3124 100644
--- a/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
+++ b/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
@@ -1,23 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>DocumentTemplateLinkList_view</name>
-  <title>Attachments</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <drawerLayout>
-      <name>layout</name>
-      <layoutCaption>Attachments</layoutCaption>
-    </drawerLayout>
-  </layout>
-  <children>
-    <actionListViewTemplate>
-      <name>ActionList</name>
-      <titleField>DOCUMENTTEMPLATE_ID_CHILD</titleField>
-      <descriptionField></descriptionField>
-      <iconField>ICON</iconField>
-      <entryAction>OpenDocument</entryAction>
-      <entityField>#ENTITY</entityField>
-      <title>Attachments</title>
-    </actionListViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>DocumentTemplateLinkList_view</name>
+  <title>Attachments</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Attachments</layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <actionListViewTemplate>
+      <name>ActionList</name>
+      <titleField>DOCUMENTTEMPLATE_ID_CHILD</titleField>
+      <descriptionField></descriptionField>
+      <iconField>ICON</iconField>
+      <entryAction>OpenDocument</entryAction>
+      <entityField>#ENTITY</entityField>
+      <title>Attachments</title>
+    </actionListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod b/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
index 1c05831b09bd65f8631a61924b6b4e75b98f2b31..1d40d76bed890fe3e03539bb15f4dac082a06176 100644
--- a/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
+++ b/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
@@ -42,6 +42,10 @@
       <entityField>#ENTITY</entityField>
       <title></title>
       <fields>
+        <entityFieldLink>
+          <name>d2a2db3d-cf36-430d-82a3-d699951d073f</name>
+          <entityField>REPLACEMENTNAME</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>d58daf32-ba37-4de8-8bd9-131613d0426d</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod b/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c2dce23e94bf44567c7d6b45cdc06bcb78c628a4
--- /dev/null
+++ b/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>DocumentTemplateTypeCategoryFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>filter</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>a2cde19b-754c-4183-89a9-cbc064887a73</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/EmailEdit_view/EmailEdit_view.aod b/neonView/EmailEdit_view/EmailEdit_view.aod
index 1d353869f100f85eacc7ce06ce948d56ee7cef4c..b9de60cfeb3acd640b4b279f5f2ce772f54f0ef0 100644
--- a/neonView/EmailEdit_view/EmailEdit_view.aod
+++ b/neonView/EmailEdit_view/EmailEdit_view.aod
@@ -1,28 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>EmailEdit_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <isSmall v="true" />
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Generic</name>
-      <editMode v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>bfcf8766-7e6d-4240-9cbd-54abfc5a1883</name>
-          <entityField>RECIPIENT</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>72441756-f00d-42a7-bd3f-a6f7964891bc</name>
-          <entityField>DOCUMENT_TEMPLATE</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>EmailEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <isSmall v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>bfcf8766-7e6d-4240-9cbd-54abfc5a1883</name>
+          <entityField>RECIPIENT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>72441756-f00d-42a7-bd3f-a6f7964891bc</name>
+          <entityField>DOCUMENT_TEMPLATE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>Generic2</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>0db54c16-72f2-4df9-9ecc-e9ebaaedf20f</name>
+          <entityField>bindata</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
index b3f72e867df9b0f13c5d87a5ee22c7dc7a6b978a..0a893d71ad453e69697980a5ceb5de26087b7045 100644
--- a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
+++ b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
@@ -37,10 +37,6 @@
           <name>27c4199c-157a-4c3e-a851-01aa1d82dfd2</name>
           <entityField>LASTNAME</entityField>
         </neonTableColumn>
-        <neonTableColumn>
-          <name>dd2d35d1-b418-4ee5-ba37-85d22f574ee7</name>
-          <entityField>CONTACT_ID</entityField>
-        </neonTableColumn>
         <neonTableColumn>
           <name>f14b2144-bfd4-4016-a6e8-e7a7c7668d6f</name>
           <entityField>DEPARTMENT</entityField>
diff --git a/neonView/FacebookTimeline_view/FacebookTimeline_view.aod b/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
index 11be026a2f353d937fb623d21c3e22be971fc25b..f82b55232ea8c972250ba7adc0be33cda2a051f4 100644
--- a/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
+++ b/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
@@ -17,10 +17,6 @@
           <name>social</name>
           <title>Social Media</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>facebook</name>
-          <title>Facebook</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
@@ -41,10 +37,6 @@
           <name>social</name>
           <title>Social Media</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>facebook</name>
-          <title>Facebook</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
diff --git a/neonView/LetterEdit_view/LetterEdit_view.aod b/neonView/LetterEdit_view/LetterEdit_view.aod
index d6e86204f9feb58dcfa3645561eae152ca1cb9e8..55ce2aa2951316d4129bf0e5f13298ee30b61abf 100644
--- a/neonView/LetterEdit_view/LetterEdit_view.aod
+++ b/neonView/LetterEdit_view/LetterEdit_view.aod
@@ -1,28 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>LetterEdit_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <isSmall v="true" />
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Template</name>
-      <editMode v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>5919fb0b-13d8-4cd3-8110-89722d97f4e1</name>
-          <entityField>DOCUMENT_TEMPLATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>6513b2f4-d7c8-4bbe-b31a-290cf9bf7ded</name>
-          <entityField>bindata</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>LetterEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <isSmall v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Template</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>5919fb0b-13d8-4cd3-8110-89722d97f4e1</name>
+          <entityField>DOCUMENT_TEMPLATE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>352a7304-2308-4eea-8076-72e9d5c02a50</name>
+          <entityField>bindata</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod b/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
index b1e060e24f903f0c7cc13acc7dfb94ea20f63374..0452933bd514536a90bb2cf1196c1b84b2ae5088 100644
--- a/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
+++ b/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
@@ -12,12 +12,8 @@
       <icon>VAADIN:CLIPBOARD_CHECK</icon>
       <categories>
         <neonDashletCategory>
-          <name>tasks</name>
-          <title>Tasks</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>calendar</name>
-          <title>Calendar</title>
+          <name>contactmanagement</name>
+          <title>Contactmanagement</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
diff --git a/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod b/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6b5c2a62a5efc9c2b93a7a1e69a0537a546f9885
--- /dev/null
+++ b/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod
@@ -0,0 +1,47 @@
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>MyTurnoverForecastScoreCard_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>OwnForecastTurnover</name>
+      <title>My Forecast and Turnover</title>
+      <description>Shows my Forecast and Turnover for the actual year</description>
+      <fragment>SalesprojectAnalyses/full</fragment>
+      <singleton v="true" />
+      <icon>VAADIN:MONEY</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <scoreCardViewTemplate>
+      <name>MyTurnoverForecastScoreCard</name>
+      <entityField>#ENTITY</entityField>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <fields>
+        <entityFieldLink>
+          <name>2c7f674c-aff5-41a6-bf35-5d7af944611b</name>
+          <entityField>MY_FORECAST</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>3935bdc4-fd46-46af-85f3-3001cf33f955</name>
+          <entityField>MY_TURNOVER</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod b/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
index 2fbd96bac1c5c17a0d7e1a70a867efe6ea6c702c..76c9d2ed01cfe0bb0556f0fe0bb76e044e0578e9 100644
--- a/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
+++ b/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
@@ -10,6 +10,7 @@
   <children>
     <tableViewTemplate>
       <name>RelationTypes</name>
+      <favoriteActionGroup1>removeActionGroup</favoriteActionGroup1>
       <iconField>ICON</iconField>
       <subtitleField>SOURCE_OBJECT_TYPE</subtitleField>
       <entityField>#ENTITY</entityField>
diff --git a/neonView/OfferFilter_view/OfferFilter_view.aod b/neonView/OfferFilter_view/OfferFilter_view.aod
index 66a91c612d147a064e2b1761a86d40dfd6f2712c..d2dc31488ab731ef1c8fd31372ebe68109ed52af 100644
--- a/neonView/OfferFilter_view/OfferFilter_view.aod
+++ b/neonView/OfferFilter_view/OfferFilter_view.aod
@@ -1,97 +1,97 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>OfferFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="true" />
-  <dashletConfigurations>
-    <neonDashletConfiguration>
-      <name>AllOffersDashlet</name>
-      <title>Offers</title>
-      <description>Show all offers</description>
-      <fragment>Offer/filter</fragment>
-      <singleton v="true" />
-      <requiresConfiguration v="false" />
-      <icon>vaadin:cart</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>sales</name>
-          <title>Sales</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>offer</name>
-          <title>Offer</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-    <neonDashletConfiguration>
-      <name>SendOffersDashlet</name>
-      <title>Sent offers</title>
-      <description>Show all sent offers</description>
-      <fragment>Offer/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJTVEFUVVMiLCJvcGVyYXRvciI6IkVRVUFMIiwidmFsdWUiOiJWZXJzZW5kZXQiLCJrZXkiOiJPRkZFUlNUQVRTRU5UICAgICAgICAgICAgICAgICAgICAgICAiLCJjb250ZW50dHlwZSI6IlRFWFQifV19</fragment>
-      <singleton v="true" />
-      <requiresConfiguration v="false" />
-      <icon>vaadin:cart</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>sales</name>
-          <title>Sales</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>offer</name>
-          <title>Offer</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-  </dashletConfigurations>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>Offers</name>
-      <iconField>IMAGE</iconField>
-      <titleField>FullOfferCode</titleField>
-      <subtitleField>STATUS</subtitleField>
-      <descriptionField>NET</descriptionField>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>5755c4a7-0ec4-4ba8-9fa8-a64c440042f8</name>
-          <entityField>IMAGE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>4d40cee3-bcb1-4e67-8c1d-d5fc2e49cc11</name>
-          <entityField>FullOfferCode</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>780087e7-ff3c-4592-90be-607357168295</name>
-          <entityField>CONTACT_ORG_ID</entityField>
-          <width v="75" />
-          <expandRatio v="100" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>1556a6e6-f147-4573-82da-7a59f39a81e5</name>
-          <entityField>CONTACT_PERSON_ID</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>c5780864-ac2c-4650-8630-2690a9a074ea</name>
-          <entityField>STATUS</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>443c8480-5676-43a3-9617-f86dae39c960</name>
-          <entityField>OFFERDATE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>6f55da1e-281c-44ba-ab97-729b75516c32</name>
-          <entityField>NET</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>24440d2f-cb7a-4a5f-9d54-b1cd130908c8</name>
-          <entityField>PROBABILITY</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>OfferFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>AllOffersDashlet</name>
+      <title>Offers</title>
+      <description>Show all offers</description>
+      <fragment>Offer/filter</fragment>
+      <singleton v="true" />
+      <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
+      <icon>vaadin:cart</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+    <neonDashletConfiguration>
+      <name>SendOffersDashlet</name>
+      <title>Sent offers</title>
+      <description>Show all sent offers</description>
+      <fragment>Offer/filter</fragment>
+      <singleton v="true" />
+      <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
+      <icon>vaadin:cart</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Offers</name>
+      <iconField>IMAGE</iconField>
+      <titleField>FullOfferCode</titleField>
+      <subtitleField>STATUS</subtitleField>
+      <descriptionField>NET</descriptionField>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>5755c4a7-0ec4-4ba8-9fa8-a64c440042f8</name>
+          <entityField>IMAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>4d40cee3-bcb1-4e67-8c1d-d5fc2e49cc11</name>
+          <entityField>FullOfferCode</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>780087e7-ff3c-4592-90be-607357168295</name>
+          <entityField>CONTACT_ORG_ID</entityField>
+          <width v="75" />
+          <expandRatio v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1556a6e6-f147-4573-82da-7a59f39a81e5</name>
+          <entityField>CONTACT_PERSON_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>c5780864-ac2c-4650-8630-2690a9a074ea</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>443c8480-5676-43a3-9617-f86dae39c960</name>
+          <entityField>OFFERDATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6f55da1e-281c-44ba-ab97-729b75516c32</name>
+          <entityField>NET</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>24440d2f-cb7a-4a5f-9d54-b1cd130908c8</name>
+          <entityField>PROBABILITY</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/Options1_View/Options1_View.aod b/neonView/Options1_View/Options1_View.aod
index ef1b03850cb3fa54929cc608796db8aaa973613a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/neonView/Options1_View/Options1_View.aod
+++ b/neonView/Options1_View/Options1_View.aod
@@ -1,29 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>Options1_View</name>
-  <title>Group1</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Options</name>
-      <showDrawer v="true" />
-      <drawerCaption></drawerCaption>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>fccab195-3408-4119-ab40-598125af4e2c</name>
-          <entityField>Option1</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>3eea0976-79bf-41f2-aeeb-57607f92a902</name>
-          <entityField>Option2</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/Options2_View/Options2_View.aod b/neonView/Options2_View/Options2_View.aod
index c86ead2925aef6e4c6b8c2c005de67e6e93863f7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/neonView/Options2_View/Options2_View.aod
+++ b/neonView/Options2_View/Options2_View.aod
@@ -1,28 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>Options2_View</name>
-  <title>Group2</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Options</name>
-      <showDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>a53a3fab-877d-4402-8daf-1205be48b2ae</name>
-          <entityField>Option3</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>4197c1ba-3520-4c2a-bd8e-85e08c9bb478</name>
-          <entityField>Option4</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/OrderEdit_view/OrderEdit_view.aod b/neonView/OrderEdit_view/OrderEdit_view.aod
index b11bd4217936e37fbb7952966a8187a520d03887..b1c9b288e1f2939f78ec7d9af78d2c52e6cf1d18 100644
--- a/neonView/OrderEdit_view/OrderEdit_view.aod
+++ b/neonView/OrderEdit_view/OrderEdit_view.aod
@@ -1,135 +1,135 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>OrderEdit_view</name>
-  <title>Receipt</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <icon>VAADIN:CART</icon>
-  <quickEntry v="2" />
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Edit</name>
-      <editMode v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>17536f17-4160-4027-8486-07321692147d</name>
-          <entityField>OrderCode_VersNr_fieldgroup</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>0f63ee93-c4bb-41e9-a38d-c52bb07f5a11</name>
-          <entityField>ORDERTYPE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>1b323e80-820d-402a-98d2-f3649ec8e91f</name>
-          <entityField>CONTACT_ID</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>c9efcb50-ed61-453b-baa3-02071d99e4b0</name>
-          <entityField>OBJECT_ROWID</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>acb42613-102e-42cc-984f-5820b36ad2a8</name>
-          <entityField>OBJECT_TYPE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>b21c6438-0283-4f99-80ec-1c43e1630598</name>
-          <entityField>ORDERSTATUS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>64cb7376-3a7c-4ce9-99e8-e70bc91b41d0</name>
-          <entityField>CURRENCY</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>7ab3eb65-b713-4251-9eb1-3119432565f5</name>
-          <entityField>LANGUAGE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>7514c5cf-3e92-4d38-9dff-dd373b964a35</name>
-          <entityField>SALESORDERDATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>236a3654-dce9-4786-ae13-9b1babd5f75f</name>
-          <entityField>PAYDUEDATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>b42c6333-d6ac-4628-b7b4-509fea676276</name>
-          <entityField>DELIVERYTERMS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>09f67f92-e6d1-4439-92fa-2b2741b3de5b</name>
-          <entityField>PAYMENTTERMS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>f79c4c09-8082-4c88-83f5-a26aaf425c12</name>
-          <entityField>OFFER_ID</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>cd8bcf86-80d7-47f8-88da-f425417198d8</name>
-          <entityField>ChosenTexHeader</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>ed71986f-303c-4118-a895-51ec31ba8775</name>
-          <entityField>HEADER</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>f1729940-3df7-44c7-9acf-911f247ad832</name>
-          <entityField>ChosenTexFooter</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>c4b3c8ed-4625-4785-abc6-c726171ff7f4</name>
-          <entityField>FOOTER</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>cdd4504c-3af2-414f-9f1a-d8ab646487f1</name>
-          <entityField>PAYDATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>31ed9eba-66a1-4114-a1fe-61ef475d532d</name>
-          <entityField>PAID</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>9f25be07-768a-4598-a766-c78beb9ac650</name>
-          <entityField>DUNNINGDATE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>658b9f0b-fcd8-49f9-87ba-6d867e6b6e26</name>
-          <entityField>DUNNINGLEVEL</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>d745c24f-009b-4f95-97e6-e55c53860261</name>
-          <entityField>DUNNINGTEXT</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>8333aea5-0be3-47ac-94c3-f6f8485ba7e0</name>
-          <entityField>CANCELLATION</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>9cc1be03-6dc6-4c73-960a-fd8c3a9beec1</name>
-          <entityField>ChosenPaymentAddress</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>21860875-55d6-4686-9e1d-6b45963878ff</name>
-          <entityField>PAYMENTADDRESS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>884b0458-52ac-401c-ba62-447d37889784</name>
-          <entityField>ChosenDeliveryAddress</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>73687971-85f9-4120-98b2-e93f7f906ebb</name>
-          <entityField>DELIVERYADDRESS</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>72e2cb25-23e0-4f52-87a3-7c1bd80e99ec</name>
-      <entityField>Attributes</entityField>
-      <view>AttributeRelationMultiEdit_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>OrderEdit_view</name>
+  <title>Receipt</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CART</icon>
+  <quickEntry v="2" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Edit</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>17536f17-4160-4027-8486-07321692147d</name>
+          <entityField>OrderCode_VersNr_fieldgroup</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>0f63ee93-c4bb-41e9-a38d-c52bb07f5a11</name>
+          <entityField>ORDERTYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>1b323e80-820d-402a-98d2-f3649ec8e91f</name>
+          <entityField>CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>c9efcb50-ed61-453b-baa3-02071d99e4b0</name>
+          <entityField>OBJECT_ROWID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>acb42613-102e-42cc-984f-5820b36ad2a8</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>b21c6438-0283-4f99-80ec-1c43e1630598</name>
+          <entityField>ORDERSTATUS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>64cb7376-3a7c-4ce9-99e8-e70bc91b41d0</name>
+          <entityField>CURRENCY</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>5b75296a-a0c0-469e-a9ab-2f279c4fca48</name>
+          <entityField>ISOLANGUAGE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7514c5cf-3e92-4d38-9dff-dd373b964a35</name>
+          <entityField>SALESORDERDATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>236a3654-dce9-4786-ae13-9b1babd5f75f</name>
+          <entityField>PAYDUEDATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>b42c6333-d6ac-4628-b7b4-509fea676276</name>
+          <entityField>DELIVERYTERMS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>09f67f92-e6d1-4439-92fa-2b2741b3de5b</name>
+          <entityField>PAYMENTTERMS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f79c4c09-8082-4c88-83f5-a26aaf425c12</name>
+          <entityField>OFFER_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>cd8bcf86-80d7-47f8-88da-f425417198d8</name>
+          <entityField>ChosenTexHeader</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>ed71986f-303c-4118-a895-51ec31ba8775</name>
+          <entityField>HEADER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f1729940-3df7-44c7-9acf-911f247ad832</name>
+          <entityField>ChosenTexFooter</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>c4b3c8ed-4625-4785-abc6-c726171ff7f4</name>
+          <entityField>FOOTER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>cdd4504c-3af2-414f-9f1a-d8ab646487f1</name>
+          <entityField>PAYDATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>31ed9eba-66a1-4114-a1fe-61ef475d532d</name>
+          <entityField>PAID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9f25be07-768a-4598-a766-c78beb9ac650</name>
+          <entityField>DUNNINGDATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>658b9f0b-fcd8-49f9-87ba-6d867e6b6e26</name>
+          <entityField>DUNNINGLEVEL</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d745c24f-009b-4f95-97e6-e55c53860261</name>
+          <entityField>DUNNINGTEXT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8333aea5-0be3-47ac-94c3-f6f8485ba7e0</name>
+          <entityField>CANCELLATION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9cc1be03-6dc6-4c73-960a-fd8c3a9beec1</name>
+          <entityField>ChosenPaymentAddress</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>21860875-55d6-4686-9e1d-6b45963878ff</name>
+          <entityField>PAYMENTADDRESS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>884b0458-52ac-401c-ba62-447d37889784</name>
+          <entityField>ChosenDeliveryAddress</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>73687971-85f9-4120-98b2-e93f7f906ebb</name>
+          <entityField>DELIVERYADDRESS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>72e2cb25-23e0-4f52-87a3-7c1bd80e99ec</name>
+      <entityField>Attributes</entityField>
+      <view>AttributeRelationMultiEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/OrderFilter_view/OrderFilter_view.aod b/neonView/OrderFilter_view/OrderFilter_view.aod
index b366c7fa1fd841b1de423807c6efbe2f754c3088..084490fa904af0fc90907daab0e137ab2b1294cf 100644
--- a/neonView/OrderFilter_view/OrderFilter_view.aod
+++ b/neonView/OrderFilter_view/OrderFilter_view.aod
@@ -1,102 +1,102 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>OrderFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="true" />
-  <dashletConfigurations>
-    <neonDashletConfiguration>
-      <name>AllOrdersDashlet</name>
-      <title>Receipts</title>
-      <description>Show all receipts</description>
-      <fragment>Order/filter</fragment>
-      <singleton v="true" />
-      <requiresConfiguration v="false" />
-      <icon>VAADIN:FILE_TEXT_O</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>sales</name>
-          <title>Sales</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>order</name>
-          <title>Receipt</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-    <neonDashletConfiguration>
-      <name>SendOrdersDashlet</name>
-      <title>Sent receipts</title>
-      <description>Show all sent receipts</description>
-      <fragment>Order/filter?search=W3sibmFtZSI6IlNUQVRVUyIsIm9wZXJhdG9yIjoiRVFVQUwiLCJ2YWx1ZUtleSI6IjIiLCJ2YWx1ZSI6IlZlcnNlbmRldCIsImNvbnRlbnRUeXBlIjoiVEVYVCJ9XQ%253D%253D</fragment>
-      <singleton v="true" />
-      <requiresConfiguration v="false" />
-      <icon>VAADIN:FILE_TEXT_O</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>sales</name>
-          <title>Sales</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>order</name>
-          <title>Receipt</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-  </dashletConfigurations>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>Orders</name>
-      <inlineEdit v="true" />
-      <iconField>IMAGE</iconField>
-      <titleField>SALESORDERCODE</titleField>
-      <subtitleField>STATUS</subtitleField>
-      <descriptionField>NET</descriptionField>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>71f23753-601d-49fa-810d-daa02a1323d8</name>
-          <entityField>IMAGE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>443c8480-5676-43a3-9617-f86dae39c960</name>
-          <entityField>SALESORDERDATE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>dba5604f-cc1b-4083-8115-7bbe1ba07bf4</name>
-          <entityField>ORDERTYPE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>60b83daa-9349-4bef-94d8-5f1fc350da59</name>
-          <entityField>FullOrderCode</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>5688908f-7c50-46a3-8899-2767ea5b4a90</name>
-          <entityField>CONTACT_ORG_ID</entityField>
-          <width v="75" />
-          <expandRatio v="100" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>6fdca295-2e0a-4f89-a386-1ddda8a3090c</name>
-          <entityField>CONTACT_PERSON_ID</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>513826d9-7bb3-4cdd-b26a-f3c3976a6063</name>
-          <entityField>ORDERSTATUS</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>f0b61831-07b1-41dc-bac6-0e27252f6b74</name>
-          <entityField>CANCELLATION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>6f55da1e-281c-44ba-ab97-729b75516c32</name>
-          <entityField>NET</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>OrderFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>AllOrdersDashlet</name>
+      <title>Receipts</title>
+      <description>Show all receipts</description>
+      <fragment>Order/filter</fragment>
+      <singleton v="true" />
+      <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
+      <icon>VAADIN:FILE_TEXT_O</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+    <neonDashletConfiguration>
+      <name>SendOrdersDashlet</name>
+      <title>Sent receipts</title>
+      <description>Show all sent receipts</description>
+      <fragment>Order/filter?search=W3sibmFtZSI6IlNUQVRVUyIsIm9wZXJhdG9yIjoiRVFVQUwiLCJ2YWx1ZUtleSI6IjIiLCJ2YWx1ZSI6IlZlcnNlbmRldCIsImNvbnRlbnRUeXBlIjoiVEVYVCJ9XQ%253D%253D</fragment>
+      <singleton v="true" />
+      <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
+      <icon>VAADIN:FILE_TEXT_O</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Orders</name>
+      <inlineEdit v="true" />
+      <iconField>IMAGE</iconField>
+      <titleField>SALESORDERCODE</titleField>
+      <subtitleField>STATUS</subtitleField>
+      <descriptionField>NET</descriptionField>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>71f23753-601d-49fa-810d-daa02a1323d8</name>
+          <entityField>IMAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>60b83daa-9349-4bef-94d8-5f1fc350da59</name>
+          <entityField>FullOrderCode</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>dba5604f-cc1b-4083-8115-7bbe1ba07bf4</name>
+          <entityField>ORDERTYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>5688908f-7c50-46a3-8899-2767ea5b4a90</name>
+          <entityField>CONTACT_ORG_ID</entityField>
+          <width v="75" />
+          <expandRatio v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6fdca295-2e0a-4f89-a386-1ddda8a3090c</name>
+          <entityField>CONTACT_PERSON_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>513826d9-7bb3-4cdd-b26a-f3c3976a6063</name>
+          <entityField>ORDERSTATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>443c8480-5676-43a3-9617-f86dae39c960</name>
+          <entityField>SALESORDERDATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f0b61831-07b1-41dc-bac6-0e27252f6b74</name>
+          <entityField>CANCELLATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6f55da1e-281c-44ba-ab97-729b75516c32</name>
+          <entityField>NET</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/OrderMain_view/OrderMain_view.aod b/neonView/OrderMain_view/OrderMain_view.aod
index 31513c92e55ea8e667e1d862495fb21a360d762f..544180ab967c922b6b008f0abddb53337c4b36a4 100644
--- a/neonView/OrderMain_view/OrderMain_view.aod
+++ b/neonView/OrderMain_view/OrderMain_view.aod
@@ -24,21 +24,11 @@
       <entityField>AttributeTree</entityField>
       <view>AttributeRelationTree_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>106a79b1-332d-47b0-8c24-431d21bdea1e</name>
-      <entityField>#ENTITY</entityField>
-      <view>OrderClassification_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>92918210-a64f-49c8-8a04-c82c7a2a0a51</name>
       <entityField>#ENTITY</entityField>
       <view>OrderDetail_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>bfad682f-f033-4813-87fc-7cce05f3a962</name>
-      <entityField>#ENTITY</entityField>
-      <view>OrderLink_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>b3014999-da86-45ae-86ae-feb738d62906</name>
       <entityField>Documents</entityField>
diff --git a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
index 7c788a81d693cb7ae414cabdc952513ef2f80ed7..d9f75404be8fd4a94020041aeaae446f737f7dea 100644
--- a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
+++ b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
@@ -9,7 +9,7 @@
       <title>Companies</title>
       <description>Show all companies</description>
       <fragment>Organisation/filter</fragment>
-      <singleton v="true" />
+      <singleton v="false" />
       <requiresConfiguration v="false" />
       <icon>vaadin:building</icon>
       <categories>
@@ -17,10 +17,6 @@
           <name>contactmanagement</name>
           <title>Contactmanagement</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>org</name>
-          <title>Company</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
diff --git a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
index 086e32cacebfc76fd231bafc2150c8b6c88be799..9781eefd461fce6883e9c4368ab1de3fcd7f4a6b 100644
--- a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
+++ b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
@@ -82,8 +82,8 @@
           <entityField>LastActivity</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>cc143e94-006f-4059-925a-212e91c1ece7</name>
-          <entityField>CountActivity</entityField>
+          <name>f367d831-d594-4dc1-8e1e-b7c3bf45e2ad</name>
+          <entityField>OpenTasks</entityField>
         </entityFieldLink>
       </fields>
     </scoreCardViewTemplate>
diff --git a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
index 9a9c84f8257b9f369d7c8455519121792ffe4f1e..d990c3caa8102eb2983625fc6053e3aaca27d4cf 100644
--- a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
+++ b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
@@ -3,9 +3,10 @@
   <name>PermissionActionEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <noneLayout>
+    <boxLayout>
       <name>layout</name>
-    </noneLayout>
+      <direction>HORIZONTAL</direction>
+    </boxLayout>
   </layout>
   <children>
     <genericMultipleViewTemplate>
diff --git a/neonView/PermissionActionList_view/PermissionActionList_view.aod b/neonView/PermissionActionList_view/PermissionActionList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ec908e041c67e371fd473d990d1147457b480a21
--- /dev/null
+++ b/neonView/PermissionActionList_view/PermissionActionList_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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>PermissionActionList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <children>
+    <titledListViewTemplate>
+      <name>TitledList</name>
+      <titleField></titleField>
+      <fixedDrawer v="true" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>cc9ac8b7-e98b-4ce6-a0f0-204c05c1a3ce</name>
+          <entityField>ACTION</entityField>
+        </neonTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
index d5fd135dd4d7bf95e88226a964e4d38a44453aea..bfb6897c91b80abc5b7a9091c7eacabec0e3aade 100644
--- a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
+++ b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
@@ -1,38 +1,38 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>PermissionDetailPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <cardViewTemplate>
-      <name>Card</name>
-      <iconField>#ICON</iconField>
-      <titleField>#CONTENTTITLE</titleField>
-      <entityField>#ENTITY</entityField>
-    </cardViewTemplate>
-    <genericViewTemplate>
-      <name>Generic</name>
-      <editMode v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>dd33df7a-82e6-49a8-b35f-99d0187970e3</name>
-          <entityField>CONDITION</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>d113c6e9-cb6e-4873-85c8-528de4da4bb7</name>
-          <entityField>ACTION</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>b9e52e84-8ed8-4fe1-a938-6c6ff399c418</name>
-      <entityField>PermissionActions</entityField>
-      <view>PermissionActionFilter_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>PermissionDetailPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <iconField>#ICON</iconField>
+      <titleField>#CONTENTTITLE</titleField>
+      <entityField>#ENTITY</entityField>
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>dd33df7a-82e6-49a8-b35f-99d0187970e3</name>
+          <entityField>CONDITION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d113c6e9-cb6e-4873-85c8-528de4da4bb7</name>
+          <entityField>ACTION</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>ea958157-fe0d-4dbc-84ae-81c6adae7a9d</name>
+      <entityField>PermissionActions</entityField>
+      <view>PermissionActionList_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/PersonEdit_view/PersonEdit_view.aod b/neonView/PersonEdit_view/PersonEdit_view.aod
index af2f533b0e3987a37f84a93f8786868ed34cfd1d..c202247486fc83b21f66c2c9ac0a11249a07b2a9 100644
--- a/neonView/PersonEdit_view/PersonEdit_view.aod
+++ b/neonView/PersonEdit_view/PersonEdit_view.aod
@@ -19,7 +19,7 @@
       <fields>
         <entityFieldLink>
           <name>7a647c90-3a1c-4f8d-9ecd-6bdf35ab2f80</name>
-          <entityField>ORGANISATION_ID</entityField>
+          <entityField>ORGANISATION_CONTACTID</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>8f7b95e8-e15e-4d9b-960a-ecd142c71c9e</name>
diff --git a/neonView/PersonFilter_view/PersonFilter_view.aod b/neonView/PersonFilter_view/PersonFilter_view.aod
index ed985547e5bfcfb0b00f48f2666212c84a5ad5fe..3503ec3460ff51883501d6e7c57490c8f2a2337f 100644
--- a/neonView/PersonFilter_view/PersonFilter_view.aod
+++ b/neonView/PersonFilter_view/PersonFilter_view.aod
@@ -9,7 +9,7 @@
       <title>Contacts</title>
       <description>Show all contacts</description>
       <fragment>Person/filter</fragment>
-      <singleton v="true" />
+      <singleton v="false" />
       <requiresConfiguration v="false" />
       <icon>vaadin:users</icon>
       <categories>
@@ -17,10 +17,6 @@
           <name>contactmanagement</name>
           <title>Contactmanagement</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>person</name>
-          <title>Contact</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
@@ -38,7 +34,7 @@
       <iconField>PICTURE</iconField>
       <titleField>NAME_fieldGroup</titleField>
       <subtitleField>LANGUAGE</subtitleField>
-      <descriptionField>ORGANISATION_ID</descriptionField>
+      <descriptionField>ORGANISATION_CONTACTID</descriptionField>
       <entityField>#ENTITY</entityField>
       <showHeader v="true" />
       <columns>
@@ -71,7 +67,7 @@
         </neonTableColumn>
         <neonTableColumn>
           <name>125d04cc-5c7a-4c38-bd3f-b5d02d21067d</name>
-          <entityField>ORGANISATION_ID</entityField>
+          <entityField>ORGANISATION_CONTACTID</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>0a4cc9be-3946-4863-b3a6-a798ff801c83</name>
diff --git a/neonView/PersonLookup_view/PersonLookup_view.aod b/neonView/PersonLookup_view/PersonLookup_view.aod
index b8da1508e862b5975fe77fa05a010d699f1f8542..22d48730f2d86b494df374475bdb87b963edbf7d 100644
--- a/neonView/PersonLookup_view/PersonLookup_view.aod
+++ b/neonView/PersonLookup_view/PersonLookup_view.aod
@@ -26,7 +26,7 @@
         </neonTableColumn>
         <neonTableColumn>
           <name>9760f1eb-8296-4d29-9afc-45c7440a0dc5</name>
-          <entityField>ORGANISATION_ID</entityField>
+          <entityField>ORGANISATION_CONTACTID</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>768f2294-2c4e-4c71-9992-ee9cea299041</name>
diff --git a/neonView/PersonPreview_view/PersonPreview_view.aod b/neonView/PersonPreview_view/PersonPreview_view.aod
index 43d0a9c2871ca2023a2ba81888fd694d9665b920..3ba66814fe4c5c2d86f64a6af9eaf62d2c94707f 100644
--- a/neonView/PersonPreview_view/PersonPreview_view.aod
+++ b/neonView/PersonPreview_view/PersonPreview_view.aod
@@ -6,6 +6,7 @@
     <headerFooterLayout>
       <name>layout</name>
       <header>Header</header>
+      <footer>Scores</footer>
     </headerFooterLayout>
   </layout>
   <children>
@@ -13,7 +14,7 @@
       <name>Header</name>
       <iconField>PICTURE</iconField>
       <titleField>FULL_NAME_fieldGroup</titleField>
-      <descriptionField>ORGANISATION_ID</descriptionField>
+      <descriptionField>ORGANISATION_CONTACTID</descriptionField>
       <favoriteAction1>newActivity</favoriteAction1>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
@@ -67,5 +68,18 @@
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
+    <scoreCardViewTemplate>
+      <name>Scores</name>
+      <fieldActions>
+        <element>openTaskView</element>
+      </fieldActions>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>929d76b2-4f91-4a02-9b2e-b3f42b49294a</name>
+          <entityField>OpenTasks</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod b/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f97aca6e52206aa5fd7149c7dd30a91233d4d81a
--- /dev/null
+++ b/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod
@@ -0,0 +1,26 @@
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>PrivatePersonFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>PrivatePersons</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>ba7daf97-5259-4871-adec-c6eeca58606a</name>
+          <entityField>FIRSTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>10c82c5d-fead-4cb2-a6d4-b8d94b4a0308</name>
+          <entityField>LASTNAME</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/Options_View/Options_View.aod b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
similarity index 53%
rename from neonView/Options_View/Options_View.aod
rename to neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
index 09c896b7485b8c515d0278396c0a6b5058df33d4..1cbca12a211517c3efeb3e224f8d523a3e0d85e7 100644
--- a/neonView/Options_View/Options_View.aod
+++ b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
@@ -1,23 +1,17 @@
 <?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>Options_View</name>
-  <title>Options</title>
+  <name>PrivatePersonPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <masterSlaveLayout>
+    <boxLayout>
       <name>layout</name>
-    </masterSlaveLayout>
+    </boxLayout>
   </layout>
   <children>
     <neonViewReference>
-      <name>Group1</name>
-      <entityField>#ENTITY</entityField>
-      <view>Options1_View</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>Group2</name>
-      <entityField>#ENTITY</entityField>
-      <view>Options2_View</view>
+      <name>0a66aea5-bf81-47e4-941d-9158ff8f4f51</name>
+      <entityField>Persons</entityField>
+      <view>ContactTitledList_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/ProductFilter_view/ProductFilter_view.aod b/neonView/ProductFilter_view/ProductFilter_view.aod
index 872dbd01f7f90b1a0c153b3cc967425c5b9647a3..255fe83adec4f2d6626873a18756793335819072 100644
--- a/neonView/ProductFilter_view/ProductFilter_view.aod
+++ b/neonView/ProductFilter_view/ProductFilter_view.aod
@@ -11,16 +11,16 @@
       <fragment>Product/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
       <icon>vaadin:hammer</icon>
       <categories>
         <neonDashletCategory>
           <name>sales</name>
           <title>Sales</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>product</name>
-          <title>Product</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
diff --git a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
index 964dfa8a660128becca63d07a0ecf027fff3e4c4..33e4c09107eb0bd61c46db0a8293448ae958a65d 100644
--- a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
+++ b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
@@ -11,16 +11,16 @@
       <fragment>Salesproject/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
       <icon>vaadin:filter</icon>
       <categories>
         <neonDashletCategory>
           <name>sales</name>
           <title>Sales</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>salesproject</name>
-          <title>Salesproject</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
     <neonDashletConfiguration>
@@ -30,16 +30,16 @@
       <fragment>Salesproject/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJTVEFUVVMiLCJvcGVyYXRvciI6IkVRVUFMIiwidmFsdWUiOiJPZmZlbiIsImtleSI6IlNBTFBST0pTVEFUT1BFTiAgICAgICAgICAgICAgICAgICAgICIsImNvbnRlbnR0eXBlIjoiVEVYVCJ9XX0%253D</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
       <icon>vaadin:filter</icon>
       <categories>
         <neonDashletCategory>
           <name>sales</name>
           <title>Sales</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>salesproject</name>
-          <title>Salesproject</title>
-        </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
   </dashletConfigurations>
diff --git a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
index 6e8fb6ca97ba3a1fb8548ef4c4fbd35b80271c20..ba891e4b463c06de30f7996467be9be17a7d92ad 100644
--- a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
+++ b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
@@ -1,32 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>SalesprojectMilestoneInfo_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <drawerLayout>
-      <name>layout</name>
-      <layoutCaption>Phase progression</layoutCaption>
-    </drawerLayout>
-  </layout>
-  <children>
-    <ganttViewTemplate>
-      <name>MilestoneGantt</name>
-      <uidField>SALESPROJECT_MILESTONEID</uidField>
-      <titleField>valueLongName</titleField>
-      <beginDateField>DATE_START</beginDateField>
-      <endDateField>dateEndGantt</endDateField>
-      <predecessorIdField>PARENT_ID</predecessorIdField>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>4c261b96-17d3-424e-8297-3ff46d780516</name>
-          <entityField>VALUE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>c055c340-0f7b-4c91-a0a6-22e20511d2a9</name>
-          <entityField>DATE_END</entityField>
-        </neonTableColumn>
-      </columns>
-    </ganttViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>SalesprojectMilestoneInfo_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Phase progression</layoutCaption>
+    </drawerLayout>
+  </layout>
+  <children>
+    <ganttViewTemplate>
+      <name>MilestoneGantt</name>
+      <uidField>SALESPROJECT_MILESTONEID</uidField>
+      <titleField>valueLongName</titleField>
+      <descriptionField>valueLongName</descriptionField>
+      <beginDateField>DATE_START</beginDateField>
+      <endDateField>dateEndGantt</endDateField>
+      <predecessorIdField>PARENT_ID</predecessorIdField>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>4c261b96-17d3-424e-8297-3ff46d780516</name>
+          <entityField>VALUE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>c055c340-0f7b-4c91-a0a6-22e20511d2a9</name>
+          <entityField>DATE_END</entityField>
+        </neonTableColumn>
+      </columns>
+    </ganttViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/SalesprojectPhases_view/SalesprojectPhases_view.aod b/neonView/SalesprojectPhases_view/SalesprojectPhases_view.aod
index 6eba3c2afc9b288b28ba1d7813b259fe1ecce4de..5b8054824e1367b64a26cf4e7ba40a6e70ee71d6 100644
--- a/neonView/SalesprojectPhases_view/SalesprojectPhases_view.aod
+++ b/neonView/SalesprojectPhases_view/SalesprojectPhases_view.aod
@@ -9,15 +9,19 @@
       <description>Shows how many sales projects are in the various sales phases</description>
       <fragment>SalesprojectAnalyses/full</fragment>
       <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
       <icon>VAADIN:FUNNEL</icon>
       <categories>
         <neonDashletCategory>
-          <name>salesproject</name>
-          <title>Salesproject</title>
+          <name>sales</name>
+          <title>Sales</title>
         </neonDashletCategory>
         <neonDashletCategory>
-          <name>chart</name>
-          <title>Chart</title>
+          <name>charts</name>
+          <title>Charts</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
diff --git a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
index 37bc76d803c77e9739069108f97c5ea5b9d8de48..cd6b17fce709fc30c5dc61d006a16ebe5a953d76 100644
--- a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
+++ b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
@@ -1,56 +1,60 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>SalesprojectScoreCard_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <dashletConfigurations>
-    <neonDashletConfiguration>
-      <name>KeyFigures</name>
-      <title>Key figures</title>
-      <description>Most important salse key figures</description>
-      <fragment>SalesprojectAnalyses/full</fragment>
-      <singleton v="true" />
-      <icon>VAADIN:GRID_BIG</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>salesproject</name>
-          <title>Salesproject</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-  </dashletConfigurations>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <scoreCardViewTemplate>
-      <name>KeyFigures</name>
-      <fieldActions>
-        <element>openForecast</element>
-        <element>openTurnover</element>
-        <element>openSalesprojects</element>
-        <element>sentOffers</element>
-      </fieldActions>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>3377fe1b-1f29-4c49-88c8-7a1b1ee6d0ce</name>
-          <entityField>OVERALL_FORECAST</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>44449f24-ed9d-4053-8202-db4b43032067</name>
-          <entityField>OVERALL_TURNOVER</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>2ba5a5e7-0ae6-4001-84a6-9444730d6611</name>
-          <entityField>OPEN_SALESPROJECTS</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>f98b6e67-7337-45ac-b9e6-9d36241ae828</name>
-          <entityField>SENT_OFFERS</entityField>
-        </entityFieldLink>
-      </fields>
-    </scoreCardViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>SalesprojectScoreCard_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>KeyFigures</name>
+      <title>Key figures</title>
+      <description>Most important salse key figures</description>
+      <fragment>SalesprojectAnalyses/full</fragment>
+      <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+        <element>PROJECT_OfficeStaff</element>
+      </storeRoles>
+      <icon>VAADIN:GRID_BIG</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>sales</name>
+          <title>Sales</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <scoreCardViewTemplate>
+      <name>KeyFigures</name>
+      <fieldActions>
+        <element>openForecast</element>
+        <element>openTurnover</element>
+        <element>openSalesprojects</element>
+        <element>sentOffers</element>
+      </fieldActions>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>3377fe1b-1f29-4c49-88c8-7a1b1ee6d0ce</name>
+          <entityField>OVERALL_FORECAST</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>44449f24-ed9d-4053-8202-db4b43032067</name>
+          <entityField>OVERALL_TURNOVER</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>2ba5a5e7-0ae6-4001-84a6-9444730d6611</name>
+          <entityField>OPEN_SALESPROJECTS</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f98b6e67-7337-45ac-b9e6-9d36241ae828</name>
+          <entityField>SENT_OFFERS</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/SalutationFilter_view/SalutationFilter_view.aod b/neonView/SalutationFilter_view/SalutationFilter_view.aod
index ea34e5efd6c4e2e20dbbdc14ef05f388be13d3d1..26afb5e5e10f97d2ee64334a497d6010bd34318b 100644
--- a/neonView/SalutationFilter_view/SalutationFilter_view.aod
+++ b/neonView/SalutationFilter_view/SalutationFilter_view.aod
@@ -1,50 +1,51 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>SalutationFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="true" />
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>Salutations</name>
-      <titleField>SALUTATION_TEXT</titleField>
-      <subtitleField>TITLE</subtitleField>
-      <autoNewRow v="true" />
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>32e3fa28-1749-45a2-ae77-27ddfb221dba</name>
-          <entityField>ISOLANGUAGE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>9cccf3a4-bbe7-453a-955c-246691c27dba</name>
-          <entityField>SALUTATION_TEXT</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>3d4b8959-4558-4398-876a-09b46706827d</name>
-          <entityField>TITLE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>f7e7e4a7-5719-457c-ac65-a2cdd993d9fb</name>
-          <entityField>HEADLINE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>af9f6db4-f53a-48d8-aaa4-1dc8a6fd211e</name>
-          <entityField>LETTERSALUTATION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>071b540d-3d67-4b0b-b382-7c8b3a43e755</name>
-          <entityField>SEX</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>b642b2cc-3439-4813-bda7-bb4358247f68</name>
-          <entityField>SORT</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>SalutationFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Salutations</name>
+      <inlineEdit v="true" />
+      <titleField>SALUTATION_TEXT</titleField>
+      <subtitleField>TITLE</subtitleField>
+      <autoNewRow v="true" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>32e3fa28-1749-45a2-ae77-27ddfb221dba</name>
+          <entityField>ISOLANGUAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>9cccf3a4-bbe7-453a-955c-246691c27dba</name>
+          <entityField>SALUTATION_TEXT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>3d4b8959-4558-4398-876a-09b46706827d</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f7e7e4a7-5719-457c-ac65-a2cdd993d9fb</name>
+          <entityField>HEADLINE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>af9f6db4-f53a-48d8-aaa4-1dc8a6fd211e</name>
+          <entityField>LETTERSALUTATION</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>071b540d-3d67-4b0b-b382-7c8b3a43e755</name>
+          <entityField>SEX</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>b642b2cc-3439-4813-bda7-bb4358247f68</name>
+          <entityField>SORT</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
index a7414e5f2776ac45060fb932612b6b6407723d8e..7ec3125b620f7a2c777b18a96e96067115f282da 100644
--- a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
+++ b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
@@ -9,22 +9,40 @@
   </layout>
   <children>
     <genericViewTemplate>
-      <name>Generic</name>
+      <name>Generic2</name>
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>98b1c32e-8f7e-45f9-bbc8-048851133048</name>
+          <name>9d341919-1306-40d1-bc3d-5cce3c2d5c04</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
-          <name>057f064d-53fd-4d80-a43e-20a4a40d4ffb</name>
+          <name>a1a56052-1afa-4fa2-8aa9-1bc22148d8eb</name>
           <entityField>bindata</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>b33a8886-75b0-4644-890d-97a8133079ea</name>
           <entityField>TITLE</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>8b6a5de0-d1dc-4cdd-9f3b-a38cddce88ef</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>1845ae78-7132-4efc-aba0-737dc4d7fc9b</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
index 3ee26598c9baaca8a82da78bae9f75edeb09f97f..4d31906c0f3d696f809ca350ede3f03a04b7b84a 100644
--- a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
+++ b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
@@ -21,6 +21,10 @@
           <name>81088f4a-4ce6-43fc-8dab-7ecf1aec0386</name>
           <entityField>TITLE</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>73a5b1ea-913f-4562-aed1-95c6e665cd19</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>84aedf68-f90e-479c-912d-55cd499523cb</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
diff --git a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
index 94126a57ef4924dbed94a213990b156e3153784f..8798a3bb0236ce741e57b83ad9c2b227e77f8892 100644
--- a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
+++ b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
@@ -19,6 +19,11 @@
       <entityField>Recipients</entityField>
       <view>LetterRecipientFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>f042f93e-bdc9-496d-b45d-6340f56cd14f</name>
+      <entityField>Activities</entityField>
+      <view>ActivityFilter_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>5cba2de9-e00b-4548-8477-5fc76b1e3cb6</name>
       <entityField>LogHistories</entityField>
diff --git a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
index f81ecaef089576bd91fc9cd3ff7dd26bcd88dbce..8b5f0701e98e98a7586b658bb589b7e1292b4508 100644
--- a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
+++ b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
@@ -12,6 +12,7 @@
       <name>Card</name>
       <iconField>ICON</iconField>
       <titleField>TITLE</titleField>
+      <subtitleField>STATUS</subtitleField>
       <favoriteAction1>downloadLetter</favoriteAction1>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
@@ -24,6 +25,10 @@
           <name>b66a9401-6218-4b64-b233-06c878d86b21</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>272dc0ad-c6c1-434b-82c2-4bbcd4b4b088</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>c8702eb8-3638-47a6-acf7-402c88c529cd</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod b/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
index 5da2ae37fa8cbbd720f2d70837fcb69b2567d1b1..a13cec63755570ee24f3c77ee72523e4490b2971 100644
--- a/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
+++ b/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
@@ -6,16 +6,19 @@
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>mytickets</name>
-      <title>My tasks</title>
-      <description>Show tasks where I am editor</description>
+      <title>My tickets</title>
+      <description>Show tickets where I am the editor</description>
       <fragment>Ticket/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles>
+        <element>PROJECT_Support</element>
+      </storeRoles>
       <icon>VAADIN:TASKS</icon>
       <categories>
         <neonDashletCategory>
-          <name>tickets</name>
-          <title>Tickets</title>
+          <name>service</name>
+          <title>Service</title>
         </neonDashletCategory>
       </categories>
       <parameters>
@@ -90,36 +93,5 @@
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
-    <treeTableViewTemplate>
-      <name>TicketsTreeTable</name>
-      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
-      <defaultGroupFields>
-        <element>TYPE</element>
-      </defaultGroupFields>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>34e2d188-bf3e-4049-9094-2c68a2552fc9</name>
-          <entityField>TASK_PRIORITY_ICON</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>fce7d0f3-b045-4230-9adb-2c11716a1e39</name>
-          <entityField>TASK_SUBJECT</entityField>
-          <expandRatio v="100" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>32562679-18bb-4084-a2f5-eca18e0b91bb</name>
-          <entityField>TASK_PRIORITY</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>1be2b011-6759-4ba9-9ec1-6cc30db7f959</name>
-          <entityField>TASK_MATURITY_DATE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>33319779-919b-4672-aa0a-0e94f0d8c640</name>
-          <entityField>TASK_STATUS</entityField>
-        </neonTableColumn>
-      </columns>
-    </treeTableViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/TaskFilter_view/TaskFilter_view.aod b/neonView/TaskFilter_view/TaskFilter_view.aod
index 7c22a4b14a667499f619bfbbfb65ba6ec8900ab9..a4768f0cf33da6280e78b6658d95f541d35d6427 100644
--- a/neonView/TaskFilter_view/TaskFilter_view.aod
+++ b/neonView/TaskFilter_view/TaskFilter_view.aod
@@ -11,11 +11,12 @@
       <fragment>Task/filter</fragment>
       <singleton v="true" />
       <requiresConfiguration v="false" />
+      <storeRoles />
       <icon>VAADIN:TASKS</icon>
       <categories>
         <neonDashletCategory>
-          <name>tasks</name>
-          <title>Tasks</title>
+          <name>contactmanagement</name>
+          <title>Contactmanagement</title>
         </neonDashletCategory>
       </categories>
       <parameters>
@@ -87,35 +88,5 @@
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
-    <treeTableViewTemplate>
-      <name>TasksTreeTable</name>
-      <defaultGroupFields>
-        <element>TYPE</element>
-      </defaultGroupFields>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>3cd319ea-5a06-409c-a7ce-1c87beff62d2</name>
-          <entityField>PRIORITY_ICON</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>591cd079-a8e9-49aa-8a2d-afb643aef079</name>
-          <entityField>SUBJECT</entityField>
-          <expandRatio v="100" />
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>5d11add4-d939-4c8e-9633-efd0c2991837</name>
-          <entityField>PRIORITY</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>abba0283-ace9-41f2-8b98-df149c2feaf9</name>
-          <entityField>MATURITY_DATE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>b92dba41-58a2-4c95-aeb4-235c5eaffad7</name>
-          <entityField>STATUS</entityField>
-        </neonTableColumn>
-      </columns>
-    </treeTableViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod b/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
index 8d2445a7252072f56dba9c163714d4c3731818a2..27928d06e3327f9bbd633a2caf539b6a25515342 100644
--- a/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
+++ b/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
@@ -1,19 +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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>TimetrackingAnalyses_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <groupLayout>
-      <name>layout</name>
-    </groupLayout>
-  </layout>
-  <children>
-    <singleDataChartViewTemplate>
-      <name>Pie</name>
-      <chartType>PIE</chartType>
-      <xAxis>YEAR</xAxis>
-      <yAxis>MINUTES</yAxis>
-      <entityField>#ENTITY</entityField>
-    </singleDataChartViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>TimetrackingAnalyses_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <singleDataChartViewTemplate>
+      <name>Pie</name>
+      <chartType>PIE</chartType>
+      <xAxis>YEAR</xAxis>
+      <yAxis>TRACKINGMINUTES</yAxis>
+      <entityField>#ENTITY</entityField>
+    </singleDataChartViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod b/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
index 8ccd4373c364378b2a83b7b1e7a69f0f6cafaa84..99b2f2de4ce113248ade45a631a0cd194079d132 100644
--- a/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
+++ b/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
@@ -1,83 +1,83 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
-  <name>TurnoverChartForecast_view</name>
-  <title>Forecast</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <dashletConfigurations>
-    <neonDashletConfiguration>
-      <name>TurnoverDashlet</name>
-      <title>Turnover</title>
-      <description>Shows the organisations turnover and forecast</description>
-      <fragment>Turnover/full</fragment>
-      <singleton v="true" />
-      <storeRoles>
-        <element>INTERNAL_ADMINISTRATOR</element>
-        <element>INTERNAL_DASHBOARDSTOREADMIN</element>
-      </storeRoles>
-      <icon>VAADIN:CHART</icon>
-      <categories>
-        <neonDashletCategory>
-          <name>turnover</name>
-          <title>Turnover</title>
-        </neonDashletCategory>
-      </categories>
-    </neonDashletConfiguration>
-  </dashletConfigurations>
-  <layout>
-    <groupLayout>
-      <name>layout</name>
-    </groupLayout>
-  </layout>
-  <children>
-    <multiDataChartViewTemplate>
-      <name>ColumnChart</name>
-      <chartType>COLUMN</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <categoryField>CATEGORY</categoryField>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </multiDataChartViewTemplate>
-    <multiDataChartViewTemplate>
-      <name>LineChart</name>
-      <chartType>LINE</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <categoryField>CATEGORY</categoryField>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </multiDataChartViewTemplate>
-    <multiDataChartViewTemplate>
-      <name>AreaChart</name>
-      <chartType>AREA</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <categoryField>CATEGORY</categoryField>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </multiDataChartViewTemplate>
-    <multiDataChartViewTemplate>
-      <name>BarChart</name>
-      <chartType>BAR</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <categoryField>CATEGORY</categoryField>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </multiDataChartViewTemplate>
-    <multiDataChartViewTemplate>
-      <name>SplineChart</name>
-      <chartType>SPLINE</chartType>
-      <xAxis>X</xAxis>
-      <yAxis>Y</yAxis>
-      <parentField>PARENT</parentField>
-      <categoryField>CATEGORY</categoryField>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </multiDataChartViewTemplate>
-  </children>
-</neonView>
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.2">
+  <name>TurnoverChartForecast_view</name>
+  <title>Forecast</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>TurnoverDashlet</name>
+      <title>Turnover</title>
+      <description>Shows the organisations turnover and forecast</description>
+      <fragment>Turnover/full</fragment>
+      <singleton v="true" />
+      <storeRoles>
+        <element>INTERNAL_ADMINISTRATOR</element>
+        <element>INTERNAL_DASHBOARDSTOREADMIN</element>
+      </storeRoles>
+      <icon>VAADIN:CHART</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>charts</name>
+          <title>Charts</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <multiDataChartViewTemplate>
+      <name>ColumnChart</name>
+      <chartType>COLUMN</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <categoryField>CATEGORY</categoryField>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+    </multiDataChartViewTemplate>
+    <multiDataChartViewTemplate>
+      <name>LineChart</name>
+      <chartType>LINE</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <categoryField>CATEGORY</categoryField>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+    </multiDataChartViewTemplate>
+    <multiDataChartViewTemplate>
+      <name>AreaChart</name>
+      <chartType>AREA</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <categoryField>CATEGORY</categoryField>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+    </multiDataChartViewTemplate>
+    <multiDataChartViewTemplate>
+      <name>BarChart</name>
+      <chartType>BAR</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <categoryField>CATEGORY</categoryField>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+    </multiDataChartViewTemplate>
+    <multiDataChartViewTemplate>
+      <name>SplineChart</name>
+      <chartType>SPLINE</chartType>
+      <xAxis>X</xAxis>
+      <yAxis>Y</yAxis>
+      <parentField>PARENT</parentField>
+      <categoryField>CATEGORY</categoryField>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+    </multiDataChartViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TwitterTimeline_view/TwitterTimeline_view.aod b/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
index 077f8232e2728894a1c10e32ff14f80f1eab743e..fc8894e1240c084a96a24ea60841d26138c7604f 100644
--- a/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
+++ b/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
@@ -17,10 +17,6 @@
           <name>social</name>
           <title>Social Media</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>twitter</name>
-          <title>Twitter</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
@@ -41,10 +37,6 @@
           <name>social</name>
           <title>Social Media</title>
         </neonDashletCategory>
-        <neonDashletCategory>
-          <name>twitter</name>
-          <title>Twitter</title>
-        </neonDashletCategory>
       </categories>
       <parameters>
         <neonDashletParameter>
diff --git a/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod b/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
index 70fce04d5511956c50799407c8ff5fad3de03035..cdd230408eb699258567ee372e23d2f9c9ea9d30 100644
--- a/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
+++ b/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
@@ -13,8 +13,8 @@
       <icon>VAADIN:UPLOAD</icon>
       <categories>
         <neonDashletCategory>
-          <name>activity</name>
-          <title>Activity</title>
+          <name>email</name>
+          <title>Email</title>
         </neonDashletCategory>
       </categories>
       <parameters>
diff --git a/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod b/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
index 8cbfe491f461265f0f5dfd8185c8a7d0b49b250a..e86c693f908f5b3dd645f2302e0d53a87b283e24 100644
--- a/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
+++ b/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
@@ -12,12 +12,8 @@
       <icon>VAADIN:AT</icon>
       <categories>
         <neonDashletCategory>
-          <name>contactmanagement</name>
-          <title>Contactmanagement</title>
-        </neonDashletCategory>
-        <neonDashletCategory>
-          <name>activity</name>
-          <title>Activity</title>
+          <name>email</name>
+          <title>Email</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
diff --git a/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
index 0686a25fef2c84db0a021eb2ebf559d682b3c20f..ed47e7dc9289278eda23ed012627c49e2676ad40 100644
--- a/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
+++ b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
@@ -23,7 +23,7 @@
       </fields>
     </genericViewTemplate>
     <neonViewReference>
-      <name>10cbd0dc-4297-4703-ad84-b52312700f2e</name>
+      <name>7de3255c-edc7-469f-9836-0e56fab21921</name>
       <entityField>UnlinkedMailMappingLinks</entityField>
       <view>UnlinkedMailMappingLinkList_view</view>
     </neonViewReference>
diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
index 98220ae874341c59bd7d88687d02d1f5d4e1b815..97d496bcccbfcb482457c8646c7c488b7bf2c45f 100644
--- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
+++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
@@ -96,7 +96,15 @@
     </customBooleanProperty>
     <customStringProperty>
       <name>nominatim.url</name>
-      <property>https://nominatim.openstreetmap.org/search</property>
+      <property>https://nom.adito.de/search.php</property>
+    </customStringProperty>
+    <customStringProperty>
+      <name>nominatim.user</name>
+      <property>aditouser</property>
+    </customStringProperty>
+    <customStringProperty>
+      <name>nominatim.pw</name>
+      <property>useradito</property>
     </customStringProperty>
   </customProperties>
 </preferences>
diff --git a/process/ActivityTask_lib/process.js b/process/ActivityTask_lib/process.js
index 3987c9533e07e9ca7a30e8f5bf68e0035a4900b9..ff4762bb200271bdcbd865728ef577dfbd810394 100644
--- a/process/ActivityTask_lib/process.js
+++ b/process/ActivityTask_lib/process.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("Binary_lib");
 import("system.vars");
 import("system.util");
@@ -256,6 +255,17 @@ TaskUtils.addLinkRecords= function(pObjectIdField, pRowIdField, pAdditionalLinks
     _ActivityTaskUtils._addLinkRecords(pObjectIdField, pRowIdField, pAdditionalLinksField, pParentContextField, pParentIdField, "Links");
 }
 
+TaskUtils.getOpenTaskCount = function(pRowId, pObjectType)
+{
+    var cond = SqlCondition.begin()
+        .andPrepare("TASKLINK.OBJECT_TYPE", pObjectType)
+        .andPrepare("TASKLINK.OBJECT_ROWID", pRowId)
+        .andPrepare("TASK.STATUS", $KeywordRegistry.taskStatus$ended(), "# != ?")
+    var taskCount = db.cell(cond.buildSql("select count(*) from TASKLINK join TASK on TASKLINK.TASK_ID = TASK.TASKID"));
+    
+    return parseInt(taskCount);
+}
+
 /**
  * Methods used by for tasks.
  * Do not create an instance of this!
diff --git a/process/AddressEntity_lib/process.js b/process/AddressEntity_lib/process.js
index 3f13bba906e672156c214fc934e47f0258f5fcb1..61b8e5a06fc6b1042d4363d4c7a6e1aab424ff36 100644
--- a/process/AddressEntity_lib/process.js
+++ b/process/AddressEntity_lib/process.js
@@ -14,12 +14,17 @@ function AddressEntityValidation(){}
 
 /**
  * check if the field, this function is called in is a mandatory field of the country
- * 
+ * @param {String} [pField=undefined] if provided use this field else use $this.name
  * @return {Boolean}
  */
-AddressEntityValidation.isMandatoryField = function()
+AddressEntityValidation.isMandatoryField = function(pField)
 {
-    var fieldName = vars.get("$this.name").replace(/^\$?field\./, "");
+    var fieldName;
+    
+    if (pField)
+        fieldName = pField;
+    else
+        fieldName = vars.get("$this.name").replace(/^\$?field\./, "");
     var countryCode = vars.get("$field.COUNTRY");
     var fieldCode = this.mapFieldToShorthand(fieldName);
     if (fieldCode == null)
diff --git a/process/Address_lib/process.js b/process/Address_lib/process.js
index 47eed7c45e736490630f4601165b32ab7de955ea..ea7f26689d317f860f72a4dc2611aeb83e0b5617 100644
--- a/process/Address_lib/process.js
+++ b/process/Address_lib/process.js
@@ -320,7 +320,7 @@ function _getAddrData( pData )
             //no language defined
             if ( sformat == undefined )  sformat = _getSalutation( pData[19] + pData[20] );
             // no language specific entry in salutation
-            if ( sformat == undefined || sformat[0] == "" || sformat[1] == "" )	sformat = ["{sa} {ti} {fn} {la}", "{sa} {ti} {ln}"];
+            if ( sformat == undefined || sformat[0] == "" || sformat[1] == "" )	sformat = ["{sa} {ti} {fn} {ln}", "{sa} {ti} {ln}"];
             salutation = _formatAddrData( pData,  sformat[0] );
             // lettersalutation if none existent yet
             if( lettersalutation == "" ) lettersalutation = _formatAddrData( pData, sformat[1] );
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
index ed66d3825bb8cd716e99f87b0b8028b6fbf44239..c1e86dea4abc9129661dd31dff2d5bfe25a449fa 100644
--- a/process/AttributeFilter_lib/process.js
+++ b/process/AttributeFilter_lib/process.js
@@ -139,7 +139,7 @@ AttributeFilterExtensionMaker.getFilterCondition = function(pObjectType, pFilter
                                                                 and AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = ?) \n\
                              where " + condition + " )";
     }
-    resSql = db.translateCondition([resSql, preparedValues]);
+    resSql = SqlUtils.translateConditionWithQuotes([resSql, preparedValues]);
     return resSql;
 };
 
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 0a3b7af1fccdeaca0ea0a10463317ac6c9ce7b80..9afb0bf19c54caa92e5f90c258559db60bdfccb8 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -1,3 +1,4 @@
+import("Employee_lib");
 import("KeywordData_lib");
 import("Context_lib");
 import("system.util");
@@ -20,6 +21,27 @@ import("Keyword_lib");
  */
 function AttributeUtil () {}
 
+/**
+ * @return all Contexts (Object types) which can be the usage of attributes
+ */
+AttributeUtil.getPossibleUsageContexts = function() 
+{
+    return [
+        "Organisation",
+        "Person",
+        "Contract",
+        "Product",
+        "Activity",
+        "Offer",
+        "Order",
+        "Employee",
+        "Salesproject",
+        "Campaign",
+        "DocumentTemplate",
+        "SupportTicket"
+    ];
+}
+
 /**
  * Gives an array of all available attributes for a context. This is used in the possibleItems
  * process for the attribute id in AttributeRelation
@@ -137,12 +159,15 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI
         if (module)
         {
             var uid = "#UID";
+            if (module == "Employee_entity")
+                uid = "SHORT_UID";
+            
             var title = "#CONTENTTITLE";
             var config = entities.createConfigForLoadingRows()
                 .entity(module)
                 .fields([uid, title]);
-            if (filter)
-                config.filter(filter);
+            if (filter && filter.filter)
+                config.filter(filter.filter);
             var rows = entities.getRows(config);
             for (let i = 0, l = rows.length; i < l; i++)
                 objects.push([rows[i][uid], rows[i][title]])
@@ -761,6 +786,9 @@ $AttributeTypes.OBJECTSELECTION = {
         {
             if (pValue)
             {
+                if (pModule == "Employee_entity")
+                    pValue = EmployeeUtils.prefixUserId(pValue);
+                
                 var title = "#CONTENTTITLE";
                 var config = entities.createConfigForLoadingRows()
                     .entity(pModule)
@@ -773,17 +801,42 @@ $AttributeTypes.OBJECTSELECTION = {
         },
     getDropDownDefinitions : function ()
         {
+            // TODO: use loadEntity from context_entity
             var dropDownList = [];
-            //TODO filter entities
             project.getDataModels(project.DATAMODEL_KIND_ENTITY).forEach(
                 function (entity)
                 {
-                    if (entity[1])
+                    if (entity[1] && $AttributeTypes.OBJECTSELECTION._selectableEntities[entity[0]])
                         dropDownList.push([entity[0], translate.text(entity[1])]);
                 }
             );
             return dropDownList;
-        }
+        },
+    /** @private */
+    _selectableEntities : {
+        "ObjectRelationType_entity" : true,
+        "DocumentTemplate_entity" : true,
+        "SupportTicket_entity" : true,
+        "Organisation_entity" : true,
+        "Salesproject_entity" : true,
+        "Productprice_entity" : true,
+        "SerialLetter_entity" : true,
+        "AnyContact_entity" : true,
+        "Salutation_entity" : true,
+        "Attribute_entity" : true,
+        "Activity_entity" : true,
+        "Contract_entity" : true,
+        "Campaign_entity" : true,
+        "BulkMail_entity" : true,
+        "Employee_entity" : true,
+        "Language_entity" : true,
+        "Product_entity" : true,
+        "Person_entity" : true,
+        "Offer_entity" : true,
+        "Order_entity" : true,
+        "Task_entity" : true,
+        "Role_entity" : true
+    }
 };
 $AttributeTypes.THEME = {
     toString : function () {return "THEME";},
diff --git a/process/Binary_lib/process.js b/process/Binary_lib/process.js
index 3f39e7653b33e50bda6ff89b10141551f74eede6..ee2996423e2057e1ca9adbaca31e37f16ad08f4c 100644
--- a/process/Binary_lib/process.js
+++ b/process/Binary_lib/process.js
@@ -18,14 +18,14 @@ function SingleBinaryUtils() {}
  * @param {String} pAssignmentTable 
  * @param {String} pAssignmentName 
  * @param {String} pAssignmentRowId 
- * @param {String} [pAlias=SqlUtils.getSystemAlias()]  
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]  
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return {String | Boolean} the binary data or false if no data exists 
  */
 SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias)
 {
-    if (pAlias == undefined) {pAlias = SqlUtils.getSystemAlias()}
+    if (pAlias == undefined) {pAlias = SqlUtils.getBinariesAlias()}
     
     if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
     {
@@ -42,7 +42,7 @@ SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentR
  * @param {String} pAssignmentTable 
  * @param {String} pAssignmentName 
  * @param {String} pAssignmentRowId 
- * @param {String} [pAlias=SqlUtils.getSystemAlias()]
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return result of the check
@@ -51,7 +51,7 @@ SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentR
  */
 SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias)
 {   
-    if (pAlias == undefined) {pAlias = SqlUtils.getSystemAlias()}
+    if (pAlias == undefined) {pAlias = SqlUtils.getBinariesAlias()}
     
     var countBinary = db.getBinaryCount(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias);
     
@@ -77,14 +77,14 @@ SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentNam
  * @param {String} pFileName 
  * @param {String} pDescription 
  * @param {String} pKeyword 
- * @param {String} [pAlias=SqlUtils.getSystemAlias()] 
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()] 
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return {String | Boolean} the ID of the inserted binary or false if data already existed.
  */
 SingleBinaryUtils.insert = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pKeyword, pAlias)
 {
-    if (pAlias == undefined) {pAlias = SqlUtils.getSystemAlias()}
+    if (pAlias == undefined) {pAlias = SqlUtils.getBinariesAlias()}
     
     if (!this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
     {
@@ -104,7 +104,7 @@ SingleBinaryUtils.insert = function(pAssignmentTable, pAssignmentName, pAssignme
  * @param {String} pBase64 
  * @param {String} pFileName 
  * @param {String} pDescription 
- * @param {String} [pAlias=SqlUtils.getSystemAlias()] 
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()] 
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return {String | Boolean} the ID of the inserted binary or false if data already existed.
@@ -123,14 +123,14 @@ SingleBinaryUtils.insertMainDocument = function(pAssignmentTable, pAssignmentNam
  * @param {String} pBase64 
  * @param {String} pFileName 
  * @param {String} pDescription 
- * @param {String} [pAlias=SqlUtils.getSystemAlias()] 
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()] 
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return {String | Boolean} true if inserted, false if the binary was not found
  */
 SingleBinaryUtils.update = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias)
 {
-    if (pAlias == undefined) {pAlias = SqlUtils.getSystemAlias()}
+    if (pAlias == undefined) {pAlias = SqlUtils.getBinariesAlias()}
     
     if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
     {
@@ -149,14 +149,14 @@ SingleBinaryUtils.update = function(pAssignmentTable, pAssignmentName, pAssignme
  * @param {String} pAssignmentTable 
  * @param {String} pAssignmentName 
  * @param {String} pAssignmentRowId 
- * @param {String} [pAlias = SqlUtils.getSystemAlias()] 
+ * @param {String} [pAlias = SqlUtils.getBinariesAlias()] 
  * 
  * @throws {Error} if more than one binary exists. This shouldn't happen, if this lib is used.
  * @return {String | Boolean} true if binary was removed, false if data didn't exist.
  */
 SingleBinaryUtils.remove = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias)
 {
-    if (pAlias == undefined) {pAlias = SqlUtils.getSystemAlias()}
+    if (pAlias == undefined) {pAlias = SqlUtils.getBinariesAlias()}
     
     if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
     {
diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js
index f784794a61a7b00394284e69fc4bbf9ce1b59a0d..591431ebb6878910352b2f7705681f91dfee9277 100644
--- a/process/Bulkmail_lib/process.js
+++ b/process/Bulkmail_lib/process.js
@@ -1,371 +1,433 @@
-import("system.translate");
-import("ActivityTask_lib");
-import("system.util");
-import("Contact_lib");
-import("system.datetime");
-import("system.neon");
-import("Employee_lib");
-import("system.vars");
-import("KeywordRegistry_basic");
-import("Sql_lib");
-import("system.db");
-import("DocumentTemplate_lib");
-import("Communication_lib");
-import("Email_lib");
-import("system.process");
-import("system.notification");
-
-/**
- * functions for bulk mails
- */
-function BulkMailUtils () {}
-
-/**
- * Executes a process to send bulk mails on the server and creates a notification when finished.
- * 
- * @param {String} pBulkMailId id of the bulk mail
- * @param {Array} [pTestRecipients] overwrite the recipients (e.g. for testing)
- * @param {String} [pUser=currentUser] User that will get the notification, if null (not undefined!), no notification
- *                                      will be created.
- */
-BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUser)
-{
-    if (pUser === undefined)
-        pUser = EmployeeUtils.getCurrentUserId();
-    process.execute("sendBulkMail_serverProcess", 
-        {
-            bulkMailId : pBulkMailId,
-            testRecipients : JSON.stringify(pTestRecipients),
-            user : pUser || ""
-        }
-    );
-}
-
-/**
- * Sends a bulk mail. You should only call this function on the server because it
- * can take some time to execute, use BulkMailUtils.sendBulkMailOnServer instead.
- * 
- * @param {String} pBulkMailId id of the bulk mail 
- * @param {Array} [pTestRecipients] overwrite the recipients (e.g. for testing)
- * 
- * @return {Object} count of sucessful and failed mails 
- */
-BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients)
-{
-    var [templateId, subject, emailSender, createActivity, bulkMailName] = db.array(db.ROW, SqlCondition.begin()
-        .andPrepare("BULKMAIL.BULKMAILID", pBulkMailId)
-        .buildSql("select DOCUMENTTEMPLATE_ID, SUBJECT, SENDER, CREATEACTIVITIES, NAME from BULKMAIL", "1=2")
-    );
-    var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId);
-    
-    var recipientData;
-    if (pTestRecipients)
-    {
-        recipientData = pTestRecipients.map(function (row)
-        {
-            return ["", row[0], row[1], "", ""];
-        });
-    }
-    else
-    {
-        recipientData = db.table(SqlBuilder.begin()
-            .select("BULKMAILRECIPIENTID, BULKMAILRECIPIENT.CONTACT_ID, (" + CommUtil.getStandardSubSqlMail() + "), PERSON_ID, ORGANISATION_ID")
-            .from("CONTACT")
-            .join("BULKMAILRECIPIENT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")
-            .where(SqlCondition.begin()
-                .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId)
-                .andPrepare("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent(), "# != ?")
-                .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)))
-            .build()
-        );
-    }
-    var contactIds = recipientData.map(function (e) {return e[1];});
-    var successIds = [];
-    var failedIds = [];
-    var sentDate = vars.get("$sys.date");
-    var mails = template.getReplacedEmailsByContactIds(contactIds);
-    
-    var subjectTemplate = new DocumentTemplate(subject, DocumentTemplate.types.PLAIN);
-    var subjects = subjectTemplate.getReplacedContentByContactIds(contactIds);
-    
-    var bulkMailLink = [["BulkMail", pBulkMailId]];
-    var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]);
-    
-    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 && recipientData[i][2])
-        {
-            email.toRecipients = [recipientData[i][2]];
-            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]);
-            if (isSuccess && createActivity == "1")
-            {
-                let activityData = {
-                    categoryKeywordId : $KeywordRegistry.activityCategory$mail(),
-                    directionKeywordId : $KeywordRegistry.activityDirection$outgoing(),
-                    subject : activitySubject,
-                    content : email.body
-                };
-                let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]];
-                ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink));
-            }
-        }
-    }
-    if (successIds.length > 0)
-        db.updateData("BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate], 
-            SqlCondition.begin()
-                .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds)
-                .build("1=2")
-        );
-    if (failedIds.length > 0)
-        db.updateData("BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$failed(), sentDate], 
-            SqlCondition.begin()
-                .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds)
-                .build("1=2")
-        );
-    
-    if (!pTestRecipients) //if its just a test run, don't set the status to sent
-        db.updateData("BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()], 
-            SqlCondition.equals("BULKMAIL.BULKMAILID", pBulkMailId, "1=2"));
-        
-    return {
-        sucessful : successIds.length,
-        failed : failedIds.length
-    };
-}
-
-/**
- * opens a context to select a bulk mail to add recipients to
- * 
- * @param {String[]} pContactIds recipients that should be added
- */
-BulkMailUtils.openAddRecipientView = function (pContactIds)
-{
-    var params = {
-        "ContactIds_param" : pContactIds
-    };
-    neon.openContext("BulkMailAddRecipients", "BulkMailAddRecipientsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
-}
-
-/**
- * deletes all bulk mail recipients that have a commrestriction for emails
- * 
- * @param {String} pBulkMailId
- */
-BulkMailUtils.removeCommRestrictionRecipients = function (pBulkMailId)
-{
-    var recipientIds = db.array(db.COLUMN, SqlBuilder.begin()
-        .select("BULKMAILRECIPIENTID")
-        .from("BULKMAILRECIPIENT")
-        .join("CONTACT", SqlCondition.begin()
-            .and("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")
-            .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail())))
-        .where(SqlCondition.begin()
-            .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId))
-        .build());
-
-    if (recipientIds.length)
-    {
-        db.deleteData("BULKMAILRECIPIENT", SqlCondition.begin()
-            .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", recipientIds)
-            .build("1=2"));
-    }
-}
-
-/**
- * adds recipients to a bulkmail
- * 
- * @param {String} pBulkMailId bulk mail id
- * @param {String[]} pContactIds contact ids of the recipients
- */
-BulkMailUtils.addRecipients = function (pBulkMailId, pContactIds)
-{
-    var columns = [
-        "BULKMAILRECIPIENTID",
-        "BULKMAIL_ID",
-        "CONTACT_ID",
-        "STATUS"
-    ];
-    var inserts = [];
-    for (let i = 0, l = pContactIds.length; i < l; i++)
-    {
-        inserts.push(["BULKMAILRECIPIENT", columns, null, [util.getNewUUID(), pBulkMailId, pContactIds[i], $KeywordRegistry.bulkMailRecipientStatus$pending()]]);
-    }
-    db.inserts(inserts);
-}
-
-/**
- * Loads the document template of a bulk mail. If the bulk mail itself has a
- * template, it is preferred over the documentTemplate-id.
- * 
- * @param {String} pBulkMailId bulkmail id
- * @param {String} pDocumentTemplateId documentTemplate id
- * 
- * @return {DocumentTemplate} the document template, null if no content was found.
- */
-BulkMailUtils.getBulkMailTemplate = function (pBulkMailId, pDocumentTemplateId)
-{
-    var template = DocumentTemplate.loadTemplate(pBulkMailId, "BULKMAIL");
-    if (!template.type)
-        template = DocumentTemplate.loadTemplate(pDocumentTemplateId);
-    return template;
-}
-
-/**
- * checks if a contact is a recipient of a bulk mail
- * 
- * @param {String} pBulkMailId bulkmail id
- * @param {String} pContactId contact id
- * @param {String} pRecipientId bulkmailrecipient id
- * @return {boolean} true, if the contact is a recipient
- */
-BulkMailUtils.isRecipient = function (pBulkMailId, pContactId, pRecipientId)
-{
-    return db.cell(SqlCondition.begin()
-        .andPrepare("BULKMAILRECIPIENT.CONTACT_ID", pContactId)
-        .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId)
-        .andPrepareIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", pRecipientId, "# != ?")
-        .buildSql("select count(*) from BULKMAILRECIPIENT") //TODO: is there a way exists could be used?
-    ) != "0";
-}
-
-/**
- * opens the BulkMail context in new mode
- * 
- * @param {String[]} [pRecipients] recipients that should be added after creation
- */
-BulkMailUtils.newBulkMail = function (pRecipients)
-{
-    var params = {
-        "PresetRecipients_param" : JSON.stringify(pRecipients)
-    };
-    neon.openContext("BulkMail", "BulkMailEdit_view", null, neon.OPERATINGSTATE_NEW, params);
-}
-
-/**
- * Filters the given contactIds if they can be added as new recipients.
- * Checks if a contact is already a recipient or if there is a advertising ban.
- * 
- * @param {String} pBulkMailId id of the bulk mail the contacts should be added to
- * @param {String[]} pContactIds contacts to filter
- * @return {String[]} contacts that can be added as recipients
- */
-BulkMailUtils.filterNewRecipients = function (pBulkMailId, pContactIds)
-{
-    var existsQuery = "not exists(select BULKMAILRECIPIENTID from BULKMAILRECIPIENT where BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID and # = ?)";
-    var query = SqlCondition.begin()
-        .andIn("CONTACT.CONTACTID", pContactIds)
-        .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId, existsQuery) //only add contacts that aren't already recipients
-        .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true))  //check if there's a commrestriction
-        .buildSql("select CONTACTID from CONTACT");
-
-    return db.array(db.COLUMN, query); 
-}
-
-/**
- * opens the given bulk mail
- */
-BulkMailUtils.openBulkMail = function (pBulkMailId)
-{
-    neon.openContext("BulkMail", "BulkMailMain_view", [pBulkMailId], neon.OPERATINGSTATE_VIEW, null);
-}
-
-function SerialLetterUtils () {}
-
-/**
- * adds recipients to a serial letter
- * 
- * @param {String} pSerialLetterId serial letter id
- * @param {String[]} pContactIds contact ids of the recipients
- */
-SerialLetterUtils.addRecipients = function (pSerialLetterId, pContactIds)
-{
-    var columns = [
-        "LETTERRECIPIENTID",
-        "SERIALLETTER_ID",
-        "CONTACT_ID"
-    ];
-    var inserts = [];
-    for (let i = 0, l = pContactIds.length; i < l; i++)
-    {
-        inserts.push(["LETTERRECIPIENT", columns, null, [util.getNewUUID(), pSerialLetterId, pContactIds[i]]]);
-    }
-    db.inserts(inserts);
-}
-
-/**
- * opens a context to select a serial letter to add recipients to
- * 
- * @param {String[]} pContactIds recipients that should be added
- */
-SerialLetterUtils.openAddRecipientView = function (pContactIds)
-{
-    var params = {
-        "ContactIds_param" : pContactIds
-    };
-    neon.openContext("SerialLetterAddRecipients", "SerialLetterAddRecipientsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
-}
-
-/**
- * executes a server process that builds a serial letter
- * 
- * @param {String} pSerialLetterId serial letter id
- * @param {String[]} [pRecipientIds] Letter recipient ids of that should be used.
- *                                    If omitted, all recipients of the letter will be used.
- */
-SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds)
-{
-    process.execute("buildSerialLetter_serverProcess", {
-        "serialLetterId" : pSerialLetterId,
-        "recipientIds" : JSON.stringify(pRecipientIds)
-    });
-}
-
-/**
- * checks if a contact is a recipient of a serial letter
- * 
- * @param {String} pSerialLetterId serial letter id
- * @param {String} pContactId contact id
- * @param {String} [pRecipientId] letter recipient id
- * @return {boolean} true, if the contact is a recipient
- */
-SerialLetterUtils.isRecipient = function (pSerialLetterId, pContactId, pRecipientId)
-{
-    return db.cell(SqlCondition.begin()
-        .andPrepare("LETTERRECIPIENT.CONTACT_ID", pContactId)
-        .andPrepare("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId)
-        .andPrepareIfSet("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientId, "# != ?")
-        .buildSql("select count(*) from LETTERRECIPIENT") //TODO: is there a way exists could be used?
-    ) != "0";
-}
-
-SerialLetterUtils.openSerialLetter = function (pSerialLetterId)
-{
-    neon.openContext("SerialLetter", "SerialLetterMain_view", [pSerialLetterId], neon.OPERATINGSTATE_VIEW, null);
-}
-
-/**
- * Loads the document template of a serial letter. If the serial letter itself has a
- * template, it is preferred over the documentTemplate-id.
- * 
- * @param {String} pLetterId serial letter id
- * @param {String} pDocumentTemplateId documentTemplate id
- * 
- * @return {DocumentTemplate} the document template
- */
-SerialLetterUtils.getSerialLetterTemplate = function (pLetterId, pDocumentTemplateId)
-{
-    var template = DocumentTemplate.loadTemplate(pLetterId, "SERIALLETTER");
-    if (!template.type)
-        template = DocumentTemplate.loadTemplate(pDocumentTemplateId);
-    return template;
+import("system.translate");
+import("ActivityTask_lib");
+import("system.util");
+import("Contact_lib");
+import("system.datetime");
+import("system.neon");
+import("Employee_lib");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("system.db");
+import("DocumentTemplate_lib");
+import("Communication_lib");
+import("Email_lib");
+import("system.process");
+import("system.notification");
+
+/**
+ * functions for bulk mails
+ */
+function BulkMailUtils () {}
+
+/**
+ * Executes a process to send bulk mails on the server and creates a notification when finished.
+ * 
+ * @param {String} pBulkMailId id of the bulk mail
+ * @param {Array} [pTestRecipients] overwrite the recipients (e.g. for testing)
+ * @param {String} [pUser=currentUser] User that will get the notification, if null (not undefined!), no notification
+ *                                      will be created.
+ */
+BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUser)
+{
+    if (pUser === undefined)
+        pUser = EmployeeUtils.getCurrentUserId();
+    process.execute("sendBulkMail_serverProcess", 
+        {
+            bulkMailId : pBulkMailId,
+            testRecipients : JSON.stringify(pTestRecipients),
+            user : pUser || ""
+        }
+    );
+}
+
+/**
+ * Sends a bulk mail. You should only call this function on the server because it
+ * can take some time to execute, use BulkMailUtils.sendBulkMailOnServer instead.
+ * 
+ * @param {String} pBulkMailId id of the bulk mail 
+ * @param {Array} [pTestRecipients] overwrite the recipients (e.g. for testing)
+ * 
+ * @return {Object} count of sucessful and failed mails 
+ */
+BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients)
+{
+    var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = db.array(db.ROW, SqlCondition.begin()
+        .andPrepare("BULKMAIL.BULKMAILID", pBulkMailId)
+        .buildSql("select DOCUMENTTEMPLATE_ID, SUBJECT, SENDER, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS from BULKMAIL", "1=2")
+    );
+    useTemplateAttachments = useTemplateAttachments == "1";
+        
+    var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments);
+
+    var recipientData;
+    if (pTestRecipients)
+    {
+        recipientData = pTestRecipients.map(function (row)
+        {
+            return ["", row[0], row[1], "", ""];
+        });
+    }
+    else
+    {
+        recipientData = db.table(SqlBuilder.begin()
+            .select("BULKMAILRECIPIENTID, BULKMAILRECIPIENT.CONTACT_ID, (" + CommUtil.getStandardSubSqlMail() + "), PERSON_ID, ORGANISATION_ID")
+            .from("CONTACT")
+            .join("BULKMAILRECIPIENT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")
+            .where(SqlCondition.begin()
+                .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId)
+                .andPrepare("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent(), "# != ?")
+                .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)))
+            .build()
+        );
+    }
+    var contactIds = recipientData.map(function (e) {return e[1];});
+    var successIds = [];
+    var failedIds = [];
+    var sentDate = vars.get("$sys.date");
+    var mails = Email.getReplacedBulkEmails(template, contactIds);
+    
+    var subjectTemplate = new DocumentTemplate(subject, DocumentTemplate.types.PLAIN);
+    var subjects = subjectTemplate.getReplacedContentByContactIds(contactIds);
+    
+    var bulkMailLink = [["BulkMail", pBulkMailId]];
+    var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]);
+    
+    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 && recipientData[i][2])
+        {
+            email.toRecipients = [recipientData[i][2]];
+            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]);
+            if (isSuccess && createActivity == "1")
+            {
+                let activityData = {
+                    categoryKeywordId : $KeywordRegistry.activityCategory$mail(),
+                    directionKeywordId : $KeywordRegistry.activityDirection$outgoing(),
+                    subject : activitySubject,
+                    content : email.body
+                };
+                let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]];
+                ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink));
+            }
+        }
+    }
+    if (successIds.length > 0)
+        db.updateData("BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate], 
+            SqlCondition.begin()
+                .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds)
+                .build("1=2")
+        );
+    if (failedIds.length > 0)
+        db.updateData("BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$failed(), sentDate], 
+            SqlCondition.begin()
+                .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds)
+                .build("1=2")
+        );
+    
+    if (!pTestRecipients) //if its just a test run, don't set the status to sent
+        db.updateData("BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()], 
+            SqlCondition.equals("BULKMAIL.BULKMAILID", pBulkMailId, "1=2"));
+        
+    return {
+        sucessful : successIds.length,
+        failed : failedIds.length
+    };
+}
+
+/**
+ * opens a context to select a bulk mail to add recipients to
+ * 
+ * @param {String[]} pContactIds recipients that should be added
+ */
+BulkMailUtils.openAddRecipientView = function (pContactIds)
+{
+    var params = {
+        "ContactIds_param" : pContactIds
+    };
+    neon.openContext("BulkMailAddRecipients", "BulkMailAddRecipientsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+}
+
+/**
+ * deletes all bulk mail recipients that have a commrestriction for emails
+ * 
+ * @param {String} pBulkMailId
+ */
+BulkMailUtils.removeCommRestrictionRecipients = function (pBulkMailId)
+{
+    var recipientIds = db.array(db.COLUMN, SqlBuilder.begin()
+        .select("BULKMAILRECIPIENTID")
+        .from("BULKMAILRECIPIENT")
+        .join("CONTACT", SqlCondition.begin()
+            .and("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")
+            .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail())))
+        .where(SqlCondition.begin()
+            .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId))
+        .build());
+
+    if (recipientIds.length)
+    {
+        db.deleteData("BULKMAILRECIPIENT", SqlCondition.begin()
+            .andIn("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", recipientIds)
+            .build("1=2"));
+    }
+}
+
+/**
+ * adds recipients to a bulkmail
+ * 
+ * @param {String} pBulkMailId bulk mail id
+ * @param {String[]} pContactIds contact ids of the recipients
+ */
+BulkMailUtils.addRecipients = function (pBulkMailId, pContactIds)
+{
+    var columns = [
+        "BULKMAILRECIPIENTID",
+        "BULKMAIL_ID",
+        "CONTACT_ID",
+        "STATUS"
+    ];
+    var inserts = [];
+    for (let i = 0, l = pContactIds.length; i < l; i++)
+    {
+        inserts.push(["BULKMAILRECIPIENT", columns, null, [util.getNewUUID(), pBulkMailId, pContactIds[i], $KeywordRegistry.bulkMailRecipientStatus$pending()]]);
+    }
+    db.inserts(inserts);
+}
+
+/**
+ * Loads the document template of a bulk mail. If the bulk mail itself has a
+ * template, it is preferred over the documentTemplate-id.
+ * 
+ * @param {String} pBulkMailId bulkmail id
+ * @param {String} pDocumentTemplateId documentTemplate id
+ * @param {Boolean} [pResolveSubtemplates=true] if true subtemplates are resolved (if the type is html)
+ * @param {Boolean} [pUseTemplateAttachments=false] if true the attachments from the document template is always used
+ * 
+ * @return {DocumentTemplate} the document template, null if no content was found.
+ */
+BulkMailUtils.getBulkMailTemplate = function (pBulkMailId, pDocumentTemplateId, pResolveSubtemplates, pUseTemplateAttachments)
+{
+    var bulkTemplate = DocumentTemplate.loadTemplate(pBulkMailId, "BULKMAIL", pResolveSubtemplates);
+    var documentTemplate = DocumentTemplate.loadTemplate(pDocumentTemplateId, undefined, pResolveSubtemplates);
+
+    if (!bulkTemplate.content)
+    {
+        return documentTemplate;
+    }
+    else
+    {
+        if (pUseTemplateAttachments)
+            bulkTemplate.setAttachments(documentTemplate.getAttachments());
+        
+        return bulkTemplate;
+    }
+}
+
+/**
+ * checks if a contact is a recipient of a bulk mail
+ * 
+ * @param {String} pBulkMailId bulkmail id
+ * @param {String} pContactId contact id
+ * @param {String} pRecipientId bulkmailrecipient id
+ * @return {boolean} true, if the contact is a recipient
+ */
+BulkMailUtils.isRecipient = function (pBulkMailId, pContactId, pRecipientId)
+{
+    return db.cell(SqlCondition.begin()
+        .andPrepare("BULKMAILRECIPIENT.CONTACT_ID", pContactId)
+        .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId)
+        .andPrepareIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", pRecipientId, "# != ?")
+        .buildSql("select count(*) from BULKMAILRECIPIENT") //TODO: is there a way exists could be used?
+    ) != "0";
+}
+
+/**
+ * opens the BulkMail context in new mode
+ * 
+ * @param {String[]} [pRecipients] recipients that should be added after creation
+ */
+BulkMailUtils.newBulkMail = function (pRecipients)
+{
+    var params = {
+        "PresetRecipients_param" : JSON.stringify(pRecipients)
+    };
+    neon.openContext("BulkMail", "BulkMailEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+}
+
+/**
+ * Filters the given contactIds if they can be added as new recipients.
+ * Checks if a contact is already a recipient or if there is a advertising ban.
+ * 
+ * @param {String} pBulkMailId id of the bulk mail the contacts should be added to
+ * @param {String[]} pContactIds contacts to filter
+ * @return {String[]} contacts that can be added as recipients
+ */
+BulkMailUtils.filterNewRecipients = function (pBulkMailId, pContactIds)
+{
+    var existsQuery = "not exists(select BULKMAILRECIPIENTID from BULKMAILRECIPIENT where BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID and # = ?)";
+    var query = SqlCondition.begin()
+        .andIn("CONTACT.CONTACTID", pContactIds)
+        .andPrepare("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId, existsQuery) //only add contacts that aren't already recipients
+        .andSqlCondition(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true))  //check if there's a commrestriction
+        .buildSql("select CONTACTID from CONTACT");
+
+    return db.array(db.COLUMN, query); 
+}
+
+/**
+ * opens the given bulk mail
+ */
+BulkMailUtils.openBulkMail = function (pBulkMailId)
+{
+    neon.openContext("BulkMail", "BulkMailMain_view", [pBulkMailId], neon.OPERATINGSTATE_VIEW, null);
+}
+
+/**
+ * checks is the given mime type can be used for a bulk mail
+ * 
+ * @param {String} pMimeType mime type
+ * @return {Boolean} wheter the type is usable or not
+ */
+BulkMailUtils.isValidMimeType = function (pMimeType)
+{
+    var templateType = DocumentTemplate.types.fromMimeType(pMimeType);
+    return BulkMailUtils.isValidTemplateType(templateType)
+}
+
+/**
+ * checks is the given template type can be used for a bulk mail
+ * 
+ * @param {String} pTemplateType template type
+ * @return {Boolean} wheter the type is usable or not
+ */
+BulkMailUtils.isValidTemplateType = function (pTemplateType)
+{
+    switch (pTemplateType)
+    {
+        case DocumentTemplate.types.EML:
+        case DocumentTemplate.types.HTML:
+        case DocumentTemplate.types.TXT:
+            return true;
+        default:
+            return false;
+    }
+}
+
+/**
+ * @param {String} pStatus the keyid of the current status
+ * @return {Boolean} true if the status is "sent" or "sending" 
+ */
+BulkMailUtils.isStatusSendingOrSent = function (pStatus)
+{
+    return pStatus == $KeywordRegistry.bulkMailStatus$sent() || pStatus == $KeywordRegistry.bulkMailStatus$beingSent()
+}
+
+BulkMailUtils.copy = function(pBulkMailId)
+{
+    var params = {
+        "CopyBulkMailId_param" : pBulkMailId
+    };
+    neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params);
+}
+
+function SerialLetterUtils () {}
+
+/**
+ * adds recipients to a serial letter
+ * 
+ * @param {String} pSerialLetterId serial letter id
+ * @param {String[]} pContactIds contact ids of the recipients
+ */
+SerialLetterUtils.addRecipients = function (pSerialLetterId, pContactIds)
+{
+    var columns = [
+        "LETTERRECIPIENTID",
+        "SERIALLETTER_ID",
+        "CONTACT_ID"
+    ];
+    var inserts = [];
+    for (let i = 0, l = pContactIds.length; i < l; i++)
+    {
+        inserts.push(["LETTERRECIPIENT", columns, null, [util.getNewUUID(), pSerialLetterId, pContactIds[i]]]);
+    }
+    db.inserts(inserts);
+}
+
+/**
+ * opens a context to select a serial letter to add recipients to
+ * 
+ * @param {String[]} pContactIds recipients that should be added
+ */
+SerialLetterUtils.openAddRecipientView = function (pContactIds)
+{
+    var params = {
+        "ContactIds_param" : pContactIds
+    };
+    neon.openContext("SerialLetterAddRecipients", "SerialLetterAddRecipientsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+}
+
+/**
+ * executes a server process that builds a serial letter
+ * 
+ * @param {String} pSerialLetterId serial letter id
+ * @param {String[]} [pRecipientIds] Letter recipient ids of that should be used.
+ *                                    If omitted, all recipients of the letter will be used.
+ */
+SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds)
+{
+    process.execute("buildSerialLetter_serverProcess", {
+        "serialLetterId" : pSerialLetterId,
+        "recipientIds" : JSON.stringify(pRecipientIds)
+    });
+}
+
+/**
+ * checks if a contact is a recipient of a serial letter
+ * 
+ * @param {String} pSerialLetterId serial letter id
+ * @param {String} pContactId contact id
+ * @param {String} [pRecipientId] letter recipient id
+ * @return {boolean} true, if the contact is a recipient
+ */
+SerialLetterUtils.isRecipient = function (pSerialLetterId, pContactId, pRecipientId)
+{
+    return db.cell(SqlCondition.begin()
+        .andPrepare("LETTERRECIPIENT.CONTACT_ID", pContactId)
+        .andPrepare("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId)
+        .andPrepareIfSet("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientId, "# != ?")
+        .buildSql("select count(*) from LETTERRECIPIENT") //TODO: is there a way exists could be used?
+    ) != "0";
+}
+
+SerialLetterUtils.openSerialLetter = function (pSerialLetterId)
+{
+    neon.openContext("SerialLetter", "SerialLetterMain_view", [pSerialLetterId], neon.OPERATINGSTATE_VIEW, null);
+}
+
+/**
+ * Loads the document template of a serial letter. If the serial letter itself has a
+ * template, it is preferred over the documentTemplate-id.
+ * 
+ * @param {String} pLetterId serial letter id
+ * @param {String} pDocumentTemplateId documentTemplate id
+ * 
+ * @return {DocumentTemplate} the document template
+ */
+SerialLetterUtils.getSerialLetterTemplate = function (pLetterId, pDocumentTemplateId)
+{
+    var template = DocumentTemplate.loadTemplate(pLetterId, "SERIALLETTER");
+    if (!template.type)
+        template = DocumentTemplate.loadTemplate(pDocumentTemplateId);
+    return template;
 }
\ No newline at end of file
diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js
index fddc0663aa181607e49b22260d9d67d504705686..9d639799ce192a984cf1b31b9d1fb7b559889ec4 100644
--- a/process/Calendar_lib/process.js
+++ b/process/Calendar_lib/process.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("system.neon");
 import("system.vars");
 import("system.db");
@@ -72,7 +73,7 @@ CalendarUtil.newTodo = function(pSummary, pDescription, pWithLink, pUser, pAffec
  * Finds the effective calendarId of an user in the same attribute order like the ADITO core, which is exchangeEmail -> calendarID -> email
  * DO NOT CHANGE THIS ORDER
  *
- * @param {String} user to check
+ * @param {String} pUser to check
  * @return effective calendar id
  */
 CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser)
@@ -140,6 +141,7 @@ CalendarUtil.newSilentTodo = function(pSummary, pDescription, pWithLink, pUser,
  * @param {integer} pCategory opt ( calendars.CATEGORIES , encoded(String) z.B.: text.encodeMS(["Service"]) )
  * @param {String} pStatus opt Status des Termins ( calendars.STATUS_TENTATIVE, calendars.STATUS_CONFIRMED, calendars.STATUS_CANCELLED )
  * @param {Array{[]} pComps4Refresh opt die zu aktualisierenden Komponenten
+ * @param {Array{[]} pWorklistId opt
  * 
  * @return {void}
  */
@@ -203,9 +205,8 @@ CalendarUtil.newSilentEvent = function( pSummary, pDescription, pWithLink, pUser
  * @param {String} pSummary opt die Zusammenfassung
  * @param {String} pDescription opt die Beschreibung
  * @param {Boolean} pWithLink opt TRUE legt eine Verknüpfung zu $image.frametable
- * @param {String[][]} pWithLink opt pWithLink[0]: Name des Frames
- *                		     pWithLink[1]: ID des angezeigten Datensatzes
- *                		     pWithLink[2]: Verknüpfungstitel
+ * @param {Boolean} pAppLinkContext opt Name des Frames
+ * @param {Boolean} pAppLinkId opt ID des angezeigten Datensatzes
  * @param {String} pUser opt der Benutzer ( Login )
  * @param {[]} pAffectedUsers opt die betroffenen Benutzer ( [ Login ] )
  * @param {date} pStart opt Beginn
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index 0cce037c488c4c68225355a8649dea1f20c83021..48bc233b1aae6ec7cc7b8cb5945f0c5d4ac38f5f 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -29,6 +29,7 @@ CampaignUtils.addParticipant = function(pContactId)
  * Add many Contacts (Person or Organistaion) to a Campaign
  * 
  * @param {String} pRowIds req ContactIds
+ * @param {String} pSourceTableName req
  */
 CampaignUtils.addParticipantsByRowIds = function(pRowIds, pSourceTableName)
 {
@@ -39,7 +40,8 @@ CampaignUtils.addParticipantsByRowIds = function(pRowIds, pSourceTableName)
 /**
  * Add many Contacts (Person or Organistaion) to a Campaign
  * 
- * @param {String} pRowIds req ContactIds
+ * @param {String} pCondition req ContactIds
+ * @param {String} pSourceTableName req
  */
 CampaignUtils.addParticipantsByCondition = function(pCondition, pSourceTableName)
 {
@@ -172,7 +174,7 @@ CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaig
 /**
  * Opens the view to create a new Step in the specified campaign
  * 
- * @param Id of the campaign for which the step should be created
+ * @param {String} pCampaignId of the campaign for which the step should be created
  */
 CampaignUtils.openNewCampaignStepView = function(pCampaignId)
 {
@@ -296,34 +298,28 @@ CampaignUtils.checkforCommRestrictions = function(contactid, campaignstepid)
                 .buildSql("select MEDIUM from CAMPAIGNSTEP join COMMRESTRICTION on MEDIUM = STEPMEDIUM", "1=2"));
 }
 
-CampaignUtils.GetParticipantsAlreadyAddedCountByRowId = function(pWhereCondition, pRowIdsComparisonField, pParticipantRowIds)
-{
-    let rowIdsAsRay = _CampaignUtils._convertToSqlValuesList(pParticipantRowIds);
-    
-    let query = "SELECT COUNT(*) FROM CAMPAIGNPARTICIPANT"
-    + " where " + pWhereCondition + " AND"
-    + " " + pRowIdsComparisonField + " IN " + rowIdsAsRay;
-
-    return db.cell(query)
+/**
+ * @param {SqlCondition} pWhereCondition an SqlCondition object containing a condition to select from campaignparticipant
+ * @return {String} the counts (as string)
+ */
+CampaignUtils.GetParticipantsCountByCondition = function(pWhereCondition)
+{   
+    return db.cell(pWhereCondition.buildSql("SELECT COUNT(*) FROM CAMPAIGNPARTICIPANT", "1=2"));
 }
 
-CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondition, pCondition, pRightJoinContacts)
+CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondition, pRightJoinContacts)
 {
-    let query = "select count(*) from PERSON"
+    let selectSql = "select count(*) from PERSON"
     
     if(pRightJoinContacts == "true")
-        query += " right"
+        selectSql += " right"
     
-    query += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)"
+    selectSql += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)"
     + " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)"
     + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)"
     + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID"
-    + " where " + pWhereCondition
 
-    if(pCondition != "")
-        query += " and " + pCondition;
-    
-    return db.cell(query)
+    return db.cell(pWhereCondition.buildSql(selectSql, "1=2"))
 }
 
 CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pParticipantRowIds)
@@ -427,7 +423,7 @@ CampaignUtils.copyCampaignSteps = function(pSourceCampaignId, pTargetCampaignId)
 {
         var InputMapping = {
         "CAMPAIGNSTEP": {
-            condition: db.translateCondition(SqlCondition().begin()
+            condition: SqlUtils.translateConditionWithQuotes(SqlCondition().begin()
                             .andPrepare("CAMPAIGN.CAMPAIGN_ID", pSourceCampaignId)
                             .buildSql("", "1=2", "order by SORTING", false)),
             ValueMapping: {
@@ -473,9 +469,10 @@ _CampaignUtils._selectFromContactWithJoin = function(pSelectFields, pCampaignId,
  * Open EditView to Add Participants to a Campaignstep
  * 
  * @param {String} pContext req name of the context
- * @param {String} pRowIds req Contact-Ids
- * @param {String} pEntityParam req parameter for the entity (CAMPAIGNSTEP)
+ * @param {String} pTargetDataExpression req
+ * @param {String} pDataExpressionParameterName req parameter for the entity (CAMPAIGNSTEP)
  * @param {String} pView req targeting view
+ * @param {String} pSourceTableName req
  * 
  */
 _CampaignUtils._openAddParticipantContext = function(pContext, pTargetDataExpression, pDataExpressionParameterName, pView, pSourceTableName)
diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js
index c5d7ddc74389fdf028a22ecb112f53f1b4c0c024..f49ed47099fa0e99f715c5dcc9dbbc6ddc29ea51 100644
--- a/process/Classification_lib/process.js
+++ b/process/Classification_lib/process.js
@@ -26,7 +26,7 @@ ClassificationUtils.getScore = function(pClassificationType, pObjectType, pObjec
                                      .andPrepare("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", pClassificationType)
                                      .andPrepareIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", pClassificationGroup)
                                      .buildSql("select CLASSIFICATIONTYPE.CLASSIFICATIONGROUP, case when sum(score) is not null then sum(score) else 0 end from CLASSIFICATIONTYPE "
-                                                + db.translateStatement(SqlCondition.begin()
+                                                + SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
                                                                                     .andPrepare("CLASSIFICATION.OBJECT_TYPE", pObjectType)
                                                                                     .andPrepare("CLASSIFICATION.OBJECT_ROWID", pObjectRowid)
                                                                                     .buildSql("left join CLASSIFICATION on CLASSIFICATIONTYPEID = CLASSIFICATIONTYPE_ID and", "1=2", "", false))
diff --git a/process/Communication_lib/process.js b/process/Communication_lib/process.js
index 440720e427970d7df18bbf14c4a47b17f97e5d2b..fccd20c99071cf8af874fa16c7493215a5bcfa87 100644
--- a/process/Communication_lib/process.js
+++ b/process/Communication_lib/process.js
@@ -140,7 +140,7 @@ CommUtil.getStandardSubSqlForCategory = function(pCategory, pContactField)
     
     cond.and("COMMUNICATION.ISSTANDARD = 1");
     
-    var res = db.translateStatement(cond.buildSql("select max(COMMUNICATION.ADDR) from COMMUNICATION", "1=0"));
+    var res = SqlUtils.translateStatementWithQuotes(cond.buildSql("select max(COMMUNICATION.ADDR) from COMMUNICATION", "1=0"));
     return res;
 };
 
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 2a024cfb4fd130ca010a34fd7c25fc35192bd3d7..ae48caa5f0fe4d61727bbc34e6ac580b1e3de637 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -279,7 +279,7 @@ ContactUtils.getContextByContactId = function(pContactId)
  * get the person- and org-id from a contact as array
  * 
  * @param {String} pContactId
- * @return {String[]} result as [contactid, persid, orgid] if one of them is null in the db, "" will be returned as the id.
+ * @return {String[]} result as [contactid, persid, orgid] if one of them is null in the db, "" will be returned as the id. if Contactid is empty -> [] is returned
  */
 ContactUtils.getPersOrgIds = function(pContactId)
 {
@@ -293,6 +293,19 @@ ContactUtils.getPersOrgIds = function(pContactId)
     return [];
 }
 
+ContactUtils.getPersId = function(pContactId)
+{
+    persId = ContactUtils.getPersOrgIds(pContactId)
+    if (persId.length > 0)
+    {
+        persId = persId[1];
+    }
+    else
+        persId = "";
+    
+    return persId  ;
+}
+
 /**
  * get the contactId from the OrganisationId
  * 
@@ -543,6 +556,23 @@ Contact.createWithColumnPreset = function()
     return contact;
 };
 
+/**
+ * creates a new Contact-object with a preset of DB-columns
+ * 
+ * @static
+ */
+Contact.createWithColumnPresetForPrivatePerson = function()
+{
+    var contact = new Contact();
+    contact.salutation = "PERSON.SALUTATION";
+    contact.title = "PERSON.TITLE";
+    contact.firstname= "PERSON.FIRSTNAME";
+    contact.middlename = "PERSON.MIDDLENAME";
+    contact.lastname = "PERSON.LASTNAME";
+    contact.suffix = "PERSON.TITLESUFFIX";
+    return contact;
+};
+
 /**
  * object for rendering a Contact-object into text representation or an sql that represents the text
  * provides static- and instance-functions
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index 50aeb817ca2cba8bd9604ed246ab80156b866aed..b9e558392fa7b80b6e1ef2cb35753bc1685dc64b 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("system.entities");
 import("system.tools");
 import("system.neon");
 import("system.db");
@@ -82,52 +84,74 @@ ContextUtils.getContextConsumer = function(pContextId)
             return "Campaigns";
         case ContextUtils.getContextName("CampaignStep"):
             return "CampaignSteps";
+        case ContextUtils.getContextName("PrivatePerson"):
+            return "PrivatePersons";
     }
 }
 
+/**
+ * loads the contenttitle by using entities.getRow
+ * @param {String} pEntity The entity name you want to load the title for
+ * @param {String} pUid the uid for which to load the title
+ * 
+ * @return the #CONTENTTITLE or ""
+ */
+ContextUtils.loadContentTitle = function(pEntity, pUid)
+{    
+    if (!pUid)
+    {
+        return "";
+    }
+    
+    var conf = entities.createConfigForLoadingRows()
+                        .entity(pEntity)
+                        .uid(pUid)
+                        .fields(["#CONTENTTITLE"]);
+
+    if (entities.getRowCount(conf) > 0)
+    {
+        return entities.getRow(conf)["#CONTENTTITLE"];
+    }
+     
+    return "";
+}
+
 /**
  *
  * @param {Boolean} [pFilter=false] filter only for contexts which have a mapping in ContextUtils.getSelectMap 
- * @param {String[]} [pExclusiveContexts] contextIds that shall not be included (so this is a additional filter to the pFilter param)
- * @param {Boolean} [pUseExclusives=false] decides whether the items in pExclusiveContexts are excluded (false) or
- *                      everything that is not in pExclusiveContexts is excluded (true)
- * @param {String[]} [pWhitelist=undefined] only allowed contexts
+ * @param {String[]} [pBlacklist] contextIds that shall not be included (so this is a additional filter to the pFilter param)
+ * @param {Boolean} [pInvertBlacklist=false] decides whether the items in pBlacklist are excluded (false) or
+ *                      everything that is NOT in pBlacklist is excluded (true) 
+ *                      (-> if it is a whitelist or blacklist)
  *
  * @return {String[][]} the contexts [[contextId, contextName, contextTitle], [... ], ...]
  */
-ContextUtils.getContexts = function(pFilter, pExclusiveContexts, pUseExclusives, pWhitelist)
+ContextUtils.getContexts = function(pFilter, pBlacklist, pInvertBlacklist)
 {
     if (pFilter == undefined)
         pFilter = false;
-    if (pUseExclusives == undefined)
-        pUseExclusives = false;
+    if (pInvertBlacklist == undefined)
+        pInvertBlacklist = false;
 
     var contexts = project.getDataModels(project.DATAMODEL_KIND_CONTEXT);
 
     if (pFilter)
     {
         contexts = contexts.filter(function(pContext) {
-            if (pExclusiveContexts && pExclusiveContexts.indexOf(pContext[0]) > -1 != pUseExclusives)
+            if (pBlacklist && pBlacklist.indexOf(pContext[0]) > -1 != pInvertBlacklist)
                 return false;
             // filter only contexts which have defined mappings in Context_lib
             return ContextUtils.getSelectMap ()[pContext[0]] != undefined;
         });
     }
-    else if (pExclusiveContexts)
+    else if (pBlacklist)
     {
         contexts = contexts.filter(function(pContext) {
-            if (pExclusiveContexts && pExclusiveContexts.indexOf(pContext[0]) > -1 != pUseExclusives)
+            if (pBlacklist && pBlacklist.indexOf(pContext[0]) > -1 != pInvertBlacklist)
                 return false;
             return true;
         });
     }
-    
-    if (pWhitelist)
-    {
-        contexts = contexts.filter(function(pContext) {
-            return (pWhitelist.indexOf(pContext[0]) >= 0);
-        });
-    }
 
     return contexts.map(ContextUtils._contextDataMapping).sort(function(pContext1, pContext2)
         {
@@ -395,6 +419,16 @@ ContextUtils.getSelectMap  = function()
                                       .setJoinExpression("join PERSON on PERSON.PERSONID = CONTACT.PERSON_ID \n\
                                                           join ORGANISATION on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID\n\
                                                           left join ADDRESS defaultAddress on defaultAddress.ADDRESSID = CONTACT.ADDRESS_ID")
+            ,"PrivatePerson": ContextSelector.create("PERSON", "PERSONID")
+                                      .setTitleExpression(maskingUtils.concat([
+                                                new ContactTitleRenderer(Contact.createWithColumnPresetForPrivatePerson()).asSql()
+                                                ,"' - '"//looks pretty bad; TODO: workaround till Lookups can be loaded over a link-entity; then use displayProc
+                                                ,"defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO"
+                                                ,"' - '"
+                                                ,"defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"
+                                               ]," "))
+                                      .setJoinExpression("left join CONTACT on PERSON.PERSONID = CONTACT.PERSON_ID and CONTACT.ORGANISATION_ID = '0' left join ADDRESS defaultAddress on defaultAddress.ADDRESSID = CONTACT.ADDRESS_ID")
+                                      .setContactIdField("CONTACT.CONTACTID")
             ,"Activity": ContextSelector.create("ACTIVITY", "ACTIVITYID", "SUBJECT")
             ,"Salesproject": ContextSelector.create("SALESPROJECT", "SALESPROJECTID")
                                             .setTitleExpression(maskingUtils.concat([
@@ -439,7 +473,7 @@ ContextUtils.getSelectMap  = function()
                                                         ], "", false))
                                      .setContactIdField("CONTACT_ID")
                                      .setCreationDateField("SALESORDERDATE")
-                                     .setStateField("STATUS")
+                                     .setStateField("ORDERSTATUS")
                                      .setActiveStates([$KeywordRegistry.salesorderState$checked, $KeywordRegistry.salesorderState$sent])
             ,"Product": ContextSelector.create("PRODUCT", "PRODUCTID")
                                        .setTitleExpression(maskingUtils.concat([
@@ -471,6 +505,8 @@ ContextUtils.getSelectMap  = function()
                             $KeywordRegistry.taskStatus$customerChecks(),
                         ])
                         .setCreationDateField("TASK.START_DATE")
+            ,"BulkMail" : ContextSelector.create("BULKMAIL", "BULKMAILID", "NAME")
+            ,"SerialLetter" : ContextSelector.create("SERIALLETTER", "SERIALLETTERID", "TITLE")
     }
 }
 
diff --git a/process/CountryInfoData_lib/process.js b/process/CountryInfoData_lib/process.js
index 76f43422f42143217f5ccebec593f0e73f552570..dbd7ab94a65f4e6544ed0169000a73664548ce86 100644
--- a/process/CountryInfoData_lib/process.js
+++ b/process/CountryInfoData_lib/process.js
@@ -1,5 +1,4 @@
 import("system.entities");
-import("system.logging");
 import("system.translate");
 import("system.db");
 import("DataCaching_lib");
diff --git a/process/CountryInfo_lib/process.js b/process/CountryInfo_lib/process.js
index 4625fbc4971edbd7e6b6f05dee1a7a2816a984d1..c1a5563631ef990d4b30adb33cc249312f4e01b0 100644
--- a/process/CountryInfo_lib/process.js
+++ b/process/CountryInfo_lib/process.js
@@ -47,5 +47,5 @@ CountryUtils.getResolvedNameFromIso2Sql = function(pDbFieldName, pLocale)
 {
     var countryData = CountryInfoData.getIso2NameData();
     var resSql = SqlUtils.getResolvingCaseWhen(countryData, pDbFieldName, pLocale);
-    return db.translateStatement(resSql);
+    return SqlUtils.translateStatementWithQuotes(resSql);
 };
\ No newline at end of file
diff --git a/process/DataCaching_lib/process.js b/process/DataCaching_lib/process.js
index 967f3fe35dc6ff0d672e080312e771a3aa4e3062..3965f570fc041d2406b86f27110872a655ae242e 100644
--- a/process/DataCaching_lib/process.js
+++ b/process/DataCaching_lib/process.js
@@ -1,3 +1,4 @@
+import("system.db");
 import("system.vars");
 import("system.project");
 
@@ -11,11 +12,14 @@ import("system.project");
  * @param {String} pIdentifiyingName name to identify the DataCache. This MUST be unique for one data representation (e.g. key-value pair for all Languages with key ISO2-code and value the ISO3-Code). this will affect the storage-name (=name of the global variable on the client for example)
  * @param {bool} [pKeepPerLanguage=false] if true the data is kept per locale (different storing for each requested language), false when not (every language is sharing the same stoarge because only untranslated data is kept)
  * @param {String} [pLocaleOverride=current language] sometimes a special locale is required, use this parameter to specify it
+ * @param {String} [pAlias=none] sometimes you want to interact with the database and a specific alias. Whenever this is done you can specify an alias name
+ *                               the alias will be part of the storage variable name which means data is cached "per alias"
  * 
  * @class 
  */
-function CachedData(pIdentifiyingName, pKeepPerLanguage, pLocaleOverride)
+function CachedData(pIdentifiyingName, pKeepPerLanguage, pLocaleOverride, pAlias)
 {
+    this.alias = pAlias;
     this.identifyingName = pIdentifiyingName;
     this.keepPerLanguage = (pKeepPerLanguage == true);
 
@@ -33,7 +37,6 @@ function CachedData(pIdentifiyingName, pKeepPerLanguage, pLocaleOverride)
  * 
  * @param {String} pIdentifiyingName name to identify the DataCache. This MUST be unique for one data representation (e.g. key-value pair for all Languages with key ISO2-code and value the ISO3-Code). this will affect the storage-name (=name of the global variable on the client for example)
  * @param {bool} [pKeepPerLanguage=false] if true the data is kept per locale (different storing for each requested language), false when not (every language is sharin the same stoarge because only untranslated data is kept)
- * @param {String} [pLocaleOverride=current language] sometimes a special locale is required, use this parameter to specify it
  * @param {Function} pDataCallbackFunction function that is called to load the data. this functions gets 2 params: 1. if the data has to be translated 2. the locale to translate
  * 
  * @return {CachedData} returns the data you wanted (of the pDataCallbackFunction)
@@ -43,7 +46,7 @@ function CachedData(pIdentifiyingName, pKeepPerLanguage, pLocaleOverride)
 CachedData.make = function(pIdentifiyingName, pKeepPerLanguage, pDataCallbackFunction)
 {
     return (new CachedData(pIdentifiyingName, pKeepPerLanguage, null)).load(pDataCallbackFunction);
-}
+};
 
 /**
  * loads data into a DataCache;
@@ -71,8 +74,10 @@ CachedData.prototype.load = function(pDataCallbackFunction)
             cachingEnabled = false;
     }
 
+    //always pass a aliasname to make it easier in the callback functions (you don't have to check if the alias set or not in the callback functions)
+    var dbAliasParam = this.alias || db.getCurrentAlias();
     if (!cachingEnabled)
-        return pDataCallbackFunction.call(this, this.keepPerLanguage, this.locale);
+        return pDataCallbackFunction.call(this, this.keepPerLanguage, this.locale, dbAliasParam);
     else
     {
         var varname = this.getVariableName();
@@ -84,7 +89,7 @@ CachedData.prototype.load = function(pDataCallbackFunction)
                 return data;
         }
         
-        data = pDataCallbackFunction.call(this, this.keepPerLanguage, this.locale);
+        data = pDataCallbackFunction.call(this, this.keepPerLanguage, this.locale, dbAliasParam);
         if (data == null)
         {
             this.unload();
@@ -132,6 +137,8 @@ CachedData.prototype.getVariableIdentifier = function()
 CachedData.prototype.getVariableName = function()
 {
     var res = this.getVariableIdentifier() + "." + this.locale;
+    if (this.alias)
+        res += "." + this.alias;
     return res;
 };
 
diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js
index 0fedbf88b8f857f220eb0e42d12b88b1bee3c840..bb8b3897f4ccc6c108108e0c11fb5dd21211eb44 100644
--- a/process/DataPrivacy_lib/process.js
+++ b/process/DataPrivacy_lib/process.js
@@ -86,10 +86,17 @@ DataPrivacyType.get = function(pKey)
     
     /**
      * Helper function to get personal data.
+     * It is used by some callback functions below
+     * 
+     * @param {String} pContactId
+     * @param {String} pContactIdSaved
+     * @param {String} pFields the fields needed from the Contact (person)
+     *
+     * @return {Object} containing all rows 
      */
-    function _selectPersonal(pContactId, pContactIdSaved, fields) 
+    function _selectPersonal(pContactId, pContactIdSaved, pFields) 
     {
-        fields.push("CONTACTID");
+        pFields.push("CONTACTID");
         
         if (pContactIdSaved)
             pContactId = pContactIdSaved;
@@ -98,10 +105,39 @@ DataPrivacyType.get = function(pKey)
                                    .entity("Person_entity")
                                    .provider("Contact")
                                    .uid(pContactId)
-                                   .fields(fields);
+                                   .fields(pFields);
         return  entities.getRow(entityConfig);
     }
+     
+    /***********
+     * These functions are used as callback by DSGVO-functions.
+     * Parameters: 
+     *  - The first param is always the contactId of the contact the dataPrivacyInfo is needed for
+     *  - The second param is the Id of the corresponding dataset. 
+     *    It is the ID saved in the DSGVO-table and is the ID returned by the these helper fuctions. 
+     *    (see Return below)
+     *    Can be undefined, if all dataPrivacy Informations are fetched.
+     *  
+     * Return: 
+     *  the callbacks should return an array of objects:
+     *  [{
+     *      value: names,
+     *      id: persData.CONTACTID
+     *  }, {
+     *      ...
+     *  }]
+     *  
+     *  !! If the Second param is NOT UNDEFINED, the array should only contain one element !!
+     ***********/
     
+    /**
+     * Callback function to fetch the names
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pContactIdSaved=undefined] 
+     * 
+     * @return {Object[]}
+     */
     function _getName(pContactId, pContactIdSaved) 
     {
         // Use PersonId as ID, since the data comes from the person
@@ -126,6 +162,14 @@ DataPrivacyType.get = function(pKey)
         }]
     }
     
+    /**
+     * Callback function to fetch the birthday of a person
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pContactIdSaved=undefined] 
+     * 
+     * @return {Object[]}
+     */
     function _getBirthday(pContactId, pContactIdSaved) 
     {        
         // Todo Format or set content dsgvotype
@@ -137,10 +181,17 @@ DataPrivacyType.get = function(pKey)
         }]
     }
     
+    /**
+     * Callback function to fetch the Addresses of a Person
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pAddressId=undefined] 
+     * 
+     * @return {Object[]}
+     */
     function _getAddress(pContactId, pAddressId) 
     {
         // 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", "REGION", "PROVINCE"]);
@@ -168,6 +219,14 @@ DataPrivacyType.get = function(pKey)
         return addrData;
     }
     
+    /**
+     * Callback function to fetch the Communication addresses of a Person
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pCommunicationId=undefined] 
+     * 
+     * @return {Object[]}
+     */
     function _getCommunication(pContactId, pCommunicationId) 
     {
         var entityConfig = entities.createConfigForLoadingRows()
@@ -193,6 +252,14 @@ DataPrivacyType.get = function(pKey)
         });
     }
     
+    /**
+     * Callback function to fetch the Attributes of a Person
+     * 
+     * @param {String} pContactId 
+     * @param {String} [pAttributeId=undefined] 
+     * 
+     * @return {Object[]}
+     */
     function _getAttribute(pContactId, pAttributeId) 
     {
         var attributeData = [];
@@ -225,6 +292,14 @@ DataPrivacyType.get = function(pKey)
  */
 function DataPrivacyUtils() {}
 
+/**
+ * Selects the dsgvo-data from the DSGVO table. It already resolves the DSGVO-type display value
+ * 
+ * @param {String} pContactId 
+ * @param {SqlCondition} [pFilterCond=undefined] Sql condition object containing additional conditions
+ * 
+ * @return {String[][]} the DSGVO data
+ */
 DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond)
 {
     var cond = SqlCondition.begin().andPrepare("DSGVO.CONTACT_ID", pContactId);
@@ -250,14 +325,23 @@ DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond)
 }
 
 /**
- * If filter conditin is provided, NO inserts are done
+ * collects all DSGVO-data of a person
+ * 
+ * This function not only selects the data:
+ *  - It deletes all no longer existing dsgvo-entries.
+ *  - If NO FILTER is provided, it inserts all found data not already existing in DSGVO-table into the DSGVO-table.
+ *  
+ * @param {String} pContactId
+ * @param {SqlCondition} [pFilterCond=undefined] Sql condition object containing additional conditions
+ * 
+ * @return {String[][]} the collected dsgvo data
  */
 DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) 
 {
     var contactDSGVO = DataPrivacyUtils.getDSGVO(pContactId, pFilterCond);
     
     // copy data (with .slice()) as we iterate through it and we should not add values while doing this
-    // NOTE that the arrays inside of contactDSGVO still point to the same arrays as in returnDSGVOData
+    // NOTE that the arrays inside of contactDSGVO still point to the same arrays as in returnDSGVOData (ByRefference!)
     // 
     // --> contactDSGVO[dat][4] = pRow.value; WILL CHANGE returnDSGVOData[dat][4] ALSO!
     // (Yes I could also slice each array in contactDSGVO to returnDSGVOData but this would add overhead which is not needed :-)
@@ -342,7 +426,13 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond)
 }
 
 /**
- * Notify the user to update the data privacy informations
+ * Notify the user to update the data privacy informations.
+ * It is only displayed if it is a Person.
+ * 
+ * @param {String} pContactId the current contactId
+ * @param {Boolean} pShowMessage if false: nothing happens
+ * 
+ * @return {void}
  */
 DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage) 
 {
@@ -359,6 +449,36 @@ DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage
     }
 }
 
+/**
+ * Check if all data also contains the DSGVO-Informations
+ * 
+ * Note: this function requires that all pFields in the DSGVO table are updated (via DataPrivacyUtils.collectAll())
+ *       Otherwise there may be fields in DSGVO which do not exist anymore in the person or some are missing.
+ * @param {String} pContactId the current contactId
+ * 
+ * @return {Boolean} true if everything is filled correctly
+ */
+DataPrivacyUtils.checkAllFilled = function(pContactId)
+{
+    var countNotFilled = db.cell(SqlCondition.begin()
+                        .andPrepare("DSGVO.CONTACT_ID", pContactId)
+                        .andSqlCondition(SqlCondition.begin()
+                            .or("STATUORITYSOURCE is null")
+                            .or("PURPOSE is null")
+                            .or("VALID_TO is null"))
+                        .buildSql("select count(*) from DSGVO", "1=2"))
+                        
+    return countNotFilled == "0";       
+}
+
+/**
+ * collects the data needed for export functions (e.g. reports, Excel exports, ...)
+ * 
+ * @param {String} pContactId the current contactId for which the data is exported
+ * @param {String} pLocale the locale to translate to
+ * 
+ * @return {String[][]} the data
+ */
 DataPrivacyUtils.dataForExport = function(pContactId, pLocale)
 {
     var entity = "DSGVO_entity";
@@ -385,6 +505,12 @@ DataPrivacyUtils.dataForExport = function(pContactId, pLocale)
     })];
 }
 
+/**
+ * generate a CSV and provide it as download
+ * 
+ * @param {String} pContactId the current contactId for which the data is exported
+ * @param {String} pLocale the locale to translate to
+ */
 DataPrivacyUtils.downloadCSV = function(pContactId, pLocale)
 {
     var data = DataPrivacyUtils.dataForExport(pContactId, pLocale);
@@ -398,27 +524,30 @@ DataPrivacyUtils.downloadCSV = function(pContactId, pLocale)
     neon.download(util.encodeBase64String(csvTable), "data_pricacy.csv");
 }
 
+/**
+ * @return {String} the name of the DSGVO disclosure report
+ */
 DataPrivacyUtils.DisclosureReportName = function() {
     return "DSGVO_Disclosure_report";
 }
 
 /**
- * Note: this function requires that all fields in the DSGVO table are updated (via DataPrivacyUtils.collectAll())
- *       Otherwise there may be fields in DSGVO which do not exist anymore in the person or some are missing.
+ * Opens a DSGVO report
+ * 
+ * @param {String} pContactId the current contactId for which the data is exported
+ * @param {String} pReportName the name of the report to load.
+ * @param {Object} pDSGVOInfo Additional data needed by the reports:
+                    e.g. {
+                            datasource: rowdata["DSGVOINFO.DATASOURCE"],
+                            transmission: rowdata["DSGVOINFO.TRANSMISSION"],
+                            recipient: rowdata["DSGVOINFO.RECIPIENT"],
+                            garantees: rowdata["DSGVOINFO.GUARANTEE"],
+                            requestDate: vars.get("$field.dateRequest"),
+                            deadline: vars.get("$field.deadline"),
+                            deadlineDate: vars.get("$field.dateDeadline")
+                        }
+ * @param {String} pLocale the locale to translate to
  */
-DataPrivacyUtils.checkAllFilled = function(pContactId)
-{
-    var countNotFilled = db.cell(SqlCondition.begin()
-                        .andPrepare("DSGVO.CONTACT_ID", pContactId)
-                        .andSqlCondition(SqlCondition.begin()
-                            .or("STATUORITYSOURCE is null")
-                            .or("PURPOSE is null")
-                            .or("VALID_TO is null"))
-                        .buildSql("select count(*) from DSGVO", "1=2"))
-                        
-    return countNotFilled == "0";       
-}
-
 DataPrivacyUtils.openReport = function(pContactId, pReportName, pDSGVOInfo, pLocale)
 {
     if (pLocale == undefined)
@@ -528,176 +657,179 @@ Muster-Datenschutzberatung";
 
 
 ////////////////////////////////////////////////////////////////////////
-// Deprecated functions:
-
-/**
- * makes selected data from a private contact anonymous
- * 
- * @param pPersId 
- * @param pContactId 
- */
-DataPrivacyUtils.dsgvoMkDataAnonymous = function(pPersId, pContactId)
-{       
-    // TODO Only Data that comes from private contacts
-    // TODO ggf. nur ein Param notwendig? oder pRowId statt pPersId
-
-    //Hat die Privat-Person auch eine Funktion an einer Firma
-    var hasFunction         = db.cell(SqlCondition.begin()
-        .andPrepare("CONTACT.PERSON_ID", pPersId)
-        .andPrepare("CONTACT.ORGANISATION_ID", "0",  "# != ?") // TODO ungleich 0, stimmt das so?
-        .build(" select count(*) from CONTACT", "1=2"));
-    // db.cell(" select count(*) from RELATION where PERS_ID = '" + pPersId + "' and ORGANISATION != '0' ");
-    
-    var prompts             = new Array();
-    prompts["PERSREL"]      = hasFunction;
-    var jsonResult          = openOkCancelDialog("DLG_CHOOSE_DATA_PRIVACY_ANONYMISATION", prompts);
-    var newAnonymCategories = new Array();
-    var updArray            = [];
-    
-    if (jsonResult["button"] != "ok")
-        return;
-  
-    var data, values, columns, columnTypes, condition;
-    
-    //Namen
-    if ((jsonResult["comp.chb_Names"] == "true"))
-    {
-        data                = db.array(db.ROW, SqlCondition.begin()
-            .andPrepare("CONTACT.PERSON_ID", pPersId)
-            .build("select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME from PERS ", "1=2")
-            );
-        /*data = db.array(db.ROW, "select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME "
-            + " from PERS "
-            + " where PERSID = '" + pPersId + "'");*/
-        
-        values  = [DataPrivacyUtils.anonymizeText(data[0]), DataPrivacyUtils.anonymizeText(data[1]), DataPrivacyUtils.anonymizeText(data[2]), DataPrivacyUtils.anonymizeText(data[3]), DataPrivacyUtils.anonymizeText(data[4])];
-        columns = ["SALUTATION", "TITLE", "FIRSTNAME", "MIDDLENAME", "LASTNAME"];
-        columnTypes = db.getColumnTypes("PERSON", columns);
-        condition = SqlCondition.andPrepare("PERSONID", pPersId)
-        .and("1=2");        
-        //condition = "PERSONID = '" + pPersId + "'";
-        updArray.push(["PERSON", columns, columnTypes, values, condition])
-        
-        newAnonymCategories.push(translate.text("Names"));
-    }
-    
-    //sonstige personenbezogene Daten
-    if (jsonResult["comp.chb_others"] == "true") 
-    {
-        data                = db.array(db.ROW, SqlCondition.begin()
-            .andPrepare("CONTACT.PERSON_ID", pPersId)
-            .build("select DOB, GENDER, SUFFIX, PERSINFO from PERS ", "1=2"));
-        
-        /*, "select DOB, GENDER, SUFFIX, PERSINFO "
-            + " from PERS "
-            + " where PERSID = '" + pPersId + "' ")
-        */
-        values  = ["", "", "", ""];
-        columns = ["DOB", "GENDER", "SUFFIX", "PERSINFO"];
-        columnTypes = db.getColumnTypes("PERS", columns);
-        condition = SqlCondition.andPrepare("PERSONID", pPersId)
-        .and("1=2");
-        //condition = "PERSID = '" + pPersId + "'";        
-        updArray.push(["PERS", columns, columnTypes, values, condition])
-        
-        newAnonymCategories.push(translate.text("other personal data"));
-    }
-
-    //Addressen
-    if(jsonResult["comp.chb_Address"] == "true")
-    {
-        data                = db.table(SqlCondition.begin()
-            .andPrepare("CONTACT_ID", pContactId)
-            .build("select ADDRESS, PROVINCE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID "
-                + " from ADDRESS ", "1=2" ));
-        
-        /*" select ADDRESS, PROVINCE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID "
-            + " from ADDRESS " 
-            + " where RELATION_ID = '" + pContactId + "' ");
-*/
-        columns = ["ADDRESS", "PROVINCE", "CITY", "COUNTRY", "REGION", "BUILDINGNO", "ADDRESSADDITION", "ZIP", "DISTRICT"];
-        columnTypes = db.getColumnTypes("ADDRESS", columns);
-
-        //Jede Addresse muss separat anonymisiert werden
-        for (let i = 0; i < data.length; i++) {
-            values = [DataPrivacyUtils.anonymizeText(data[i][0]), DataPrivacyUtils.anonymizeText(data[i][1]), 
-            DataPrivacyUtils.anonymizeText(data[i][2]), DataPrivacyUtils.anonymizeText(data[i][3]), 
-            DataPrivacyUtils.anonymizeText(data[i][4]), DataPrivacyUtils.anonymizeText(data[i][5]), 
-            DataPrivacyUtils.anonymizeText(data[i][6]), DataPrivacyUtils.anonymizeText(data[i][7]),
-            DataPrivacyUtils.anonymizeText(data[i][8])];
-            
-            // TODO prüfen
-            condition = SqlCondition.andPrepare("CONTACT_ID", pContactId)
-            .andPrepare("ADDRESSID", data[i][9])
-            .and("1=2");
-            //condition = " CONTACT_ID = '" + pContactId + "' and ADDRESSID = '" + data[i][9] + "' ";
-            updArray.push(["ADDRESS", columns, columnTypes, values, condition]);
-        }
-        newAnonymCategories.push(KeywordUtils.getViewValue($KeywordRegistry.dsgvoTablename(), $KeywordRegistry.dsgvoTablename$address()));
-    }
-    
-    //Kommunikationsdaten
-    if (jsonResult["comp.chb_Comm"] == "true")
-    {
-        data                = db.table(SqlCondition.begin()
-            .andPrepare("CONTACT_ID", pContactId)
-            .build("select ADDRESS, SEARCHADDR, COMMUNICATIONID from COMMUNICATION", "1=2"));
-        //data = db.table("select ADDR, SEARCHADDR, COMMID from COMM where RELATION_ID = '" + pContactId + "'");
-        
-        columns = ["ADDR", "SEARCHADDR"];        
-        columnTypes = db.getColumnTypes("COMM", columns);
-        
-        for (let i = 0; i < data.length; i++) {
-            values = [DataPrivacyUtils.anonymizeText(data[i][0]), DataPrivacyUtils.anonymizeText(data[i][1])];
-
-            condition       = SqlCondition.andPrepare("CONTACT_ID", pContactId)
-            .andPrepare("COMMUNICATIONID", data[i][2]).and("1=2"); 
-            // TODO prüfen
-            //"RELATION_ID = '" + pContactId + "' and COMMID = '" + data[i][2] + "' ";
-            
-            updArray.push(["COMM", columns, columnTypes, values, condition]);            
-        }
-        newAnonymCategories.push(KeywordUtils.getViewValue($KeywordRegistry.dsgvoTablename(), $KeywordRegistry.dsgvoTablename$communication()));
-    }
-    
-    if (updArray.length > 0)
-        db.updates(updArray);
-
-    if(newAnonymCategories.length > 0)
-    {
-        subject = translate.text("DSGVO anonymisation");
-        info = translate.withArguments("The following data has been anonymised: %0", [newAnonymCategories.join(", ")]);
-        // TODO UX Abwarten
-        question.showMessage(info);
-        newHistory(vars.get("$global.user").relationid, getKeyValue("Intern", "HistoryMedium"), "o", subject, info, [[pContactId, 2]]);
-    }
-    else
-        question.showMessage(translate.text("No data has been anonymized."));
-}
-
-/**
- * utility function to make a String anonymous. Replaces all letters between the first an last one with *
- * 
- * @param {String} pText Text to be made anonymous
- * @return {String} first and last letter from pText with (pText.length-2) stars(*) between them
- * 
- * @example DataPrivacyUtils.anonymizeText("Buchstabe")
- * @exampleresult B*******e
- */
-DataPrivacyUtils.anonymizeText = function(pText)
-{
-    if (pText == null) 
-        return null;
-    if (pText.length <= 2) 
-        return "**";
-    
-    var res = pText.charAt(0);
-    
-    for(i = 0; i < pText.length - 2; i++)
-    {
-        res += "*";
-    }
-    
-    return res += pText.charAt(pText.length - 1);
-}
-
+// Deprecated functions: they need to be updated or rewritten to Adito 2019
+// Currently not used
+//
+///**
+// * makes selected data from a private contact anonymous
+// * 
+// * @param pPersId 
+// * @param pContactId
+// * @deprecated
+// */
+//DataPrivacyUtils.dsgvoMkDataAnonymous = function(pPersId, pContactId)
+//{       
+//    // TODO Only Data that comes from private contacts
+//    // TODO ggf. nur ein Param notwendig? oder pRowId statt pPersId
+//
+//    //Hat die Privat-Person auch eine Funktion an einer Firma
+//    var hasFunction         = db.cell(SqlCondition.begin()
+//        .andPrepare("CONTACT.PERSON_ID", pPersId)
+//        .andPrepare("CONTACT.ORGANISATION_ID", "0",  "# != ?") // TODO ungleich 0, stimmt das so?
+//        .build(" select count(*) from CONTACT", "1=2"));
+//    // db.cell(" select count(*) from RELATION where PERS_ID = '" + pPersId + "' and ORGANISATION != '0' ");
+//    
+//    var prompts             = new Array();
+//    prompts["PERSREL"]      = hasFunction;
+//    var jsonResult          = openOkCancelDialog("DLG_CHOOSE_DATA_PRIVACY_ANONYMISATION", prompts);
+//    var newAnonymCategories = new Array();
+//    var updArray            = [];
+//    
+//    if (jsonResult["button"] != "ok")
+//        return;
+//  
+//    var data, values, columns, columnTypes, condition;
+//    
+//    //Namen
+//    if ((jsonResult["comp.chb_Names"] == "true"))
+//    {
+//        data                = db.array(db.ROW, SqlCondition.begin()
+//            .andPrepare("CONTACT.PERSON_ID", pPersId)
+//            .build("select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME from PERS ", "1=2")
+//            );
+//        /*data = db.array(db.ROW, "select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME "
+//            + " from PERS "
+//            + " where PERSID = '" + pPersId + "'");*/
+//        
+//        values  = [DataPrivacyUtils.anonymizeText(data[0]), DataPrivacyUtils.anonymizeText(data[1]), DataPrivacyUtils.anonymizeText(data[2]), DataPrivacyUtils.anonymizeText(data[3]), DataPrivacyUtils.anonymizeText(data[4])];
+//        columns = ["SALUTATION", "TITLE", "FIRSTNAME", "MIDDLENAME", "LASTNAME"];
+//        columnTypes = db.getColumnTypes("PERSON", columns);
+//        condition = SqlCondition.andPrepare("PERSONID", pPersId)
+//        .and("1=2");        
+//        //condition = "PERSONID = '" + pPersId + "'";
+//        updArray.push(["PERSON", columns, columnTypes, values, condition])
+//        
+//        newAnonymCategories.push(translate.text("Names"));
+//    }
+//    
+//    //sonstige personenbezogene Daten
+//    if (jsonResult["comp.chb_others"] == "true") 
+//    {
+//        data                = db.array(db.ROW, SqlCondition.begin()
+//            .andPrepare("CONTACT.PERSON_ID", pPersId)
+//            .build("select DOB, GENDER, SUFFIX, PERSINFO from PERS ", "1=2"));
+//        
+//        /*, "select DOB, GENDER, SUFFIX, PERSINFO "
+//            + " from PERS "
+//            + " where PERSID = '" + pPersId + "' ")
+//        */
+//        values  = ["", "", "", ""];
+//        columns = ["DOB", "GENDER", "SUFFIX", "PERSINFO"];
+//        columnTypes = db.getColumnTypes("PERS", columns);
+//        condition = SqlCondition.andPrepare("PERSONID", pPersId)
+//        .and("1=2");
+//        //condition = "PERSID = '" + pPersId + "'";        
+//        updArray.push(["PERS", columns, columnTypes, values, condition])
+//        
+//        newAnonymCategories.push(translate.text("other personal data"));
+//    }
+//
+//    //Addressen
+//    if(jsonResult["comp.chb_Address"] == "true")
+//    {
+//        data                = db.table(SqlCondition.begin()
+//            .andPrepare("CONTACT_ID", pContactId)
+//            .build("select ADDRESS, PROVINCE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID "
+//                + " from ADDRESS ", "1=2" ));
+//        
+//        /*" select ADDRESS, PROVINCE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID "
+//            + " from ADDRESS " 
+//            + " where RELATION_ID = '" + pContactId + "' ");
+//*/
+//        columns = ["ADDRESS", "PROVINCE", "CITY", "COUNTRY", "REGION", "BUILDINGNO", "ADDRESSADDITION", "ZIP", "DISTRICT"];
+//        columnTypes = db.getColumnTypes("ADDRESS", columns);
+//
+//        //Jede Addresse muss separat anonymisiert werden
+//        for (let i = 0; i < data.length; i++) {
+//            values = [DataPrivacyUtils.anonymizeText(data[i][0]), DataPrivacyUtils.anonymizeText(data[i][1]), 
+//            DataPrivacyUtils.anonymizeText(data[i][2]), DataPrivacyUtils.anonymizeText(data[i][3]), 
+//            DataPrivacyUtils.anonymizeText(data[i][4]), DataPrivacyUtils.anonymizeText(data[i][5]), 
+//            DataPrivacyUtils.anonymizeText(data[i][6]), DataPrivacyUtils.anonymizeText(data[i][7]),
+//            DataPrivacyUtils.anonymizeText(data[i][8])];
+//            
+//            // TODO prüfen
+//            condition = SqlCondition.andPrepare("CONTACT_ID", pContactId)
+//            .andPrepare("ADDRESSID", data[i][9])
+//            .and("1=2");
+//            //condition = " CONTACT_ID = '" + pContactId + "' and ADDRESSID = '" + data[i][9] + "' ";
+//            updArray.push(["ADDRESS", columns, columnTypes, values, condition]);
+//        }
+//        newAnonymCategories.push(KeywordUtils.getViewValue($KeywordRegistry.dsgvoTablename(), $KeywordRegistry.dsgvoTablename$address()));
+//    }
+//    
+//    //Kommunikationsdaten
+//    if (jsonResult["comp.chb_Comm"] == "true")
+//    {
+//        data                = db.table(SqlCondition.begin()
+//            .andPrepare("CONTACT_ID", pContactId)
+//            .build("select ADDRESS, SEARCHADDR, COMMUNICATIONID from COMMUNICATION", "1=2"));
+//        //data = db.table("select ADDR, SEARCHADDR, COMMID from COMM where RELATION_ID = '" + pContactId + "'");
+//        
+//        columns = ["ADDR", "SEARCHADDR"];        
+//        columnTypes = db.getColumnTypes("COMM", columns);
+//        
+//        for (let i = 0; i < data.length; i++) {
+//            values = [DataPrivacyUtils.anonymizeText(data[i][0]), DataPrivacyUtils.anonymizeText(data[i][1])];
+//
+//            condition       = SqlCondition.andPrepare("CONTACT_ID", pContactId)
+//            .andPrepare("COMMUNICATIONID", data[i][2]).and("1=2"); 
+//            // TODO prüfen
+//            //"RELATION_ID = '" + pContactId + "' and COMMID = '" + data[i][2] + "' ";
+//            
+//            updArray.push(["COMM", columns, columnTypes, values, condition]);            
+//        }
+//        newAnonymCategories.push(KeywordUtils.getViewValue($KeywordRegistry.dsgvoTablename(), $KeywordRegistry.dsgvoTablename$communication()));
+//    }
+//    
+//    if (updArray.length > 0)
+//        db.updates(updArray);
+//
+//    if(newAnonymCategories.length > 0)
+//    {
+//        subject = translate.text("DSGVO anonymisation");
+//        info = translate.withArguments("The following data has been anonymised: %0", [newAnonymCategories.join(", ")]);
+//        // TODO UX Abwarten
+//        question.showMessage(info);
+//        newHistory(vars.get("$global.user").relationid, getKeyValue("Intern", "HistoryMedium"), "o", subject, info, [[pContactId, 2]]);
+//    }
+//    else
+//        question.showMessage(translate.text("No data has been anonymized."));
+//}
+//
+///**
+// * utility function to make a String anonymous. Replaces all letters between the first an last one with *
+// * 
+// * @param {String} pText Text to be made anonymous
+// * @return {String} first and last letter from pText with (pText.length-2) stars(*) between them
+// * 
+// * @example DataPrivacyUtils.anonymizeText("Buchstabe")
+// * @exampleresult B*******e
+// * @deprecated
+// */
+//DataPrivacyUtils.anonymizeText = function(pText)
+//{
+//    if (pText == null) 
+//        return null;
+//    if (pText.length <= 2) 
+//        return "**";
+//    
+//    var res = pText.charAt(0);
+//    
+//    for(i = 0; i < pText.length - 2; i++)
+//    {
+//        res += "*";
+//    }
+//    
+//    return res += pText.charAt(pText.length - 1);
+//}
+//
diff --git a/process/Data_lib/process.js b/process/Data_lib/process.js
index dcc6c00e814895b04de2777272240ecb8b78f696..08212a250ac66e90f50c949276ba2b6b087a4c8d 100644
--- a/process/Data_lib/process.js
+++ b/process/Data_lib/process.js
@@ -173,8 +173,8 @@ ReferencingData.prototype._convertToTree = function()
 {
     if (this._dataTree == undefined)
     {
-        this._dataTree = DataTree.begin(this._rootId)
-                                 .addArray(this._data);
+        this._dataTree = new DataTree(this._rootId);
+        this._dataTree.addArray(this._data);
         this._data = undefined;
     }
 }
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index f5c4c3a2d2e4e50acdb563adc90836129952799c..f54d3722b45f4ada3bfb891aa02d8931622b349a 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -1,575 +1,960 @@
-import("Communication_lib");
-import("system.neon");
-import("Employee_lib");
-import("KeywordRegistry_basic");
-import("Document_lib");
-import("KeywordData_lib");
-import("Sql_lib");
-import("Address_lib");
-import("system.process");
-import("system.vars");
-import("system.db");
-import("system.util");
-import("system.pack");
-import("system.fileIO");
-import("system.translate");
-import("system.datetime");
-import("system.text");
-import("system.mail");
-import("Keyword_lib");
-import("Placeholder_lib");
-import("Email_lib");
-
-/**
- * Object for working with document templates, holds the content and type of the template.
- * Provides functions to replace placeholders in the content.
- * 
- * @class
- */
-var DocumentTemplate = (function ()
-{
-
-/**
- * constructor for DocumentTemplate
- * 
- * @param {String} pTemplateContent content, as base64 string (except for DocumentTemplate.types.PLAIN, then it's a normal string)
- * @param {String} pType type of the template, use the DocumentTemplate.types constants here
- * @param {String} [pFilename] file name of the template 
- */
-function DocumentTemplate (pTemplateContent, pType, pFilename)
-{
-    this.content = pTemplateContent;
-    this.type = pType;
-    this.filename = pFilename;
-}
-
-/**
- * @return {String} the text of the content
- */
-DocumentTemplate.prototype.toString = function ()
-{
-    if (this.type == DocumentTemplate.types.PLAIN)
-        return this.content;
-    return text.parseDocument(this.content);
-}
-
-/**
- * The types a DocumentTemplate can have. Depending on the type,
- * the correct method for replacing the placeholders can be chosen
- * 
- * @enum {String}
- */
-DocumentTemplate.types = {
-    TXT : "txt",
-    HTML : "html",
-    EML : "eml",
-    ODT : "odt",
-    DOCX : "docx",
-    PLAIN : "plain", //for simple strings
-    fromFileExtension : function (pFileExtension)
-    {
-        switch (pFileExtension)
-        {
-            case "html":
-            case "htm":
-                return this.HTML;
-            case "eml":
-                return this.EML;
-            case "odt":
-                return this.ODT;
-            case "docx":
-                return this.DOCX;
-            case "txt":
-            default:
-                return this.TXT;
-        }
-    },
-    fromMimeType : function (pMimetype)
-    {
-        switch (pMimetype)
-        {
-            case "text/html":
-                return this.HTML;
-            case "message/rfc822":
-                return this.EML;
-            case "application/vnd.oasis.opendocument.text":
-                return this.ODT;
-            case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
-                return this.DOCX;
-            case "text/plain":
-            default:
-                return this.TXT;
-        }
-    }
-};
-
-/**
- * Loads the content of a document template and creates a new DocumentTemplate object with that.
- * 
- * @param {String} pAssignmentRowId id of the assignment (in most cases the document template id)
- * @param {String} [pAssignmentTable="DOCUMENTTEMPLATE"] the LOB assignment table
- * 
- * @return {DocumentTemplate} template object
- */
-DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable)
-{
-    var alias = SqlUtils.getSystemAlias();
-    if (!pAssignmentTable)
-        pAssignmentTable = "DOCUMENTTEMPLATE";
-    var templateDocument = db.getBinaryMetadata(pAssignmentTable, "DOCUMENT", pAssignmentRowId, false, alias, null);
-    if (!templateDocument[0])
-        return new DocumentTemplate();
-    var binaryId = templateDocument[0][db.BINARY_ID];
-    var filename = templateDocument[0][db.BINARY_FILENAME];
-    var mimetype = templateDocument[0][db.BINARY_MIMETYPE];
-    var type = DocumentTemplate.types.fromMimeType(mimetype);
-    
-    return new DocumentTemplate(db.getBinaryContent(binaryId, alias), type, filename);
-}
-
-/**
- * makes a DocumentTemplate from a upload value
- * 
- * @param {String} pUploadValue the value you get from a file field
- * @return {DocumentTemplate} a document template
- */
-DocumentTemplate.fromUpload = function (pUploadValue)
-{
-    var bindata = DocumentUtil.getBindataFromUpload(pUploadValue);
-    var mimeType = DocumentUtil.getMimeTypeFromUpload(pUploadValue);
-    var filename = DocumentUtil.getFilenameFromUpload(pUploadValue);
-    var type;
-    
-    //if the mimetype couldn't be determined, check the file extension
-    if (mimeType == "application/octet-stream")
-        type = DocumentTemplate.types.fromFileExtension(DocumentUtil.getFileExtensionFromUpload(filename));
-    else
-        type = DocumentTemplate.types.fromMimeType(mimeType);
-    
-    return new DocumentTemplate(bindata, type, filename);
-}
-
-/**
- * Function that helps to get the correct template when editing a bulk mail.
- * pUploadValue is preferred over pTemplateId, and if pEditedContent is provided,
- * it will overwrite the content of the template (but the type will remain the same as
- * defined by the upload or templateId, if both are empty, pDefaultType is used)
- */
-DocumentTemplate.getSelectedTemplate = function (pTemplateId, pUpladValue, pEditedContent, pDefaultType)
-{
-    if (pUpladValue)
-        template = DocumentTemplate.fromUpload(pUpladValue);
-    else if (pTemplateId)
-        template = DocumentTemplate.loadTemplate(pTemplateId);
-    else
-        template = new DocumentTemplate(null, pDefaultType || DocumentTemplate.types.TXT, null);
-    
-    if (pEditedContent)
-    {
-        if (template.type == DocumentTemplate.types.EML || template.type == DocumentTemplate.types.HTML)
-            pEditedContent = "<html>" + pEditedContent + "</html>";
-        template.content = util.encodeBase64String(pEditedContent);
-    }
-    return template;
-}
-
-/** 
- * Returns the template content with replaced placeholders by choosing the right
- * replace function for the type.
- * 
- * @param {Object} pReplacements map, the structure is {placeholder : value}
- * @param {boolean} pEncoded if the replaced content should be base64 encoded
- *                            (doesn't affect odt/docx)
- * 
- * @return {String} the replaced content
- */
-DocumentTemplate.prototype.getReplacedContent = function (pReplacements, pEncoded)
-{
-    switch (this.type)
-    {
-        case DocumentTemplate.types.HTML:
-            for (let i in pReplacements)
-                pReplacements[i] = text.text2html(pReplacements[i], false);
-        case DocumentTemplate.types.TXT:
-            let decodedContent = util.decodeBase64String(this.content);
-            let encodedContent = TemplateHelper._replaceText(decodedContent, pReplacements);
-            if (pEncoded)
-                encodedContent = util.encodeBase64String(encodedContent);
-            return encodedContent;
-        case DocumentTemplate.types.EML:
-            let content = TemplateHelper._getReplacedEML(this, pReplacements);
-            if (pEncoded)
-                content = util.encodeBase64String(content);
-            return content;
-        case DocumentTemplate.types.ODT:
-            return TemplateHelper._getReplacedODT(this, pReplacements);
-        case DocumentTemplate.types.DOCX:
-            return TemplateHelper._getReplacedDOCX(this, pReplacements);
-        case DocumentTemplate.types.PLAIN:
-            let plainText = TemplateHelper._replaceText(this.content, pReplacements);
-            if (pEncoded)
-                plainText = util.encodeBase64String(plainText);
-            return plainText;
-        default:
-            return null;
-    }
-}
-
-/**
- * replaces the placeholders with data from one contact and returns the result
- */
-DocumentTemplate.prototype.getReplacedContentByContactId = function (pContactId, pEncoded) 
-{
-    var replacements = TemplateHelper._getReplacementsByContactIds(this, [pContactId]); 
-    var content = this.getReplacedContent(replacements[pContactId], pEncoded);
-    
-    return content;
-}
-
-/**
- * replaces the placeholders with data from the contacts and returns the result
- * 
- * @param {Array} pContactIds contact ids
- * @param {boolean} pEncoded if the replaced content should be base64 encoded
- * 
- * @return {Object} replaced content for every contactId
- */
-DocumentTemplate.prototype.getReplacedContentByContactIds = function (pContactIds, pEncoded) 
-{
-    var replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
-    var contents = {};
-    for (let contactId in replacements)
-    {
-        contents[contactId] = this.getReplacedContent(replacements[contactId], pEncoded);
-    }
-    return contents;
-}
-
-/**
- * Replaces the placeholders with data from the contacts and returns a serial letter, works
- * only for ODT
- * 
- * @param {Array} pContactIds contact ids
- * @param {Object[][][]} pTableData Table data for the document, as a three-dimensional array 
- *          of objects (dimensions are: document, table in that document, rows of the table). For the format, see example.
- * 
- * @example 
- * var contactSql = SqlCondition.begin()
- *       .andPrepare("CONTACT.ORGANISATION_ID", orgId)
- *       .buildSql("select FIRSTNAME, LASTNAME from CONTACT join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID");
- *
- *   var contacts = db.table(contactSql);
- *   var tblRows = [];
- *   fnamePlaceholder = PlaceholderUtils.formatPlaceholder("fname");
- *   lnamePlaceholder = PlaceholderUtils.formatPlaceholder("lname");
- *
- *   for (let i = 0; i < contacts.length; i++)
- *   {
- *       let names = {};
- *       names[fnamePlaceholder] = contacts[i][0];
- *       names[lnamePlaceholder] = contacts[i][1];
- *       tblRows.push(names);
- *   }
- *
- *   var tables = [tblRows];
- *   var template = DocumentTemplate.loadTEmplate(templateId);
- *   var letter = template.getSerialLetterByContactIds([contactId], [tables]);
- * 
- * @return {Object} the content of the replaced ODT
- */
-DocumentTemplate.prototype.getSerialLetterByContactIds = function (pContactIds, pTableData)
-{
-    if (this.type == DocumentTemplate.types.ODT)
-    {
-        let replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
-        let replaceArray = [];
-        for (let i = 0, l = pContactIds.length; i < l; i++)
-            replaceArray.push(replacements[pContactIds[i]]);
-        return TemplateHelper._getReplacedODT(this, replaceArray, pTableData);
-    }
-    return null;
-}
-
-/**
- * Replaces the placeholders with data from the contacts and returns the resulting Emails.
- * 
- * @param {Array} pContactIds contact ids
- * 
- * @return {Object} Object containing the contact ids as keys and the corresponding Email
- *                   objects as values
- */
-DocumentTemplate.prototype.getReplacedEmailsByContactIds = function (pContactIds) 
-{
-    var replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
-    var emailObj = {};
-    for (let contactId in replacements)
-    {
-        if (this.type == DocumentTemplate.types.EML)
-        {
-            //use the special function for EML to also fill subject and sender
-            emailObj[contactId] = TemplateHelper._getReplacedEML(this, replacements[contactId], true);
-        }
-        else
-        {
-            let body = this.getReplacedContent(replacements[contactId]);
-            if (this.type == DocumentTemplate.types.TXT || this.type == DocumentTemplate.types.PLAIN)
-                body = text.text2html(body, false);
-            emailObj[contactId] = new Email(null, null, null, body);
-        }
-    }
-    return emailObj;
-}
-
-/**
- * Provides functions for the DocumentTemplate object that aren't accessible from outside
- */
-function TemplateHelper () {}
-/**
- * Replace function that works with strings instead of regular expressions
- * so that control characters (for example '{', '}') don't have to be escaped.
- */
-TemplateHelper._replaceText = function (pText, pReplacements)
-{
-    for (let placeholder in pReplacements)
-        pText = pText.replace(placeholder, pReplacements[placeholder], "ig");
-    return pText;
-}
-
-/**
- * returns the 'simpleName' of all placeholders that are used in the template
- * 
- * @private
- */
-TemplateHelper._getRequiredPlaceholders = function (pTemplate)
-{
-    var allPlaceholders = PlaceholderUtils.getPlaceholders();
-    var plainText = pTemplate.toString();
-    var usedPlaceholders = [];
-    for (let i = 0, l = allPlaceholders.length; i < l; i++)
-    {
-        if (plainText.indexOf(allPlaceholders[i]) !== -1)
-            usedPlaceholders.push(allPlaceholders[i]);
-    }
-    return usedPlaceholders; 
-}
-
-/**
- * Builds an object with the placeholder data for multiple contacts
- * 
- * @param {DocumentTemplate} pTemplate document template
- * @param {Array} pContactIds contact ids
- * 
- * @return {Object} Object containing the data. The structure is like {contactId : {placeholderName : replacementValue, ...}, ...}
- * 
- * @private
- */
-TemplateHelper._getReplacementsByContactIds = function (pTemplate, pContactIds)
-{
-    var config = TemplateHelper._getRequiredPlaceholders(pTemplate);
-    var contactIdPlaceholder = new Placeholder("contactId", Placeholder.types.SQLPART, "CONTACT.CONTACTID");
-    config = [contactIdPlaceholder].concat(config);
-    var addressData = getAddressesData(pContactIds, config, EmployeeUtils.getCurrentContactId()); //TODO: add sender selection
-    var replacements = {};
-    var placeholderNames = addressData[0];
-    var contactIdIndex = placeholderNames.indexOf(contactIdPlaceholder.toString());
-    for (let i = 1; i < addressData.length; i++)
-    {
-        let contactId = addressData[i][contactIdIndex];
-        for (let ii = 0, ll = placeholderNames.length; ii < ll; ii++)
-        {
-            if (!(contactId in replacements))
-                replacements[contactId] = {};
-            replacements[contactId][placeholderNames[ii]] = addressData[i][ii];
-        }
-    }
-    return replacements;
-}
-
-/**
- * Replaces placeholders for EML
- * 
- * @param {DocumentTemplate} pTemplate document template
- * @param {Object} pReplacements mapping with replacements for every placeholder
- * @param {boolean} [pGetEmail] if true, return an Email object (use this if the sender and subject are required)
- * 
- * @return {String|Email} the replaced content
- * 
- * @private
- */
-TemplateHelper._getReplacedEML = function (pTemplate, pReplacements, pGetEmail)
-{
-    var email = Email.fromRFC(pTemplate.content);
-    email.body = TemplateHelper._replaceText(email.body, pReplacements);
-    if (!pGetEmail)
-        return email.body;
-    
-    email.sender = TemplateHelper._replaceText(email.sender, pReplacements);
-    email.subject = TemplateHelper._replaceText(email.subject, pReplacements);
-    
-    return email;
-}
-
-/*
- * replaces a given Odt-File on the server and returns the replaced base64-file
- *
- * @param {DocumentTemplate} pTemplate document template
- * @param {Object} pReplacements map of placeholders and replacements
- * @param {Array} pTableData
- *
- * @return {String} base64-encoded replaced file
- * 
- * @private
- */
-TemplateHelper._getReplacedODT = function (pTemplate, pReplacements, pTableData)
-{
-    //save the file on the server so it can be unzipped via pack.getFromZip
-    var serverFilePath = vars.get("$sys.servertemp") + "/clientid_" + vars.get("$sys.clientid")
-        + "/" + util.getNewUUID() + "/" + pTemplate.filename.replace(/\\/g, "/");
-    
-    fileIO.storeData(serverFilePath, pTemplate.content, util.DATA_BINARY, false);
-    if (!_replaceODTFile(pReplacements, serverFilePath, pTableData))
-        return null;
-
-    var replacedFileData = fileIO.getData(serverFilePath, util.DATA_BINARY);
-    fileIO.remove(serverFilePath);
-
-    return replacedFileData;
-    
-    /**
-    * replaces placeholders in a odt file
-    *
-    * @param {Object} pReplacements replacement object
-    * @param {String} pODTFileName filename of the odt
-    * @param {Array} pTableData
-    * 
-    * @return {Boolean}
-    */
-    function _replaceODTFile (pReplacements, pODTFileName, pTableData)
-    {
-        var senderRelId = EmployeeUtils.getCurrentContactId();
-        if (senderRelId == null)
-            return false;
-        if (pReplacements.length === undefined)
-            pReplacements = [pReplacements];
-        if (!pTableData)
-            pTableData = [];
-        
-        if (pReplacements.length !== 0)
-        {
-            //replace placeholders in content.xml
-            var contentXml = util.decodeBase64String(pack.getFromZip(pODTFileName, "content.xml"));
-            var bodybegin = contentXml.indexOf("<office:body>");
-            var bodyend =  contentXml.indexOf("</office:body>") + 14;
-            
-            var bodyTemplate = contentXml.substring(bodybegin, bodyend);
-            var fullBody = "";  //body that contains all pages (required when the replacing is done for several contacts)
-            var beforeBody = contentXml.substring(0, bodybegin);
-            var afterBody = contentXml.substr(bodyend);
-            
-            for (let i = 0, l = pReplacements.length; i < l; i++)
-            {
-                let replacements = pReplacements[i];
-                let currentBody = bodyTemplate;
-            
-                /* This only works if the text of the placeholders in the odt were not edited since they were written.
-                 * If you edit the odt and change a placeholder (for example: you change '{@addres@}' to '{@address@}'),
-                 * the text is saved in different XML tags and won't be replaced correctly.
-                 */
-                for (let placeholder in replacements)
-                {
-                    currentBody = currentBody.replace(placeholder,
-                        replacements[placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
-                }
-                
-                
-                let tables = pTableData[i] || [];
-                let fromIndex = 0;
-                for (let tblIndex = 0; tblIndex < tables.length; tblIndex++) //iterate over all tables in the document
-                {
-                    let tableData = tables[tblIndex];
-                    if (tableData && tableData.length > 0)
-                    {
-                        fromIndex = currentBody.indexOf("</table:table>", fromIndex) + 14;
-                        if (fromIndex === -1) //stop if there is no table
-                            break;
-                        
-                        let rowBegin = currentBody.lastIndexOf("<table:table-row", fromIndex);
-                        let rowEnd =  currentBody.indexOf("</table:table-row>", rowBegin) + 18;
-                        
-                        let afterTable = currentBody.substr(rowEnd);
-                        let tableRow = currentBody.substring(rowBegin, rowEnd);
-                        currentBody = currentBody.substring(0, rowBegin);
-                        
-                        for (let rowIndex = 0; rowIndex < tableData.length; rowIndex++)
-                        {
-                            let tableRowData = tableData[rowIndex];
-                            currentBody += TemplateHelper._replaceText(tableRow, tableRowData);
-                        }
-                        currentBody += afterTable;
-                    }
-                }
-                fullBody += currentBody;
-            }   
-            contentXml = beforeBody + fullBody + afterBody;
-            pack.addToZip(pODTFileName, "content.xml", util.encodeBase64String(contentXml));
-            
-            //replace placeholders in styles.xml
-            var styles = util.decodeBase64String(pack.getFromZip(pODTFileName, "styles.xml"));
-            for (let placeholder in pReplacements[0])
-            {
-                styles = styles.replace(placeholder,
-                    pReplacements[0][placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
-            }
-            pack.addToZip(pODTFileName, "styles.xml", util.encodeBase64String(styles));
-            return true;
-        }
-        return false;
-    }
-}
-
-/*
- * This function is used to replace placeholders via DocXTemplater
- * 
- * @param {DocumentTemplate} pTemplate document template
- * @param {Object} pReplacements - Must contain an object, which holds the placeholders
- * 
- * @return {String} returns the modified document in a BASE64 coded string
- * 
- * @private
- */
-TemplateHelper._getReplacedDOCX = function (pTemplate, pReplacements)
-{
-    var replacements = {};
-    for (let placeholder in pReplacements)  //removes the prefix and postfix, the process needs it like this
-        replacements[placeholder.slice(2, -2)] = pReplacements[placeholder];
-
-    //this is executed as a process because of better performance
-    var documentData = process.execute("getDocxDocument_serverProcess", {
-        templateb64: pTemplate.content,
-        placeholderConfig: JSON.stringify(replacements) //process.execute is only able to handle strings
-    });
-
-    return documentData;
-}
-
-    return DocumentTemplate;
-
-})();
-
-/**
- * functions for working with letters (mails)
- */
-function LetterUtils () {}
-
-/**
- * opens a new letter
- * 
- * @param {String} pContactId id of the contact to fetch the data from
- */
-LetterUtils.openNewLetter = function (pContactId)
-{
-    var params = {
-        "ContactId_param" : pContactId
-    };
-    neon.openContext("Letter", "LetterEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+import("Binary_lib");
+import("Communication_lib");
+import("system.neon");
+import("Employee_lib");
+import("KeywordRegistry_basic");
+import("Document_lib");
+import("KeywordData_lib");
+import("Sql_lib");
+import("Address_lib");
+import("system.process");
+import("system.vars");
+import("system.db");
+import("system.util");
+import("system.pack");
+import("system.fileIO");
+import("system.translate");
+import("system.datetime");
+import("system.question");
+import("system.text");
+import("system.mail");
+import("Keyword_lib");
+import("Placeholder_lib");
+import("Email_lib");
+import("MimeType_lib");
+
+/**
+ * Object for working with document templates, holds the content and type of the template.
+ * Provides functions to replace placeholders in the content.
+ * 
+ * @class
+ */
+var DocumentTemplate = (function ()
+{
+
+/**
+ * constructor for DocumentTemplate
+ * 
+ * @param {String} pTemplateContent content, as base64 string (except for DocumentTemplate.types.PLAIN, then it's a normal string)
+ * @param {String} pType type of the template, use the DocumentTemplate.types constants here
+ * @param {String} [pFilename=undefined] file name of the template 
+ * @param {Boolean} [pResolveSubtemplates=false] if true subtemplates are resolved (if the type fits)
+ * @param {String} [pTemplateId=undefined] Provide it, if you have it, because this enables the template to load attachments associated by this ID
+ * @param {String} [pMimeType=undefined] mimetype of the content. Only an additional information. Not mandatory.
+ */
+function DocumentTemplate(pTemplateContent, pType, pFilename, pResolveSubtemplates, pTemplateId, pMimeType)
+{
+    this.content = pTemplateContent;
+    this.type = pType;
+    this.filename = pFilename;
+    this.templateId = pTemplateId;
+    this.mimeType = pMimeType;
+    this._stringCache = null;
+    this._attachmentCache = null;
+    this._subtemplatedContent = null;
+    
+    if (pResolveSubtemplates)
+        this._resolveEmbeddedTemplate();
+}
+
+/**
+ * @return {String} the text of the content
+ */
+DocumentTemplate.prototype.toString = function (pWithSubtemplates)
+{    
+    if (this._stringCache == null)
+    {
+        var content = this._getTemplatedContent(pWithSubtemplates);
+        if (this.type == DocumentTemplate.types.PLAIN)
+            this._stringCache = content;
+        else
+            this._stringCache = text.parseDocument(content);
+    }
+    return this._stringCache;
+}
+
+DocumentTemplate.prototype._resolveEmbeddedTemplate = function ()
+{
+    // currently we support only txt and html as others would need special caution.
+    if (this.content != null && (this.type == DocumentTemplate.types.TXT || this.type == DocumentTemplate.types.HTML))
+    {
+        var replacedContent = util.decodeBase64String(this.content);
+        
+        var templates = [];
+        // then load the possible replacement names
+        
+        if (this.type == DocumentTemplate.types.HTML)
+        {
+            templates = templates.concat(db.table(SqlCondition.begin()
+                        .andPrepare("DOCUMENTTEMPLATE.KIND", $KeywordRegistry.documentTemplateType$textModular())
+                        .andPrepare("DOCUMENTTEMPLATE.CLASSIFICATION", $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate())
+                        .buildSql("select DOCUMENTTEMPLATEID, REPLACEMENTNAME from DOCUMENTTEMPLATE")));
+        }
+        
+        var alias = SqlUtils.getBinariesAlias();
+
+        // We use callbacks which are called by pString.replace
+        placeholders = templates.map(function(pTemplate) {
+            // add function for each placeholder so that the db.getBinaryContent is only called, if the placeholder is replaced.
+            return [pTemplate[1], function(matched, index, original) {
+                var templateDocument = db.getBinaryMetadata("DOCUMENTTEMPLATE", "DOCUMENT", pTemplate[0], false, alias, null);
+                var binaryId = templateDocument[0][db.BINARY_ID];
+                return util.decodeBase64String(db.getBinaryContent(binaryId, alias));
+            }];
+        });
+
+        // Note: some embedded templates in embedded templates may be replaced, but this is NOT SUPPORTED, as it only works if the second template is not already replaced at that time.
+        placeholders.forEach(function(pPlaceholder) {
+            replacedContent = replacedContent.replace("{@" + pPlaceholder[0] + "@}", pPlaceholder[1], "g")
+        }, this);
+        
+        this._subtemplatedContent = util.encodeBase64String(replacedContent);
+    }
+}
+
+DocumentTemplate.prototype._getTemplatedContent = function (pWithSubtemplates) {
+    if (this._subtemplatedContent != null && pWithSubtemplates)
+        return this._subtemplatedContent;
+    else
+        return this.content;
+}
+
+/**
+ * @return {DocumentTemmplate[]} if the templateId exists, it returns all attachments associated by the id as DocumentTemplate array else it just returns an empty array.
+ */
+DocumentTemplate.prototype.getAttachments = function ()
+{
+    if (!this.templateId && this._attachmentCache == null)
+    {
+        return [];
+    }
+    
+    if (this._attachmentCache == null)
+    {
+        var attachmentIds = db.array(db.COLUMN, SqlCondition.begin()
+                                                 .andPrepare("DOCUMENTTEMPLATELINK.DOCUMENTTEMPLATE_ID_PARENT", this.templateId)
+                                                 .buildSql("select DOCUMENTTEMPLATE_ID_CHILD from DOCUMENTTEMPLATELINK"));
+
+        this._attachmentCache = attachmentIds.map(function(pAttachmentId)
+        {
+            return DocumentTemplateUtils.getTemplate(pAttachmentId, false);
+        });
+    }
+    return this._attachmentCache;
+}
+
+/**
+ * @param {DocumentTemplate[]} pAttachments array of templates which should be used as attachment
+ */
+DocumentTemplate.prototype.setAttachments = function (pAttachments)
+{
+    this._attachmentCache = pAttachments;
+}
+
+/**
+ * The types a DocumentTemplate can have. Depending on the type,
+ * the correct method for replacing the placeholders can be chosen
+ * 
+ * @enum {String}
+ */
+DocumentTemplate.types = {
+    TXT : "txt",
+    HTML : "html",
+    EML : "eml",
+    ODT : "odt",
+    DOCX : "docx",
+    PLAIN : "plain", //for simple strings
+    
+    /**
+     * chooses the type depending on the file extension
+     */
+    fromFileExtension : function (pFileExtension)
+    {
+        switch (pFileExtension)
+        {
+            case "html":
+            case "htm":
+                return this.HTML;
+            case "eml":
+                return this.EML;
+            case "odt":
+                return this.ODT;
+            case "docx":
+                return this.DOCX;
+            case "txt":
+                return this.TXT;
+            case "msg":
+            case "oft":
+            default:
+                return null;
+        }
+    },
+    /**
+     * chooses the type depending on the mime type
+     */
+    fromMimeType : function (pMimetype)
+    {
+        switch (pMimetype)
+        {
+            case MimeTypes.HTML():
+                return this.HTML;
+            case MimeTypes.EML():
+                return this.EML;
+            case MimeTypes.ODT():
+                return this.ODT;
+            case MimeTypes.DOCX():
+                return this.DOCX;
+            case MimeTypes.TXT():
+                return this.TXT;
+            case MimeTypes.MSG():
+            default:
+                return null;
+        }
+    },
+    /**
+     * chooses the type depending on the extension in the metadata. If the extension doesn't work, try mimetype
+     * @param {String[]} pBinaryMetadata the binary metadata from system.db
+     */
+    fromBinaryMetadata: function(pBinaryMetadata)
+    {
+        let filename = pBinaryMetadata[db.BINARY_FILENAME].split(".");
+        let type = DocumentTemplate.types.fromFileExtension(filename[filename.length - 1]);
+        if (type == null)
+            type = DocumentTemplate.types.fromMimeType(pBinaryMetadata[db.BINARY_MIMETYPE]);
+        
+        return type;
+    }
+};
+
+/**
+ * Loads the content of a document template and creates a new DocumentTemplate object with that.
+ * 
+ * @param {String} pAssignmentRowId id of the assignment (in most cases the document template id)
+ * @param {String} [pAssignmentTable="DOCUMENTTEMPLATE"] the LOB assignment table
+ * @param {Boolean} [pResolveSubtemplates=true] if true subtemplates are resolved (if the type fits)
+ * @return {DocumentTemplate} template object
+ */
+DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable, pResolveSubtemplates)
+{   
+    var alias = SqlUtils.getBinariesAlias();
+    if (!pAssignmentTable)
+        pAssignmentTable = "DOCUMENTTEMPLATE";
+    
+    // if the templateId is accessable, use it, to enable the templateto load attachments
+    var templateId;
+    if (pAssignmentTable == "DOCUMENTTEMPLATE")
+        templateId = pAssignmentRowId;
+    
+    if (templateId)
+    {
+        return DocumentTemplateUtils.getTemplate(templateId, pResolveSubtemplates)
+    }
+    
+    var templateDocument = db.getBinaryMetadata(pAssignmentTable, "DOCUMENT", pAssignmentRowId, false, alias, null);
+    if (!templateDocument[0])
+        return new DocumentTemplate(undefined, undefined, undefined, undefined, templateId);
+    var binaryId = templateDocument[0][db.BINARY_ID];
+    var filename = templateDocument[0][db.BINARY_FILENAME];
+    var mimeType = templateDocument[0][db.BINARY_MIMETYPE];
+    var type = DocumentTemplate.types.fromBinaryMetadata(templateDocument[0]);
+    
+    if (pResolveSubtemplates == undefined) pResolveSubtemplates = true;
+    
+    return new DocumentTemplate(db.getBinaryContent(binaryId, alias), type, filename, pResolveSubtemplates, templateId, mimeType);
+}
+
+/**
+ * makes a DocumentTemplate from a upload value
+ * 
+ * @param {FileUpload} pDocumentUpload FileUpload object
+ * @return {DocumentTemplate} a document template
+ */
+DocumentTemplate.fromUpload = function (pDocumentUpload)
+{
+    var type;
+    
+    //if the mimetype couldn't be determined, check the file extension
+    if (pDocumentUpload.mimeType == MimeTypes.BIN())
+        type = DocumentTemplate.types.fromFileExtension(pDocumentUpload.fileExtension);
+    else
+        type = DocumentTemplate.types.fromMimeType(pDocumentUpload.mimeType);
+    
+    return new DocumentTemplate(pDocumentUpload.bindata, type, pDocumentUpload.filename, true);
+}
+
+/**
+ * Function that helps to get the correct template when editing a bulk mail.
+ * pUploadValue is preferred over pTemplateId, and if pEditedContent is provided,
+ * it will overwrite the content of the template (but the type will remain the same as
+ * defined by the upload or templateId, if both are empty, pDefaultType is used)
+ * 
+ * @param {String} pTemplateId
+ * @param {FileUpload} pDocumentUpload
+ * @param {String} [pEditedContent]
+ * @param {String} [pDefaultType]
+ * @return {DocumentTemplate} the document template
+ */
+DocumentTemplate.getSelectedTemplate = function (pTemplateId, pDocumentUpload, pEditedContent, pDefaultType)
+{
+    if (pDocumentUpload.isFilled())
+        template = DocumentTemplate.fromUpload(pDocumentUpload);
+    else if (pTemplateId)
+        template = DocumentTemplate.loadTemplate(pTemplateId);
+    else
+        template = new DocumentTemplate(null, pDefaultType || DocumentTemplate.types.TXT, null, true);
+    
+    if (pEditedContent)
+    {
+        if (template.type == DocumentTemplate.types.EML || template.type == DocumentTemplate.types.HTML)
+            pEditedContent = "<html>" + pEditedContent + "</html>";
+        template.content = util.encodeBase64String(pEditedContent);
+    }
+    return template;
+}
+
+/** 
+ * Returns the template content with replaced placeholders by choosing the right
+ * replace function for the type.
+ * 
+ * @param {Object} pReplacements map, the structure is {placeholder : value}
+ * @param {Boolean} pEncoded if the replaced content should be base64 encoded
+ *                            (doesn't affect odt/docx)
+ * @param {Boolean} [pEmlOnlyBody=false] if true for eml's only the body is parsed (e.g. for previews. Note that eml-bodies are not editable!)
+ * 
+ * @return {String} the replaced content
+ */
+DocumentTemplate.prototype.getReplacedContent = function (pReplacements, pEncoded, pEmlOnlyBody)
+{
+    // if there exists a _subtemplatedContent we use it because then I assume that the replacements are already based on content + subtemplates
+    var content = this._getTemplatedContent(true);
+    
+    switch (this.type)
+    {
+        case DocumentTemplate.types.EML:
+            let emlContent
+            if (pEmlOnlyBody)
+            {
+                // get only body and treat it as html (next case)
+                var email = Email.fromRFC(content);
+                content = util.encodeBase64String(email.body);
+            }
+            else
+            {
+                emlContent = util.decodeBase64String(content);
+                emlContent = TemplateHelper._replaceText(emlContent, pReplacements, TemplateHelper._getSpecialRegexp(this));
+                if (pEncoded)
+                    emlContent = util.encodeBase64String(emlContent);
+                return emlContent;
+            }
+        case DocumentTemplate.types.HTML:
+            // replaces ä, ö, ü, ... with html escape signs
+            for (let i in pReplacements)
+                pReplacements[i] = text.text2html(pReplacements[i], false);
+        case DocumentTemplate.types.TXT:
+            let decodedContent = util.decodeBase64String(content);
+            let encodedContent = TemplateHelper._replaceText(decodedContent, pReplacements, TemplateHelper._getSpecialRegexp(this));
+            if (pEncoded)
+                encodedContent = util.encodeBase64String(encodedContent);
+            return encodedContent;
+        case DocumentTemplate.types.ODT:
+            return TemplateHelper._getReplacedODT(this, pReplacements);
+        case DocumentTemplate.types.DOCX:
+            return TemplateHelper._getReplacedDOCX(this, pReplacements);
+        case DocumentTemplate.types.PLAIN:
+            let plainText = TemplateHelper._replaceText(this.content, pReplacements, TemplateHelper._getSpecialRegexp(this));
+            if (pEncoded)
+                plainText = util.encodeBase64String(plainText);
+            return plainText;
+        default:
+            return null;
+    }
+}
+
+/**
+ * replaces the placeholders with data from one contact and returns the result
+ */
+DocumentTemplate.prototype.getReplacedContentByContactId = function (pContactId, pEncoded, pEmlOnlyBody) 
+{
+    var replacements = TemplateHelper._getReplacementsByContactIds(this, [pContactId]); 
+    var content = this.getReplacedContent(replacements[pContactId], pEncoded, pEmlOnlyBody);
+    
+    return content;
+}
+
+/**
+ * replaces the placeholders with data from the contacts and returns the result
+ * 
+ * @param {Array} pContactIds contact ids
+ * @param {boolean} pEncoded if the replaced content should be base64 encoded
+ * 
+ * @return {Object} replaced content for every contactId
+ */
+DocumentTemplate.prototype.getReplacedContentByContactIds = function (pContactIds, pEncoded) 
+{
+    var replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
+    var contents = {};
+    for (let contactId in replacements)
+    {
+        contents[contactId] = this.getReplacedContent(replacements[contactId], pEncoded);
+    }
+    return contents;
+}
+
+/**
+ * Replaces the placeholders with data from the contacts and returns a serial letter, works
+ * only for ODT
+ * 
+ * @param {Array} pContactIds contact ids
+ * @param {Object[][][]} pTableData Table data for the document, as a three-dimensional array 
+ *          of objects (dimensions are: document, table in that document, rows of the table). For the format, see example.
+ * 
+ * @example 
+ * var contactSql = SqlCondition.begin()
+ *       .andPrepare("CONTACT.ORGANISATION_ID", orgId)
+ *       .buildSql("select FIRSTNAME, LASTNAME from CONTACT join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID");
+ *
+ *   var contacts = db.table(contactSql);
+ *   var tblRows = [];
+ *   fnamePlaceholder = PlaceholderUtils.formatPlaceholder("fname");
+ *   lnamePlaceholder = PlaceholderUtils.formatPlaceholder("lname");
+ *
+ *   for (let i = 0; i < contacts.length; i++)
+ *   {
+ *       let names = {};
+ *       names[fnamePlaceholder] = contacts[i][0];
+ *       names[lnamePlaceholder] = contacts[i][1];
+ *       tblRows.push(names);
+ *   }
+ *
+ *   var tables = [tblRows];
+ *   var template = DocumentTemplate.loadTEmplate(templateId);
+ *   var letter = template.getSerialLetterByContactIds([contactId], [tables]);
+ * 
+ * @return {Object} the content of the replaced ODT
+ */
+DocumentTemplate.prototype.getSerialLetterByContactIds = function (pContactIds, pTableData)
+{
+    if (this.type == DocumentTemplate.types.ODT)
+    {
+        let replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
+        let replaceArray = [];
+        for (let i = 0, l = pContactIds.length; i < l; i++)
+            replaceArray.push(replacements[pContactIds[i]]);
+        return TemplateHelper._getReplacedODT(this, replaceArray, pTableData);
+    }
+    
+    question.showMessage(DocumentTemplate.serialLetterODTOnlyMessage, question.INFORMATION, translate.text("Action not supported"))
+    return null;
+}
+
+DocumentTemplate.serialLetterODTOnlyMessage = function() 
+{
+    return translate.text("Only .odt files are supported for bulkletters.");
+}
+
+/**
+ * Replaces the placeholders with data from the contacts and returns the resulting Emails.
+ * 
+ * @param {Array} pContactIds contact ids
+ * 
+ * @return {Object} Object containing the contact ids as keys and the corresponding Email
+ *                   objects as values
+ */
+DocumentTemplate.prototype.getReplacedEmailsByContactIds = function (pContactIds) 
+{
+    var replacements = TemplateHelper._getReplacementsByContactIds(this, pContactIds);
+    var emailObj = {};
+    for (let contactId in replacements)
+    {
+        if (this.type == DocumentTemplate.types.EML)
+        {
+            emailObj[contactId] = new Email();
+            emailObj[contactId].emlFile = this.getReplacedContent(replacements[contactId])
+        }
+        else
+        {
+            let body = this.getReplacedContent(replacements[contactId]);
+            if (this.type == DocumentTemplate.types.TXT || this.type == DocumentTemplate.types.PLAIN)
+                body = text.text2html(body, false);
+            emailObj[contactId] = new Email();
+            emailObj[contactId].body = body
+        }
+    }
+    return emailObj;
+}
+
+/**
+ * Provides functions for the DocumentTemplate object that aren't accessible from outside
+ */
+function TemplateHelper () {}
+TemplateHelper._replaceText = function (pText, pReplacements, pSpecialCharFilterRegexpPart)
+{
+    if (pSpecialCharFilterRegexpPart == undefined) pSpecialCharFilterRegexpPart = "";
+    
+    pText = pText.replace(new RegExp(PlaceholderUtils.getRegexpMatchAll(pSpecialCharFilterRegexpPart), "gi"), function(pFound) {
+        let foundFiltered = pFound.replace(new RegExp(pSpecialCharFilterRegexpPart, "gi"),"");
+        return pReplacements[foundFiltered] ? pReplacements[foundFiltered] : pFound;
+    }, "gi")
+
+    return pText;        
+}
+
+/**
+ * @param {DocumentTemplate} pTemplate
+ * @param {String[]} pForcedPlaceholders these placeholders are always loaded
+ * @return {Object[]} all placeholders needed in this template or null, if 
+ * @private
+ */
+TemplateHelper._getRequiredPlaceholders = function (pTemplate, pForcedPlaceholders)
+{    
+    var content = "";
+    content = pTemplate.toString(true);
+    
+    // get special regexp (e.g. to filter '=' in emls)
+    var filterRegexpPart = TemplateHelper._getSpecialRegexp(pTemplate);    
+    var placeholders = PlaceholderUtils.getPlaceholders();
+
+    var placeholderCleanRegexp = new RegExp(filterRegexpPart, "gi");
+    
+    // get all placeholders which matches the placeholder pattern
+    var foundPlaceholders = content.match(new RegExp(PlaceholderUtils.getRegexpMatchAll(TemplateHelper._getSpecialRegexp(pTemplate)), "gi"));
+    
+    if (foundPlaceholders == null)
+        foundPlaceholders = [];
+    
+    // clean placeholder from the spechial strings (e.g. to filter '=' in emls)
+    foundPlaceholders = foundPlaceholders.map(function(pFound) {
+        return pFound.replace(placeholderCleanRegexp,"");
+    });
+
+    // filter the possible placeholders by all placeholders found
+    placeholders = placeholders.filter(function(pPlaceholder)
+    {
+        return foundPlaceholders.indexOf(pPlaceholder.placeholderName) != -1 || pForcedPlaceholders.indexOf(pPlaceholder.placeholderName) >= 0;
+    });
+    
+    return placeholders;
+}
+
+/**
+ * Builds an object with the placeholder data for multiple contacts
+ * 
+ * @param {DocumentTemplate} pTemplate document template
+ * @param {Array} pContactIds contact ids
+ * 
+ * @return {Object} Object containing the data. The structure is like {contactId : {placeholderName : replacementValue, ...}, ...}
+ * 
+ * @private
+ */
+TemplateHelper._getReplacementsByContactIds = function (pTemplate, pContactIds)
+{ 
+    var config = TemplateHelper._getRequiredPlaceholders(pTemplate, ["{@firstname@}", "{@lastname@}"]);
+    var contactIdPlaceholder = new Placeholder("contactId", Placeholder.types.SQLPART, "CONTACT.CONTACTID");
+    config = [contactIdPlaceholder].concat(config);
+
+    var addressData = getAddressesData(pContactIds, config, EmployeeUtils.getCurrentContactId()); //TODO: add sender selection
+    var replacements = {};
+    var placeholderNames = addressData[0];
+    var contactIdIndex = placeholderNames.indexOf(contactIdPlaceholder.toString());
+    for (let i = 1; i < addressData.length; i++)
+    {
+        let contactId = addressData[i][contactIdIndex];
+        for (let ii = 0, ll = placeholderNames.length; ii < ll; ii++)
+        {
+            if (!(contactId in replacements))
+                replacements[contactId] = {};
+            replacements[contactId][placeholderNames[ii]] = addressData[i][ii];
+        }
+    }
+    return replacements;
+}
+
+/*
+ * replaces a given Odt-File on the server and returns the replaced base64-file
+ *
+ * @param {DocumentTemplate} pTemplate document template
+ * @param {Object} pReplacements map of placeholders and replacements
+ * @param {Array} pTableData
+ *
+ * @return {String} base64-encoded replaced file
+ * 
+ * @private
+ */
+TemplateHelper._getReplacedODT = function (pTemplate, pReplacements, pTableData)
+{
+    var filename =  pTemplate.filename;
+    if (!filename)
+        filename = "dummyname.odt";
+    
+    //save the file on the server so it can be unzipped via pack.getFromZip
+    var serverFilePath = vars.get("$sys.servertemp") + "/clientid_" + vars.get("$sys.clientid")
+        + "/" + util.getNewUUID() + "/" + filename.replace(/\\/g, "/");
+    
+    fileIO.storeData(serverFilePath, pTemplate.content, util.DATA_BINARY, false);
+    if (!_replaceODTFile(pReplacements, serverFilePath, pTableData))
+        return null;
+
+    var replacedFileData = fileIO.getData(serverFilePath, util.DATA_BINARY);
+    fileIO.remove(serverFilePath);
+
+    return replacedFileData;
+    
+    /**
+    * replaces placeholders in a odt file
+    *
+    * @param {Object} pReplacements replacement object
+    * @param {String} pODTFileName filename of the odt
+    * @param {Array} pTableData
+    * 
+    * @return {Boolean}
+    */
+    function _replaceODTFile (pReplacements, pODTFileName, pTableData)
+    {
+        var senderRelId = EmployeeUtils.getCurrentContactId();
+        if (senderRelId == null)
+            return false;
+        if (pReplacements.length === undefined)
+            pReplacements = [pReplacements];
+        if (!pTableData)
+            pTableData = [];
+        
+        if (pReplacements.length !== 0)
+        {
+            //replace placeholders in content.xml
+            var contentXml = util.decodeBase64String(pack.getFromZip(pODTFileName, "content.xml"));
+            var bodybegin = contentXml.indexOf("<office:body>");
+            var bodyend =  contentXml.indexOf("</office:body>") + 14;
+            
+            var bodyTemplate = contentXml.substring(bodybegin, bodyend);
+            var fullBody = "";  //body that contains all pages (required when the replacing is done for several contacts)
+            var beforeBody = contentXml.substring(0, bodybegin);
+            var afterBody = contentXml.substr(bodyend);
+            
+            for (let i = 0, l = pReplacements.length; i < l; i++)
+            {
+                let replacements = pReplacements[i];
+                let currentBody = bodyTemplate;
+            
+                /* This only works if the text of the placeholders in the odt were not edited since they were written.
+                 * If you edit the odt and change a placeholder (for example: you change '{@addres@}' to '{@address@}'),
+                 * the text is saved in different XML tags and won't be replaced correctly.
+                 */
+                for (let placeholder in replacements)
+                {
+                    currentBody = currentBody.replace(placeholder,
+                        replacements[placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
+                }
+                
+                
+                let tables = pTableData[i] || [];
+                let fromIndex = 0;
+                for (let tblIndex = 0; tblIndex < tables.length; tblIndex++) //iterate over all tables in the document
+                {
+                    let tableData = tables[tblIndex];
+                    if (tableData && tableData.length > 0)
+                    {
+                        fromIndex = currentBody.indexOf("</table:table>", fromIndex) + 14;
+                        if (fromIndex === -1) //stop if there is no table
+                            break;
+                        
+                        let rowBegin = currentBody.lastIndexOf("<table:table-row", fromIndex);
+                        let rowEnd =  currentBody.indexOf("</table:table-row>", rowBegin) + 18;
+                        
+                        let afterTable = currentBody.substr(rowEnd);
+                        let tableRow = currentBody.substring(rowBegin, rowEnd);
+                        currentBody = currentBody.substring(0, rowBegin);
+                        
+                        for (let rowIndex = 0; rowIndex < tableData.length; rowIndex++)
+                        {
+                            let tableRowData = tableData[rowIndex];
+                            currentBody += TemplateHelper._replaceText(tableRow, tableRowData);
+                        }
+                        currentBody += afterTable;
+                    }
+                }
+                fullBody += currentBody;
+            }   
+            contentXml = beforeBody + fullBody + afterBody;
+            pack.addToZip(pODTFileName, "content.xml", util.encodeBase64String(contentXml));
+            
+            //replace placeholders in styles.xml
+            var styles = util.decodeBase64String(pack.getFromZip(pODTFileName, "styles.xml"));
+            for (let placeholder in pReplacements[0])
+            {
+                styles = styles.replace(placeholder,
+                    pReplacements[0][placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
+            }
+            pack.addToZip(pODTFileName, "styles.xml", util.encodeBase64String(styles));
+            return true;
+        }
+        return false;
+    }
+}
+
+/*
+ * This function is used to replace placeholders via DocXTemplater
+ * 
+ * @param {DocumentTemplate} pTemplate document template
+ * @param {Object} pReplacements - Must contain an object, which holds the placeholders
+ * 
+ * @return {String} returns the modified document in a BASE64 coded string
+ * 
+ * @private
+ */
+TemplateHelper._getReplacedDOCX = function (pTemplate, pReplacements)
+{
+    var replacements = {};
+    for (let placeholder in pReplacements)  //removes the prefix and postfix, the process needs it like this
+        replacements[placeholder.slice(2, -2)] = pReplacements[placeholder];
+
+    //this is executed as a process because of better performance
+    var documentData = process.execute("getDocxDocument_serverProcess", {
+        templateb64: pTemplate.content,
+        placeholderConfig: JSON.stringify(replacements) //process.execute is only able to handle strings
+    });
+
+    return documentData;
+}
+
+TemplateHelper._getSpecialRegexp = function (pTemplate)
+{
+    switch (pTemplate.type)
+    {
+        case DocumentTemplate.types.EML:
+            return "\\s*(=\\r?\\n)?";
+        default:
+            return "";
+    }
+}
+
+    return DocumentTemplate;
+
+})();
+
+/**
+ * functions for working with letters (mails)
+ */
+function LetterUtils () {}
+
+/**
+ * opens a new letter
+ * 
+ * @param {String} pContactId id of the contact to fetch the data from
+ */
+LetterUtils.openNewLetter = function (pContactId)
+{
+    var params = {
+        "ContactId_param" : pContactId
+    };
+    neon.openContext("Letter", "LetterEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+}
+
+/**
+ * utility functions for the DocumentTemplate_entity
+ */
+function DocumentTemplateUtils () {}
+
+/**
+ * if pText is provided, it is used as template, otherwise pFileUpload
+ * 
+ * @param {FileUpload} pFileUpload upload value
+ * @param {String} pKind kind of template
+ * @param {String} pText text input
+ * @param {String} pClassification the classification type. Used if pText is not empty. Defines if it is saved as txt or html.
+ * @param {String} pTemplateName name of the template
+ * @return {FileUpload} a FileUpload object with the data
+ */
+DocumentTemplateUtils.chooseSuppliedTemplate = function (pFileUpload, pKind, pText, pClassification, pTemplateName)
+{
+    if (pFileUpload.isFilled() && pText != "")
+    {
+        // use fileUpload but use the custom text as bindata
+        pFileUpload.bindata = util.encodeBase64String(pText);
+    }
+    else if (!pFileUpload.isFilled() && pText != "" && pKind == $KeywordRegistry.documentTemplateType$textModular()) // edit is only allowed in modular templates
+    {
+        pFileUpload.filename = pTemplateName;
+        
+        // if it is a htmlTemplate save it with the html extension
+        if (pClassification == $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate())
+            pFileUpload.fileExtension = "html";
+        else 
+            pFileUpload.fileExtension = "txt";
+        
+        pFileUpload.bindata  = util.encodeBase64String(pText);
+    }
+    
+    var fileUploadType = DocumentTemplate.types.fromMimeType(pFileUpload.mimeType);
+    
+    // treat txt as html for emails
+    if (pFileUpload.fileExtension == "txt" && pKind == $KeywordRegistry.documentTemplateType$mail())
+    {
+        pFileUpload.fileExtension = "html";
+        // convert text to html
+        pFileUpload.bindata = util.encodeBase64String(text.text2html(util.decodeBase64String(pFileUpload.bindata), true));
+    }
+    
+    return pFileUpload;
+}
+
+/**
+ * inserts a template from a document template into ASYS_BINARIES
+ */
+DocumentTemplateUtils.insertTemplateData = function (pTemplateId, pFileUpload, pKind, pText, pClassification, pTemplateName)
+{
+    pFileUpload = DocumentTemplateUtils.chooseSuppliedTemplate(pFileUpload, pKind, pText, pClassification, pTemplateName)
+    if (pFileUpload.isFilled())
+    {
+        db.insertBinary("DOCUMENTTEMPLATE", "DOCUMENT", pTemplateId, 
+            "", pFileUpload.bindata, pFileUpload.filename, "", "TEMPLATE", SqlUtils.getBinariesAlias());
+    }
+}
+
+/**
+ * updates a template from a document template in ASYS_BINARIES
+ */
+DocumentTemplateUtils.updateTemplateData = function (pTemplateId, pFileUpload, pKind, pText, pClassification, pTemplateName)
+{
+    pFileUpload = DocumentTemplateUtils.chooseSuppliedTemplate(pFileUpload, pKind, pText, pClassification, pTemplateName)
+    if (pFileUpload.isFilled())
+    {
+        var assignmentTable = "DOCUMENTTEMPLATE";
+        var assignmentName= "DOCUMENT";
+        var keyword = "TEMPLATE";
+        var binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+        
+        if (binMeta.length == 0)
+            SingleBinaryUtils.insertMainDocument(assignmentTable, assignmentName, pTemplateId, pFileUpload.bindata, pFileUpload.filename, null, SqlUtils.getBinariesAlias());
+        else
+            db.updateBinary(binMeta[0][db.BINARY_ID], "", pFileUpload.bindata, pFileUpload.filename, "", keyword, SqlUtils.getBinariesAlias());
+    }
+}
+
+/**
+ * loads content from a fileUpload or if it's empty from a template in ASYS_BINARIES
+ * @param {String} pTemplateId the id of the template
+ * @param {FileUpload} pFileUpload upload object
+ * 
+ * @return {String[]} [content, type] or ["", type] or ["", null] 
+ *                    Content is only set, if it is HTML, TXT or EML
+ */
+DocumentTemplateUtils.getTemplateContent = function (pTemplateId, pFileUpload)
+{
+    var type;
+    var bindata;
+        
+    if (pFileUpload.isFilled())
+    {
+        type = DocumentTemplate.types.fromFileExtension(pFileUpload.fileExtension);
+        bindata = pFileUpload.bindata
+    }
+    else
+    {
+        var template = DocumentTemplateUtils.getTemplate(pTemplateId, false);
+        if (template != null)
+        {
+            bindata = template.content;
+            type = template.type;
+        }
+    }
+    
+    if (type == DocumentTemplate.types.HTML || type == DocumentTemplate.types.TXT || type == DocumentTemplate.types.EML)
+    {
+        return [util.decodeBase64String(bindata), type];
+    }
+    
+    return ["", type];
+}
+
+/**
+ * loads a template
+ * @param {String} pTemplateId the id of the template
+ * @param {Boolean} pResolveSubtemplates true, if subtemplates should be resolved
+ * 
+ * @return {DocumentTemplate}
+ */
+DocumentTemplateUtils.getTemplate = function (pTemplateId, pResolveSubtemplates)
+{    
+    var assignmentTable = "DOCUMENTTEMPLATE";
+    var assignmentName= "DOCUMENT";
+    var keyword = "TEMPLATE";
+
+    var binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+
+    if (binMeta.length != 0)
+    {                   
+        return new DocumentTemplate(
+                    db.getBinaryContent(binMeta[0][db.BINARY_ID], SqlUtils.getBinariesAlias()),
+                    DocumentTemplate.types.fromBinaryMetadata(binMeta[0]),
+                    binMeta[0][db.BINARY_FILENAME],
+                    pResolveSubtemplates, pTemplateId);
+    }
+    
+    return null;
+}
+
+/**
+ * loads the mimetype from a fileUpload or if it's empty from a template in ASYS_BINARIES
+ * @param {String} pTemplateId the id of the template
+ * @param {FileUpload} pFileUpload upload object
+ * 
+ * @return {String} mimetype
+ */
+DocumentTemplateUtils.getMimeType = function (pTemplateId, pFileUpload)
+{
+    var type;
+    
+    if (pFileUpload && pFileUpload.isFilled())
+    {
+        type = pFileUpload.mimeType;
+    }
+    else
+    {
+        var assignmentTable = "DOCUMENTTEMPLATE";
+        var assignmentName= "DOCUMENT";
+        var keyword = "TEMPLATE";
+        
+        var binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+        
+        if (binMeta.length != 0)
+        {           
+            let binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+            type = binMeta[0][db.BINARY_MIMETYPE];
+        }
+    }
+    
+    return type;
+}
+
+/**
+ * loads the type from a fileUpload or if it's empty from a template in ASYS_BINARIES
+ * @param {String} pTemplateId the id of the template
+ * @param {FileUpload} pFileUpload upload object
+ * 
+ * @return {String} type via DocumentTemplate.types or null
+ */
+DocumentTemplateUtils.getContentType = function (pTemplateId, pFileUpload)
+{
+    var type;
+    
+    if (pFileUpload.isFilled())
+    {
+        type = DocumentTemplate.types.fromFileExtension(pFileUpload.fileExtension);
+    }
+    else
+    {
+        var assignmentTable = "DOCUMENTTEMPLATE";
+        var assignmentName= "DOCUMENT";
+        var keyword = "TEMPLATE";
+        
+        var binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+        
+        if (binMeta.length != 0)
+        {           
+            let binMeta = db.getBinaryMetadata(assignmentTable, assignmentName, pTemplateId, false, SqlUtils.getBinariesAlias(), keyword);
+            type = DocumentTemplate.types.fromBinaryMetadata(binMeta[0]);
+        }
+    }
+    
+    return type;
 }
\ No newline at end of file
diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js
index 4049cfa963c6a9fcfffec8f70256686731840481..7d6e93c958b0a802f032adfd7af93a67df2efda1 100644
--- a/process/Document_lib/process.js
+++ b/process/Document_lib/process.js
@@ -20,7 +20,7 @@ function DocumentUtil(){
  * Documents will be downloaded with neon.download
  */
 DocumentUtil.downloadSelectedDocuments = function() {
-    var alias = SqlUtils.getSystemAlias();
+    var alias = SqlUtils.getBinariesAlias();
     
     if(vars.exists("$sys.selectionRows") && vars.getString("$sys.selectionRows")) {
         var rows = vars.get("$sys.selectionRows");
@@ -117,5 +117,66 @@ DocumentUtil.getMimeTypeFromUpload = function(pUploadValue) {
 
 DocumentUtil.hasDocuments = function (pAssignmentTable, pAssignmentName, pAssignmentRowId)
 {
-    return db.getBinaryCount(pAssignmentTable, pAssignmentName, pAssignmentRowId, SqlUtils.getSystemAlias()) > 0;
+    return db.getBinaryCount(pAssignmentTable, pAssignmentName, pAssignmentRowId, SqlUtils.getBinariesAlias()) > 0;
+}
+
+/**
+ * Object to access all parts of the value you get from an upload field.
+ * This is useful if you need several parts at once, if you only need
+ * for example the binary data, you can use a function from DocumentUtil.
+ * 
+ * @param {String} pUploadValue the value you get from an upload field
+ * @class
+ */
+function FileUpload (pUploadValue)
+{
+    var upload = pUploadValue.split(";");
+    if (upload.length > 1)
+    {
+        this.filename = upload[0];
+        this.bindata = upload[1];
+        this.mimeType = upload[2];
+    }
+    else
+    {
+        this.filename = "";
+        this.bindata = "";
+        this.mimeType = "";
+    }
+    this.fileExtension = null;
+    //the fileExtension is fully dependent on the filename and storing it in a
+    //'normal' property could cause inconsistencies if the filename is set to a new value
+    Object.defineProperty(this, "fileExtension", {
+        enumerable : true,
+        get : function ()
+        {
+            if (!this.filename)
+                return "";
+            var splitname = this.filename.split(".");
+            if (splitname.length > 1)
+                return splitname[splitname.length - 1];
+            return "";
+        },
+        set : function (v)
+        {   
+            var splitname = this.filename.split(".");
+            if (splitname.length > 1)
+                splitname[splitname.length - 1] = v;
+            else if (splitname.length === 1)
+                splitname.push(v);
+            this.filename = splitname.join(".");
+        }
+    });
+}
+
+/**
+ * checks if filename or bindata are filled
+ * 
+ * @return {Boolean} true if the upload is not empty
+ */
+FileUpload.prototype.isFilled = function ()
+{
+    //this conversion is not really nescessary (e. g. in an if it wouldn't make a difference),
+    //but it is more logical to return a 'real' boolean here
+    return Boolean(this.filename || this.bindata);
 }
\ No newline at end of file
diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index 0eb625985d89e2320342b14dbc0e9196454a1fb1..4daa2af24abfd5f5f066a2f0281bf6e20ce79f22 100644
--- a/process/DuplicateScanner_lib/process.js
+++ b/process/DuplicateScanner_lib/process.js
@@ -17,13 +17,13 @@ import("system.indexsearch");
  */
 function DuplicateScannerUtils() {}
 
-/* 
+/*
  * Loads all prefilters for a scanner in the form of arrays in an array.
  * Single filter record: [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 
+ *  @returns {String[[]]} Array of arrays containing the configured values
  */
 DuplicateScannerUtils.loadFilters = function(pFilterName, pTargetEntity)
 {
@@ -35,10 +35,10 @@ DuplicateScannerUtils.loadFilters = function(pFilterName, pTargetEntity)
 }
 
 /*
- * Deletes the cached duplicate for the given id. 
+ * 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)
@@ -51,8 +51,8 @@ DuplicateScannerUtils.DeleteCachedDuplicate = function(pDuplicateId)
     let coundAndClusterId = db.array(db.ROW, query);
     let countDuplicatesInClusterWithoutParameterId = coundAndClusterId[0];
     let clusterId = coundAndClusterId[1];
-    
-    //If only one duplicate would be remaining, 
+
+    //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
@@ -61,7 +61,7 @@ DuplicateScannerUtils.DeleteCachedDuplicate = function(pDuplicateId)
         let deleteStatements = [];
         deleteStatements.push(["DUPLICATECLUSTERS", "DUPLICATECLUSTERS.CLUSTERID = '"+ clusterId +"'"]);
         deleteStatements.push(["UNRELATEDDUPLICATES", "UNRELATEDDUPLICATES.CLUSTERID = '"+ clusterId +"'"]);
-        
+
         db.deletes(deleteStatements);
     }
     else
@@ -75,7 +75,7 @@ DuplicateScannerUtils.DeleteCachedDuplicate = function(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
  */
@@ -85,45 +85,45 @@ DuplicateScannerUtils.DeleteDuplicateClustersByTargetEntity = function(pTargetEn
 }
 
 /*
- * Updates the duplicate relations markes as unrelated for the given target entity. 
+ * 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
  */
 DuplicateScannerUtils.RefreshUnrelatedDuplicateRelations = function(pTargetEntity)
 {
-    /* 
+    /*
      * Update all records with the current valid clusterId where the same duplicateId combination exists
      */
     let INDEX_NEW_CLUSTERID = 0;
     let INDEX_OLD_CLUSTERID = 1;
-    
+
     let query = "select dc1.CLUSTERID, ud.CLUSTERID from UNRELATEDDUPLICATES ud"
                 + " join DUPLICATECLUSTERS dc1 on dc1.DUPLICATEID = ud.SOURCEDUPLICATEID"
                 + " join DUPLICATECLUSTERS dc2 on dc2.DUPLICATEID = ud.UNRELATEDDUPLICATEID"
                 + " where dc1.TARGET_ENTITY = '" + pTargetEntity + "'";
-            
+
     let newIdOldIdRay = db.table(query);
     let updateStatements = [];
 
     //Build update statements to set new clusterIds
-    for (let i = 0; i < newIdOldIdRay.length; i++) 
+    for (let i = 0; i < newIdOldIdRay.length; i++)
     {
         let newClusterId = newIdOldIdRay[i][INDEX_NEW_CLUSTERID];
         let oldClusterId = newIdOldIdRay[i][INDEX_OLD_CLUSTERID];
         let updateColumns = ["CLUSTERID"];
         let condition = "UNRELATEDDUPLICATES.CLUSTERID = '" + oldClusterId + "'";
-        
+
         let updateStatement = ["UNRELATEDDUPLICATES", updateColumns, null, [newClusterId], condition];
-        
+
         updateStatements.push(updateStatement);
     }
     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.
      */
@@ -131,11 +131,11 @@ DuplicateScannerUtils.RefreshUnrelatedDuplicateRelations = function(pTargetEntit
     db.deleteData("UNRELATEDDUPLICATES", deleteCondition);
 }
 
-/* 
+/*
  * 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
@@ -150,9 +150,9 @@ DuplicateScannerUtils.CreateUnrelatedDuplicateRelation = function(pSourceContact
     return db.insertData("UNRELATEDDUPLICATES", columns, null, values);
 }
 
-/* 
+/*
  * Gets the cluster id in which the given duplicate id exists
- * 
+ *
  *  @param {String} pDuplicateId whose cluster id should be searched
  *  @returns {String} Cluster id
  */
@@ -161,13 +161,13 @@ DuplicateScannerUtils.GetClusterId = function(pDuplicateId)
     let duplicateIdsOfClusterWithoutUnrelated = SqlCondition.begin()
     .and("DUPLICATECLUSTERS.DUPLICATEID = '" + pDuplicateId + "'")
     .buildSql("select CLUSTERID from DUPLICATECLUSTERS");
-     
+
     return db.cell(duplicateIdsOfClusterWithoutUnrelated);
 }
 
-/* 
+/*
  * 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
@@ -178,7 +178,7 @@ DuplicateScannerUtils.DeleteUnrelatedDuplicateRelation = function(pSourceDuplica
     cond.andPrepare("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId)
     cond.andPrepare("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateId)
     let condition = db.translateCondition(cond.build());
-    
+
     return db.deleteData("UNRELATEDDUPLICATES", condition);
 }
 
@@ -194,7 +194,7 @@ DuplicateScannerUtils.DeleteAllUnrelatedDuplicateRelations = function(pDuplicate
     cond.orPrepare("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId)
     cond.orPrepare("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId)
     let condition = db.translateCondition(cond.build());
-    
+
     return db.deleteData("UNRELATEDDUPLICATES", condition);
 }
 
@@ -219,7 +219,7 @@ DuplicateScannerUtils.GetCachedDuplicatesForContactId = function(pDuplicateId)
 
 /*
  * 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
  */
@@ -227,12 +227,12 @@ DuplicateScannerUtils.GetCachedDuplicatesForClusterId = function(pClusterId)
 {
     let clusterIdRay = [];
     clusterIdRay.push(pClusterId);
-    
+
     let duplicateIdsOfClusterWithoutUnrelated = SqlCondition.begin()
     .and("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)")
     .and("DUPLICATECLUSTERS.CLUSTERID = '" + clusterIdRay + "'")
     .buildSql("select DUPLICATEID from DUPLICATECLUSTERS");
-    
+
     return db.array(db.COLUMN, duplicateIdsOfClusterWithoutUnrelated);
 }
 
@@ -255,14 +255,14 @@ DuplicateScannerUtils.GetCachedDuplicatesForClusterId = function(pClusterId)
  * @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 = 5;
- * 
+ *
  * let resultFields = DuplicateScannerUtils.LoadResultFields(filterName, targetEntity);
- * 
+ *
  * let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay)
  * {
  *      let indexResultFields = DuplicateScannerUtils.TranslateEntityToIndexFields(targetEntity, resultFields)
@@ -284,33 +284,33 @@ DuplicateScannerUtils.GetCachedDuplicatesForClusterId = function(pClusterId)
  * };
  *
  * DuplicateScannerUtils.DeleteDuplicateClustersByTargetEntity(targetEntity);
- * 
+ *
  * DuplicateScannerUtils.RebuildDuplicatesCache(filterName, targetEntity, pRecordsBlockSize, formatToJsonAndCallWsCallback);
  *
  * DuplicateScannerUtils.RefreshUnrelatedDuplicateRelations(targetEntity);
  */
 DuplicateScannerUtils.RebuildDuplicatesCache = function(pFilterName, pTargetEntity,
 pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback)
-{   
+{
     let useExternalWebservice = _DuplicateScannerUtils._isUseExternalWebservice(pFilterName, pTargetEntity);
     let alreadyIdentifiedIds = [];
-    
+
     let duplicateFieldsConfig = DuplicateScannerUtils.LoadIndexFieldsConfiguration(filterName, targetEntity);
     let resultFields = DuplicateScannerUtils.LoadResultFields(filterName, targetEntity);
 
     //load all entity fields used in the prefilter
     let filterFieldConfigs = _DuplicateScannerUtils._getFieldConfigsFromFilterFields(pFilterName, pTargetEntity);
     logging.log("filterFieldConfigs -> " + filterFieldConfigs);
-    
+
     let entityFieldsToLoad = _DuplicateScannerUtils._getEntityFieldNamesFromFieldsConfig(duplicateFieldsConfig);
-    
+
     logging.log("entityFieldsToLoad initial-> " + entityFieldsToLoad);
-    
+
     //If the fields from the prefilter aren't in the entity fields to load, add them manually
     if(filterFieldConfigs.length > 0)
     {
         let INDEX_FILTER_FIELD_NAME = 0;
-        for (let i = 0; i < filterFieldConfigs.length; i++) 
+        for (let i = 0; i < filterFieldConfigs.length; i++)
         {
             let filterFieldConfig = filterFieldConfigs[i];
             let filterFieldName = filterFieldConfig[INDEX_FILTER_FIELD_NAME];
@@ -322,7 +322,7 @@ pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback)
                 entityFieldsToLoad.push(filterFieldName);
             }
         }
-    }    
+    }
     
     logging.log("entityFieldsToLoad vollsätndig-> " + entityFieldsToLoad);
     logging.log("duplicateFieldsConfig vollsätndig-> " + duplicateFieldsConfig);
@@ -334,7 +334,7 @@ pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback)
     while(targetRecords.length > 0)
     {
         foundDuplicateIds = DuplicateScannerUtils.ScanRecords(pFilterName, pTargetEntity, targetRecords,
-                                duplicateFieldsConfig, resultFields, useExternalWebservice, 
+                                duplicateFieldsConfig, resultFields, useExternalWebservice,
                                 pFormatValuesConsumeWebserviceCallback, alreadyIdentifiedIds);
         logging.log("gefundene ids zum ignorieren foundDuplicateIds -> " + foundDuplicateIds);
         alreadyIdentifiedIds = alreadyIdentifiedIds.concat(foundDuplicateIds);
@@ -346,10 +346,10 @@ pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback)
         }
 
         logging.log("Nächster Block wird geladen mit startRow -> " + currentRecordIndex);
-        
+
         targetRecords = DuplicateScannerUtils.LoadEntityRecords(pTargetEntity, entityFieldsToLoad,
         currentRecordIndex, pRecordsBlockSize);
-        
+
         currentRecordIndex += pRecordsBlockSize;
         logging.log("Nächster Block geladen mit targetRecords -> " + JSON.stringify(targetRecords));
     }
@@ -360,8 +360,8 @@ pDuplicateFieldsConfig, pResultFields, pUseExternalWebservice, pFormatValuesCons
 {
     logging.log("in ScanRecords -> ");
     let foundDuplicateIds = [];
-    
-    //If the contact id loading query has no results, stop. 
+
+    //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;
@@ -370,7 +370,7 @@ pDuplicateFieldsConfig, pResultFields, pUseExternalWebservice, pFormatValuesCons
      //Otherwise an object gets build in the form of ["FilterFieldName" = "FilterFieldValueFromQuery"] with which a scan for possible duplicates get's started
     logging.log("configured pResultFields -> " + pResultFields);
     var duplicatesToInsertQueries = [];
-    for (b = 0; b < pTargetRecordsData.length; b++) 
+    for (b = 0; b < pTargetRecordsData.length; b++)
     {
         logging.log("Nächster Datensatz in RebuildDuplicatesCache -> " + b);
 //        logging.log("Neuer Record -> " + pTargetRecordsData[b]);
@@ -378,8 +378,8 @@ pDuplicateFieldsConfig, pResultFields, pUseExternalWebservice, pFormatValuesCons
         logging.log("pTargetRecordsData[b] -> " + JSON.stringify(pTargetRecordsData[b]));
         let entityFieldValuesRay = DuplicateScannerUtils.BuildEntityFieldNameValueRays(pDuplicateFieldsConfig, pTargetRecordsData[b]);
         logging.log("Werte des Datensatzes entityFieldValuesRay -> " + JSON.stringify(entityFieldValuesRay));
-        
-        //The first field in this Array must always be the configured id field. This is ensured using onValidation-logic 
+
+        //The first field in this Array must always be the configured id field. This is ensured using onValidation-logic
         let idField = entityFieldValuesRay[0][0];
         let idValue = entityFieldValuesRay[0][1];
 //        logging.log("idField -> " + idField);
@@ -391,33 +391,33 @@ pDuplicateFieldsConfig, pResultFields, pUseExternalWebservice, pFormatValuesCons
                 logging.log("Id schon behandelt, continue; -> ");
                 continue;
             }
-        
+
         let foundDuplicates = _DuplicateScannerUtils._scanForDuplicates(pFilterName, pTargetEntity,
                                 entityFieldValuesRay, pResultFields, idField, idValue, pFormatValuesConsumeWebserviceCallback, pUseExternalWebservice)
-        
+
         if(foundDuplicates == null || foundDuplicates.length == 0)
         {
             logging.log("Keine Datensätze gefunden  continue;-> ");
             continue;
         }
         logging.log("foundDuplicates.length nach _scanForDuplicates -> " + foundDuplicates.length);
- 
+
         //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];
             logging.log("foundDuplicates[i] -> " + foundDuplicates[i]);
             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][idField]);
         logging.log("foundDuplicates -> " + JSON.stringify(foundDuplicates));
         logging.log("foundDuplicateIds -> " + JSON.stringify(foundDuplicateIds));
-        
+
         let insertQueriesRay = _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(foundDuplicateIds, pTargetEntity)
         duplicatesToInsertQueries = duplicatesToInsertQueries.concat(insertQueriesRay);
     }
@@ -435,12 +435,12 @@ DuplicateScannerUtils.LoadEntityRecords = function(pTargetEntity, pEntityFields,
                                 .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 
+ *  @returns {String[]} Resultfields as array
  */
 DuplicateScannerUtils.LoadResultFields = function(pFilterName, pTargetEntity)
 {
@@ -449,20 +449,20 @@ DuplicateScannerUtils.LoadResultFields = function(pFilterName, pTargetEntity)
         .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
         .buildSql("select dsrfc.ENTITY_FIELD_NAME from DUPLICATESCANNERRESULTFIELDCONFIG dsrfc join DUPLICATESCANNER on DUPLICATESCANNER.ID = dsrfc.DUPLICATESCANNER_ID"
         , "1=2");
-    
+
     return db.array(db.COLUMN, duplicateResultFields);
 }
 
-/* 
- * Loads the fields and their configuration. 
- * One field record is in the following format: 
+/*
+ * Loads the fields and their configuration.
+ * One field record is in the following format:
  * [ENTITY_FELD, IS_ID, USE_FOR_SEARCH]
  * Example:
  * ["FIRSTNAME", false, true]
- * 
+ *
  *  @param {String} pFilterName Name of the filter
  *  @param {String} pTargetEntity Entity which has been configured
- *  @returns {String[[]]} An Array of Arrays in the format described above 
+ *  @returns {String[[]]} An Array of Arrays in the format described above
  */
 DuplicateScannerUtils.LoadIndexFieldsConfiguration = function(pFilterName, pTargetEntity)
 {
@@ -471,11 +471,11 @@ DuplicateScannerUtils.LoadIndexFieldsConfiguration = function(pFilterName, pTarg
         .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
         .buildSql("select dsic.ENTITY_FIELD_NAME, dsic.IS_ID_FIELD, dsic.USE_FOR_INDEX_DUPLICATE_SEARCH from DUPLICATESCANNERINDEXCONFIG dsic join DUPLICATESCANNER on DUPLICATESCANNER.ID = dsic.DUPLICATESCANNER_ID"
         , "1=2", "order by dsic.IS_ID_FIELD desc");
-    
+
     return db.table(duplicateIndexFieldConfigurations);
 }
 
-/* 
+/*
  * Scans for duplicates based on the configured prefilters and the pFilterFieldValueRays.
  * First the prefilters get applied one after another until the count of the returned data is in the allowed threshold.
  * Then, the duplicate search using the index starts. All fields which have been configured will be used here.
@@ -500,7 +500,7 @@ DuplicateScannerUtils.LoadIndexFieldsConfiguration = function(pFilterName, pTarg
  * @example
  * var filterName = "PersonDuplicates";
  * var targetEntity = "Person_entity";
- * 
+ *
  * //Values to check, the same fields as configured
  * let valuesToCheck = {};
  * valuesToCheck["CONTACTID"] = "c7ddf982-0e58-4152-b82b-8f5673b0b729";
@@ -557,7 +557,7 @@ pFormatValuesConsumeWebserviceCallback)
             }
         }
     }
-    
+
     let entityFieldValuesRay = DuplicateScannerUtils.BuildEntityFieldNameValueRays(duplicateFieldsConfig, pValuesToCheck);
     //The first field in this Array must always be the configured id field.
     let idField = entityFieldValuesRay[0][0];
@@ -579,13 +579,13 @@ pFormatValuesConsumeWebserviceCallback)
  *  @example
  *  let entityResultFields = ["LASTNAME"];
  *  let entityIndexFields = DuplicateScannerUtils.TranslateEntityToIndexFields("Person_entity", entityResultFields);
- *  
+ *
  *  logging.log(entityIndexFields["LASTNAME"]);//=> "LASTNAME_value"
  */
 DuplicateScannerUtils.TranslateEntityToIndexFields = function(pEntityName, pEntityFields)
 {
     let entityIndexFields = {};
-    for (let i = 0; i < pEntityFields.length; i++) 
+    for (let i = 0; i < pEntityFields.length; i++)
     {
         let entityFieldName = pEntityFields[i];
 
@@ -611,32 +611,32 @@ DuplicateScannerUtils.MergePerson = function(pSourceContactId, pTargetContactId)
     let updateStatementsCurrentAlias = [];
     let updateStatementsSystemAlias = [];
     let deleteStatements = [];
-    
+
     var sourcePersonId = db.cell("select PERSON_ID from CONTACT where CONTACTID = '" + pSourceContactId + "'");
     var tableInfosCurrentAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias();
     var tableInfosSystemAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosSystemAlias();
-    
+
     updateStatementsCurrentAlias = updateStatementsCurrentAlias.concat(_DuplicateScannerUtils._buildUpdateContactIdStatements(tableInfosCurrentAlias, pSourceContactId, pTargetContactId));
     updateStatementsCurrentAlias = updateStatementsCurrentAlias.concat(_DuplicateScannerUtils._buildUpdateAttachParticipantsToNewContactQuery("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", pSourceContactId, pTargetContactId));
-    
+
     updateStatementsSystemAlias = updateStatementsSystemAlias.concat(_DuplicateScannerUtils._buildUpdateContactIdStatements(tableInfosSystemAlias, pSourceContactId, pTargetContactId));
-    
+
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteRemoveObsoleteParticipantsRecordsQuery("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", pSourceContactId, pTargetContactId));
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeletePersonAndContactQuery(sourcePersonId, pSourceContactId));
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
 
     logging.log("updateStatementsCurrentAlias -> " + JSON.stringify(updateStatementsCurrentAlias));
     logging.log("deleteStatements -> " + JSON.stringify(deleteStatements));
-    
+
     let affectedRowsCurrentAlias = db.updates(updateStatementsCurrentAlias);
     let affectedRowsSystemAlias = db.updates(updateStatementsSystemAlias, "_____SYSTEMALIAS");
     let deletedRows = db.deletes(deleteStatements)
-    
+
     logging.log("affectedRowsCurrentAlias -> " + affectedRowsCurrentAlias);
     logging.log("deletedRows -> " + deletedRows);
-    
+
     DuplicateScannerUtils.DeleteCachedDuplicate(pSourceContactId);
-    
+
     return (affectedRowsCurrentAlias > 0 && deletedRows >= 2);
 }
 
@@ -644,7 +644,7 @@ DuplicateScannerUtils.MergeOrganisation = function(pSourceContactId, pTargetCont
 {
     let updateStatements = [];
     let deleteStatements = [];
-    
+
     let querySourceOrganisationId = SqlCondition.begin()
     .and("CONTACTID = '" + pSourceContactId + "'")
     .buildSql("select ORGANISATION_ID from CONTACT");
@@ -652,28 +652,28 @@ DuplicateScannerUtils.MergeOrganisation = function(pSourceContactId, pTargetCont
 
     var tableInfosCurrentAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias();
     var tableInfosSystemAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosSystemAlias();
-    
+
     updateStatementsCurrentAlias = updateStatementsCurrentAlias.concat(_DuplicateScannerUtils._buildUpdateContactIdStatements(tableInfosCurrentAlias, pSourceContactId, pTargetContactId));
     updateStatementsCurrentAlias = updateStatementsCurrentAlias.concat(_DuplicateScannerUtils._buildUpdateAttachParticipantsToNewContactQuery("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", pSourceContactId, pTargetContactId));
-    
+
     updateStatementsSystemAlias = updateStatementsSystemAlias.concat(_DuplicateScannerUtils._buildUpdateContactIdStatements(tableInfosSystemAlias, pSourceContactId, pTargetContactId));
-    
+
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteRemoveObsoleteParticipantsRecordsQuery("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", pSourceContactId, pTargetContactId));
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery(sourceOrganisationId, pSourceContactId));
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
 
     logging.log("updateStatementsCurrentAlias -> " + JSON.stringify(updateStatementsCurrentAlias));
     logging.log("deleteStatements -> " + JSON.stringify(deleteStatements));
-    
+
     let affectedRowsCurrentAlias = db.updates(updateStatementsCurrentAlias);
     let affectedRowsSystemAlias = db.updates(updateStatementsSystemAlias, "_____SYSTEMALIAS");
     let deletedRows = db.deletes(deleteStatements)
-    
+
     logging.log("affectedRowsCurrentAlias -> " + affectedRowsCurrentAlias);
     logging.log("deletedRows -> " + deletedRows);
-    
+
     DuplicateScannerUtils.DeleteCachedDuplicate(pSourceContactId);
-    
+
     return (affectedRowsCurrentAlias > 0 && deletedRows >= 2);
 }
 
@@ -776,10 +776,10 @@ pResultFields, pRecordIdFieldToIgnore, pRecordIdValueToIgnore, pFormatValuesCons
         return null;
 
     possibleDuplicates = _DuplicateScannerUtils._callIndexSearch(pTargetEntity, preFilter, pFilterFieldValueRays, pResultFields, 100);
-    
+
     if(possibleDuplicates == null)
         return null;
-    
+
     possibleDuplicates = possibleDuplicates[indexsearch.HITS];
 
     if(pUseExternalWebservice && possibleDuplicates.length > 0 && pFormatValuesConsumeWebserviceCallback != null)
@@ -808,7 +808,7 @@ _DuplicateScannerUtils._isUseExternalWebservice = function(pFilterName, pTargetE
         .andPrepare("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
         .buildSql("select EXTERNAL_SERVICE_USAGE_ALLOWED from DUPLICATESCANNER"
         , "1=2");
-    
+
     let isUseWebservice = db.cell(scannerUseExternalWebserviceQuery);
     return (isUseWebservice == 0) ? false : true;
 }
@@ -843,9 +843,9 @@ _DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCha
             continue;
 
         filter = JSON.parse(filter);
-        
+
         let filterValuesObject = {};
-        for (a = 0; a < pFilterFieldValueRays.length; a++) 
+        for (a = 0; a < pFilterFieldValueRays.length; a++)
         {
             filterValuesObject[pFilterFieldValueRays[a][0]] = pFilterFieldValueRays[a][1];
         }
@@ -871,12 +871,12 @@ _DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCha
             let newCombinedFilterChilds = combinedFilter.childs.concat(filter.filter.childs);
             combinedFilter.childs = newCombinedFilterChilds;
         }
-        
+
         //logging.log("5 ###### combinedFilter + gefüllter filter vor indexsuche-> " + JSON.stringify(combinedFilter));
-        
+
         filter.filter = combinedFilter;
         logging.log("6 ###### completeFilter -> " + JSON.stringify(filter));
-        
+
         //Workaround to load the smallest possible resultset because only the TOTALHITS are relevant at this time
         //Only load "indexsearch.FIELD_ID" and a resultSet size of 1
         let searchResult = _DuplicateScannerUtils._callIndexSearch(pTargetEntity, JSON.stringify(filter), [],
@@ -885,7 +885,7 @@ _DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCha
 
 //        if(searchResult[indexsearch.TOTALHITS] < 80)//todo entfernen?!
 //        {
-//            for (let i = 0; i < searchResult[indexsearch.HITS].length; i++) 
+//            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}
@@ -897,11 +897,11 @@ _DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCha
 //                logging.log("indexGroup -> " + indexGroup);
 //            }
 //        }
-        
+
         let totalHits = searchResult[indexsearch.TOTALHITS]
 
         logging.log("totalHits -> " + totalHits);
-        
+
         if(totalHits > maxResultsThreshold)
         {
             logging.log("zu viele rows gefundenn nächsten Filter anwenden -> totalHits:" + totalHits + " maxResultsThreshold:" + maxResultsThreshold);
@@ -930,7 +930,7 @@ _DuplicateScannerUtils._applyPreFilter = function(pTargetEntity, pFilterCountCha
  * @param {String} pTargetEntity Entity which has been configured
  * @param {String} pPreFilterJson The prefilters
  * @param {String[[]]} pEntityFieldValueRays Array of Arrays containing the name of a used field and its value.
- * Use "DuplicateScannerUtils.BuildEntityFieldNameValueRays". The fieldnames and values have to be in the same order. NotNull!->Empty Array 
+ * Use "DuplicateScannerUtils.BuildEntityFieldNameValueRays". The fieldnames and values have to be in the same order. NotNull!->Empty Array
  * @param {String} pResultFields The result field config. Use "DuplicateScannerUtils.LoadResultFields"
  * @param {String} pResultSetRows todo
  * @returns {[["key", "value"]]} Array of Key-Value-Pairs based on the configured pResultFields
@@ -948,10 +948,10 @@ _DuplicateScannerUtils._callIndexSearch = function(pTargetEntity, pPreFilterJson
                                 .setRows(pResultSetRows);
 
     indexQuery = _DuplicateScannerUtils._setResultFields(indexQuery, pResultFields);
-    
+
     //indexQuery = indexQuery.addResultFields(["Person_entity.FIRSTNAME", "Person_entity.LASTNAME"]);
     //indexQuery = indexQuery.addResultFields(["FIRSTNAME", "LASTNAME"]);
-    
+
     let filterPatternConfig = _DuplicateScannerUtils._buildFilterPatternConfig(pEntityFieldValueRays, pTargetEntity);
     if(filterPatternConfig != null)
     {
@@ -960,7 +960,7 @@ _DuplicateScannerUtils._callIndexSearch = function(pTargetEntity, pPreFilterJson
         logging.log("real filter PatternString -> " + filterPatternString);
     }
     logging.log("parsedFilterAsPatternTerm -> " + parsedFilterAsPatternTerm);
-    
+
     if(filterPatternConfig == null && pEntityFieldValueRays.length > 0)
     {
         logging.log("FilterPattern ist null aber es gibt pEntityFieldValueRays -> Die Felder sollten genutzt werden, beinhalten aber keine Werte");
@@ -986,7 +986,7 @@ _DuplicateScannerUtils._setResultFields = function(pIndexQuery, pResultFields)
 {
     let resultIndexFields = [];
     let resultFields = [];
-    for (let i = 0; i < pResultFields.length; i++) 
+    for (let i = 0; i < pResultFields.length; i++)
     {
         if(pResultFields[i] == indexsearch.FIELD_ID
         || pResultFields[i] == indexsearch.FIELD_TITLE
@@ -998,20 +998,20 @@ _DuplicateScannerUtils._setResultFields = function(pIndexQuery, pResultFields)
         else
             resultFields.push(pResultFields[i]);
     }
-    
+
 //    if(resultIndexFields.length == 0 && resultFields.length == 0)
 //        pIndexQuery = pIndexQuery.addResultIndexFields([indexsearch.FIELD_ID]);
-//    else 
+//    else
 //    {
         if(resultIndexFields.length > 0)
             pIndexQuery = pIndexQuery.addResultIndexFields(resultIndexFields);
-        
+
         if(resultFields.length > 0)
         {
             pIndexQuery = pIndexQuery.addResultFields(resultFields);
         }
 //    }
-    
+
     logging.log("resultFields -> " + resultFields);
     return pIndexQuery;
 }
@@ -1030,29 +1030,29 @@ _DuplicateScannerUtils._buildFilterPatternConfig = function(pEntityFieldValueRay
     //Structure of this array is [ENTITY_FIELD, FIELD_VALUE, USE_FOR_SEARCH]
     let INDEX_CONFIG_USE_FOR_SEARCH = 2;
     let filterPatternConfig = null;
-    
+
     logging.log("pEntityFieldValueRays.length -> " + pEntityFieldValueRays.length);
     if(pEntityFieldValueRays.length > 0)
     {
         filterPatternConfig = indexsearch.createPatternConfig();
-        for (let i = 0; i < pEntityFieldValueRays.length; i++) 
+        for (let i = 0; i < pEntityFieldValueRays.length; i++)
         {
             let entityFieldValue = pEntityFieldValueRays[i][1];
             let entityFieldName = pEntityFieldValueRays[i][0];
-            
+
             if(pEntityFieldValueRays[i][INDEX_CONFIG_USE_FOR_SEARCH] == 0 || entityFieldValue == "")
                 continue;
-            
+
             logging.log("entityFieldValue -> " + entityFieldValue);
             logging.log("entityFieldName -> " + entityFieldName);
-                      
+
             let indexField = indexsearch.lookupIndexField(pTargetEntity, entityFieldName);
-            
+
             logging.log("indexField -> " + indexField);
             var filterTerm = indexsearch.createTerm(entityFieldValue)
                                         .setIndexField(indexField)
                                         .setFuzzySearchFactor(0);
-                                        
+
             filterPatternConfig.and(filterTerm);
         }
     }
@@ -1071,8 +1071,8 @@ _DuplicateScannerUtils._createInsertDuplicatesClusterQuery = function (pDuplicat
     let duplicatesToInsertQueries = [];
     let cols = ["ID", "CLUSTERID", "DUPLICATEID", "TARGET_ENTITY"];
     let newClusterUid = util.getNewUUID();
-    
-    for (i = 0; i < pDuplicatesRay.length; i++) 
+
+    for (i = 0; i < pDuplicatesRay.length; i++)
     {
         let newId = util.getNewUUID();
         let valuesToInsert = [newId, newClusterUid, pDuplicatesRay[i], pTargetEntity];
@@ -1096,28 +1096,28 @@ _DuplicateScannerUtils._deleteDuplicateClusters = function ()
  * 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.
- * 
+ *
  * Mandatory: All records ignored for the time being have to be deleted aswell! See #_DuplicateScannerUtils._buildRemoveObsoleteParticipantsRecordsDeleteQuery
  * @returns {String[]} Query to update records
  */
 _DuplicateScannerUtils._buildUpdateAttachParticipantsToNewContactQuery = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId, updateStatements)
 {
-    var selectAssignableIdsOfTargetContactQuery = "select " + pAssignableIdColumn 
-                                                    + " from " + pTableName 
+    var selectAssignableIdsOfTargetContactQuery = "select " + pAssignableIdColumn
+                                                    + " from " + pTableName
                                                     + " where " + pContactIdColumn + " = '" + pTargetContactId + "'";
     let updateCondition = pAssignableIdColumn
                             + " not in"
                             + " (" + selectAssignableIdsOfTargetContactQuery + ")"
                             + " and " + pContactIdColumn + " = '" + pSourceContactId + "'";
-    
+
     return [[pTableName, [pContactIdColumn], null, [pTargetContactId], updateCondition]];
 }
 
 
 _DuplicateScannerUtils._buildDeleteRemoveObsoleteParticipantsRecordsQuery = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId, updateStatements)
 {
-    var selectAssignableIdsOfTargetContactQuery = "select " + pAssignableIdColumn 
-                                                    + " from " + pTableName 
+    var selectAssignableIdsOfTargetContactQuery = "select " + pAssignableIdColumn
+                                                    + " from " + pTableName
                                                     + " where " + pContactIdColumn + " = '" + pTargetContactId + "'";
 
     let deleteCondition = pAssignableIdColumn + " in"
@@ -1169,15 +1169,15 @@ _DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSou
 _DuplicateScannerUtils._getIgnoreRecordFilter = function(pRecordIdFieldToIgnore, pRecordIdValueToIgnore, pTargetEntity)
 {
     let ignoreFilterJson = JSON.stringify({"entity":pTargetEntity,"filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":pRecordIdFieldToIgnore,"operator":"NOT_EQUAL","value":pRecordIdValueToIgnore,"key":"","contenttype":"TEXT"}]}});
-    
+
     return [ignoreFilterJson, null, null];
 }
 
 _DuplicateScannerUtils._buildUpdateContactIdStatements = function(pTableInfos, pSourceContactId, pTargetContactId)
 {
     let statements = [];
-    
-    for (let i = 0; i < pTableInfos.length; i++) 
+
+    for (let i = 0; i < pTableInfos.length; i++)
     {
         let tableInfo = pTableInfos[i];
         let updateStatement = _DuplicateScannerUtils._buildStatement(tableInfo, pSourceContactId, pTargetContactId);
@@ -1191,12 +1191,12 @@ _DuplicateScannerUtils._buildStatement = function(pTableinfos, pSourceContactId,
     let tableName = pTableinfos[INDEX_TABLE_NAME];
     let columnName = pTableinfos[INDEX_COLUMN_NAME];
     let additionalCondition = pTableinfos[INDEX_CONDITION];
-    
+
     let condition = columnName + " = '" + pSourceContactId + "'";
-    
+
     if(additionalCondition != "")
         condition += " and ( " + additionalCondition + ") ";
-    
+
     return [tableName, [columnName], null, [pTargetContactId], condition];
 }
 
@@ -1292,7 +1292,7 @@ _DuplicateScannerUtils._insertValuesInFilterTemplate = function(pJsonRootNode, p
             let fieldName = currentNode.name;
             let fieldValue = pEntitiyFieldAndValueMap[fieldName];
             pCountCharsOfValueToUse = parseInt(pCountCharsOfValueToUse, 10);
-            
+
             if(fieldValue == null)
             {
                 logging.log("Duplicate Scan: Requested value for field " + fieldName + " not present in the provided valueslist");
@@ -1304,7 +1304,7 @@ _DuplicateScannerUtils._insertValuesInFilterTemplate = function(pJsonRootNode, p
             {
                 fieldValue = fieldValue.substring(0, pCountCharsOfValueToUse);
             }
-            
+
             pJsonRootNode[filterChildNode].value = fieldValue;
         }
         else
@@ -1324,8 +1324,8 @@ _DuplicateScannerUtils._insertValuesInFilterTemplate = function(pJsonRootNode, p
  */
 _DuplicateScannerUtils._isValueLongerThanCharsToUse = function(pValueLength, pCountCharsOfValueToUse)
 {
-    return !isNaN(pCountCharsOfValueToUse) 
-            && pCountCharsOfValueToUse > 0 
+    return !isNaN(pCountCharsOfValueToUse)
+            && pCountCharsOfValueToUse > 0
             && pValueLength > pCountCharsOfValueToUse;
 }
 
@@ -1335,7 +1335,7 @@ _DuplicateScannerUtils._isValueLongerThanCharsToUse = function(pValueLength, pCo
  * @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) 
+_DuplicateScannerUtils._isNotNullAndANumber = function(pCountCharsOfValueToUse)
 {
     return pCountCharsOfValueToUse != null && !isNaN(pCountCharsOfValueToUse);
 }
\ No newline at end of file
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index 5bb71a3a699572a3336cd6913155d7c9eb7852b9..f870838b550a7d198873b652a2dfa51d233df63d 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -1,3 +1,5 @@
+import("MimeType_lib");
+import("Document_lib");
 import("system.logging");
 import("system.translate");
 import("system.text");
@@ -7,6 +9,7 @@ import("Communication_lib");
 import("DocumentTemplate_lib");
 import("system.neon");
 import("system.mail");
+import("Bulkmail_lib")
 
 function EmailWritingUtils () {}
 
@@ -20,15 +23,26 @@ function EmailWritingUtils () {}
  * @param {String} pSenderContactId contactId of the sender. the standard mailadress of the contact is used as sender-address
  * @param {String} [pTemplateId] if a document-template shall be used, give the templateId here
  * @param {String} [pRecipientContactId] contactId of the recipient, required to fill placeholders
+ * @param {String} [pBindata] base64 binary data
  * @return {Array} the eml document as array with [filename, base64]
  */
-EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId)
+EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId, pBindata)
 {
-    var email = new Email(pToRecipients);
-    if (pTemplateId)
-        email.setTemplate(pTemplateId, pRecipientContactId);
+    if (pToRecipients && typeof(pToRecipients) == "string")
+        pToRecipients = [pToRecipients];
+    
+    var email;
+    if (pTemplateId || pBindata)
+        email = Email.fromTemplate(pTemplateId, pRecipientContactId, pBindata)
+    else
+        email = new Email();
     email.setSender(pSenderContactId);
 
+    if (pToRecipients)
+        email.toRecipients = pToRecipients;
+   
+    email.bccRecipients = [EmailWritingUtils.getMailbridgeAddress()];
+
     return email.downloadEML();
 }
 
@@ -49,59 +63,96 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress)
     neon.openContext("Email", "EmailEdit_view", null, neon.OPERATINGSTATE_NEW, params);
 }
 
+EmailWritingUtils.getMailbridgeAddress = function ()
+{
+    return "mailbridge@domain.local"; //TODO: not hardcoded
+}
+
 /**
  * object for handling emails
- * 
- * @param {String|Array} [pToRecipients=[]] recipient email address or array of recipient email addresses
- * @param {String} [pSender=null] email address of the sender
- * @param {String} [pSubject=null] subject
- * @param {String} [pBody=null] mail body
- * @param {Array} [pCcRecipients=[]] array of recipient cc addresses
- * @param {Array} [pBccRecipients=[]] array of recipient bcc addresses
+ * @param {String} [pBody=null] if given, the body is set to this text
  * @class
  */
-function Email (pToRecipients, pSender, pSubject, pBody, pCcRecipients, pBccRecipients)
+function Email(pBody)
 {
-    if (pToRecipients && typeof(pToRecipients) == "string")
-        pToRecipients = [pToRecipients];
+    if (pBody == undefined) pBody = null;
     
-    this.sender = pSender;
-    this.subject = pSubject;
+    this.sender = null;
+    this.subject = null;
     this.body = pBody;
-    this.toRecipients = pToRecipients || [];
-    this.ccRecipients = pCcRecipients || [];
-    this.bccRecipients = pBccRecipients || [];
+    this.toRecipients = [];
+    this.ccRecipients = [];
+    this.bccRecipients = [];
+    this.attachmentTemplates = [];
+    this.emlFile = null;
 }
 
 /**
  * makes an Email object from a RFC
+ * NOTE: body is not editable if comming from a eml. Use it only for preview!
  * 
  * @param {String} pBase64RFC the RFC mail, base64 encoded
  * @return {Email} a new Email object
  */
 Email.fromRFC = function (pBase64RFC)
 {
-    var mailData = mail.parseRFC(util.decodeBase64String(pBase64RFC));
-    var body = mailData[mail.MAIL_HTMLTEXT];
-    var sender = mailData[mail.MAIL_SENDER];
-    var subject = mailData[mail.MAIL_SUBJECT];
-    
-    return new Email(null, sender, subject, body);
+    var decoded = util.decodeBase64String(pBase64RFC);
+    var mailData = mail.parseRFC(decoded);
+    var newMail = new Email(mailData[mail.MAIL_HTMLTEXT]);
+    newMail.subject = mailData[mail.MAIL_SUBJECT];
+    newMail.emlFile = decoded;
+    return newMail;
+}
+
+Email.fromTemplate = function (pTemplateId, pContactId, pBindata)
+{
+    var template;
+    if (pBindata && pBindata.isFilled())
+    {
+        if (BulkMailUtils.isValidMimeType(pBindata.mimeType))
+        {
+            template = new DocumentTemplate(pBindata.bindata, DocumentTemplate.types.fromMimeType(pBindata.mimeType), pBindata.filename, true);
+        }
+    }
+    else
+        template = DocumentTemplate.loadTemplate(pTemplateId);
+        
+    return Email.getReplacedBulkEmails(template, [pContactId])[pContactId];
 }
 
 /**
- * loads a document template into the mail body
+ * Replaces the placeholders with data from the contacts and returns the resulting Emails.
+ * @param {DocumentTemplate} pTemplate a document template which is used for all mails
+ * @param {Array} pContactIds Contact ids of all recipients
  * 
- * @param {String} pTemplateId the id of the template
- * @param {String} pContactId the id of the template
+ * @return {Object} Object containing the contact ids as keys and the corresponding Email
+ *                   objects as values 
  */
-Email.prototype.setTemplate = function (pTemplateId, pContactId)
+Email.getReplacedBulkEmails = function(pTemplate, pContactIds) 
 {
-    var template = DocumentTemplate.loadTemplate(pTemplateId);
-    var email = template.getReplacedEmailsByContactIds([pContactId])[pContactId];
-    this.sender = email.sender;
-    this.body = email.body;
-    this.subject = email.subject;
+    var emailObjects = {};
+    var isEML = pTemplate.type == DocumentTemplate.types.EML;
+    var emailContents = pTemplate.getReplacedContentByContactIds(pContactIds, isEML);
+    
+    for (contactId in emailContents)
+    {
+        if (isEML)
+        {
+            emailObjects[contactId] = Email.fromRFC(emailContents[contactId]);
+        }
+        else
+        {
+            // convert to HTML if needed
+            if (pTemplate.type == DocumentTemplate.types.TXT || pTemplate.type == DocumentTemplate.types.PLAIN)
+                emailContents[contactId] = text.text2html(emailContents[contactId], false);
+            
+            emailObjects[contactId] = new Email(emailContents[contactId]);
+        }
+
+        // adding the templates to each mail should be no memory-problem as it is only a reference to pTemplate._attachmentCache, so no problem here
+        emailObjects[contactId].attachmentTemplates = pTemplate.getAttachments();
+    }
+    return emailObjects;
 }
 
 /**
@@ -141,25 +192,24 @@ Email.prototype.getMailtoUrl = function ()
     return encodeURI(url);
 }
 
-/**
- * generates a eml-element from the email object
- */
-Email.prototype.getRFCmail = function ()
+Email.prototype._newMailObject = function()
 {
     var ENCODING = "UTF-8";
     var mailId;
-    try 
-    {
+    var emlFile = this.emlFile ? this.emlFile : null;
+        
+    if (emlFile)
+        mailId = mail.newMail(emlFile, mail.FORMAT_MIME);
+    else
         mailId = mail.newMail();
-    }
-    catch(ex)
+    
+    if (emlFile)
     {
-        //TODO: fix this dirty workaround [waiting for #1038963], since newMail causes an error on the first call after a user logged in
-        logging.log(ex);
-        util.sleep(1500);
-        mailId = mail.newMail();
+        mail.clearRecipients(mailId, mail.RECIPIENT_TO);
+        mail.clearRecipients(mailId, mail.RECIPIENT_CC);
+        mail.clearRecipients(mailId, mail.RECIPIENT_BCC);
     }
-
+    
     if (this.toRecipients.length)
         mail.addRecipients(mailId, mail.RECIPIENT_TO, this.toRecipients);
 
@@ -168,19 +218,38 @@ Email.prototype.getRFCmail = function ()
 
     if (this.bccRecipients.length)
         mail.addRecipients(mailId, mail.RECIPIENT_BCC, this.bccRecipients);
-
-    if (this.subject)
-        mail.setSubject(mailId, this.subject, ENCODING);
+        
+    mail.setSubject(mailId, this.subject || "", ENCODING);
+        
+    // only alter subject and text, if no eml is used
+    if (!emlFile)
+    {
+        if (this.body)
+            mail.addText(mailId, this.body, "text/html", ENCODING, null);
+        else
+            mail.addText(mailId, "", "text/html", ENCODING, null);
+    }
     
-    if (this.body)
-        mail.addText(mailId, this.body, "text/html", ENCODING, null);
-    else
-        mail.addText(mailId, "", "text/html", ENCODING, null);
+    this.attachmentTemplates.forEach(function(pAttachment)
+    {
+        mail.addBase64Attachment(mailId, pAttachment.content, DocumentTemplateUtils.getMimeType(pAttachment.templateId), pAttachment.filename, true, null);
+    });
+    
+    return mailId;
+}
+
+/**
+ * generates a eml-element from the email object
+ */
+Email.prototype.getRFCmail = function ()
+{
+    var ENCODING = "UTF-8";
+    var mailId = this._newMailObject()
     
     //"X-Unsent" is a very badly, non-standardised header to gently ask the mail client that the mail should open in a compose-mode
     //this is mainly done for Microsoft Outlook for Windows. 
     //Thunderbird has a dinosaur-request (it's from the year 2002) to also support this: https://bugzilla.mozilla.org/show_bug.cgi?id=166541 
-    mail.addHeader(mailId, "X-Unsent", "1");
+    //mail.addHeader(mailId, "X-Unsent", "1");
     
     //accoding to this entry: https://stackoverflow.com/questions/11330628/os-x-mail-open-eml-files-in-compose-mode/33224913
     //something similar exists for OS X Mail
@@ -188,7 +257,11 @@ Email.prototype.getRFCmail = function ()
     //this could be added later if needed
 
     var mailObj = mail.getCachedMail(mailId);
-    return mail.toRFC(mailObj);
+    var finalMail = mail.toRFC(mailObj);
+    
+    // remove from cache
+    mail.deleteMail(mailId)
+    return finalMail;
 }
 
 /**
@@ -215,8 +288,8 @@ Email.prototype.downloadEML = function ()
 /**
  * @return {String} RFC mail (base64 encoded)
  */
-Email.prototype.getEML = function()
-{
+Email.prototype.getEML = function ()
+{ 
     return util.encodeBase64String(this.getRFCmail(), null);
 }
 
@@ -227,43 +300,17 @@ Email.prototype.getEML = function()
  */
 Email.prototype.send = function (pUser)
 {
-    var ENCODING = "UTF-8";
-    var mailId;
     try
     {
-        try 
-        {
-            mailId = mail.newMail();
-        }
-        catch(ex)
-        {
-            //TODO: fix this dirty workaround [waiting for #1038963], since newMail causes an error on the first call after a user logged in
-            logging.log(ex);
-            util.sleep(1500);
-            mailId = mail.newMail();
-        }
+        mailId = this._newMailObject();
         
         if (this.sender)
             mail.setSender(mailId, this.sender);
-        
-        if (this.toRecipients.length)
-            mail.addRecipients(mailId, mail.RECIPIENT_TO, this.toRecipients);
-
-        if (this.ccRecipients.length)
-            mail.addRecipients(mailId, mail.RECIPIENT_CC, this.ccRecipients);
-
-        if (this.bccRecipients.length)
-            mail.addRecipients(mailId, mail.RECIPIENT_BCC, this.bccRecipients);
-
-        if (this.subject)
-            mail.setSubject(mailId, this.subject, ENCODING);
-
-        if (this.body)
-            mail.addText(mailId, this.body, "text/html", ENCODING, null);
-        else
-            mail.addText(mailId, "", "text/html", ENCODING, null);
     
-        return mail.sendMailAs(pUser || "mailbridge", mailId) > 0;
+        var sentMails = mail.sendMailAs(pUser || "mailbridge", mailId)
+        // remove from cache
+        mail.deleteMail(mailId)
+        return sentMails > 0;
     }
     catch (ex)
     {
diff --git a/process/Employee_lib/process.js b/process/Employee_lib/process.js
index 8b2729142c99c08b40186bf5b9aae89134bc8958..3702cc9561f22169e09ec71ea5f83587abb48934 100644
--- a/process/Employee_lib/process.js
+++ b/process/Employee_lib/process.js
@@ -49,6 +49,11 @@ EmployeeUtils.sliceUserId = function (pUserId)
     return pUserId.slice(-36);
 }
 
+EmployeeUtils.prefixUserId = function (pUserId)
+{
+    return "_____USER_" + pUserId;
+}
+
 /**
  * generates a username from the firstname and lastname with the given structure
  * 
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index e186510fadbb0ec51885d3e6cc7614715c3b294a..15acae96dcb79034c55ddace8cac74dc9a9f05d8 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -37,6 +37,8 @@ function ProcessHandlingUtils() {}
 /**
  * @deprecated THIS ERROR IS FIXED. YOU SHOULD USE vars.get("$local.value") DIRECTLY NOW
  *
+ * THIS ERROR IS FIXED. YOU SHOULD USE vars.get("$local.value") DIRECTLY NOW
+ * 
  * In onValidation-Process a local variable called "$local.value" is made available from kernel.
  * It contains the entered value - the field contains the value only after successfull validation (vars.get("$field.Fieldname")).
  * The onValidation-Process is running again before saving the entity, at this point there's "$local.value" varialbe no longer available,
diff --git a/process/IncomingCallExecutor_lib/process.js b/process/IncomingCallExecutor_lib/process.js
index ac21567d19fc3c9d4f98f7e425cb82031ef82ffa..dbbfdb150b18c7b1ae0b233cd5e2535060eb3b03 100644
--- a/process/IncomingCallExecutor_lib/process.js
+++ b/process/IncomingCallExecutor_lib/process.js
@@ -18,12 +18,14 @@ function IncomingCallExecutor(pCallData)
     this.callData.stateName = IncomingCallExecutor._callstateToText(this.callData.state);
     
     //collect contact and user data from *US*
-    this.contactsLocal = IncomingCallExecutor._getContactsFromNumber(this.callData.localAddress);
-    this.usersLocal = IncomingCallExecutor._getUsersFromContacts(this.contactsLocal);
+    this.contactsLocal = null;
+    this.usersLocal = null;
+    this.collectDataFromLocalInfo();
 
     //collect contact and user data from *THEM*
-    this.contactsCall = IncomingCallExecutor._getContactsFromNumber(this.callData.callAddress);
-    this.usersCall = IncomingCallExecutor._getUsersFromContacts(this.contactsCall);
+    this.contactsCall = null;
+    this.usersCall = null;
+    this.collectDataFromCallInfo();
     
     //key-value pairs of states-functions
     this._handlerFunctions = {};
@@ -55,6 +57,32 @@ IncomingCallExecutor.prototype.processPrivateData = function()
     }
 };
 
+IncomingCallExecutor.prototype.collectDataFromLocalInfo = function()
+{
+    this.usersLocal = [];
+    var users = tools.getUsersByAttribute(tools.PHONE_ADDRESS, [this.callData.localAddress], tools.PROFILE_DEFAULT);
+    var userContactIds = [];
+    
+    for (var i = 0, l = users.length; i < l; i++)
+    {
+        var user = users[i];
+        if (user[tools.PARAMS][tools.ISACTIVE] == "true")
+        {
+            this.usersLocal.push(user);
+            if (user[tools.PARAMS][tools.CONTACTID])
+                userContactIds.push(user[tools.PARAMS][tools.CONTACTID]);
+        }
+    }
+
+    this.contactsLocal = IncomingCallExecutor._getContactsFromNumber(null, userContactIds);
+};
+
+IncomingCallExecutor.prototype.collectDataFromCallInfo = function()
+{
+    this.contactsCall = IncomingCallExecutor._getContactsFromNumber(this.callData.callAddress);
+    this.usersCall = IncomingCallExecutor._getUsersFromContacts(this.contactsCall);
+};
+
 IncomingCallExecutor.prototype.logData = function()
 {
     logging.log("ctiServerEvents");
@@ -62,7 +90,7 @@ IncomingCallExecutor.prototype.logData = function()
     logging.log("contactsLocal>>" + JSON.stringify(this.contactsLocal));
     logging.log("usersLocal>>" + JSON.stringify(this.usersLocal));
     logging.log("contactsCall>>" + JSON.stringify(this.contactsCall));
-}
+};
 
 IncomingCallExecutor.prototype.getNotificationBaseConfig = function(pUserName)
 {
@@ -149,10 +177,10 @@ IncomingCallExecutor._callstateToText = function(pCallstate)
     return callstateName;
 };
 
-IncomingCallExecutor._getContactsFromNumber = function(pNumber)
+IncomingCallExecutor._getContactsFromNumber = function(pNumber, pContactIds)
 {
     var phoneNumber = pNumber;
-    if (!phoneNumber)
+    if (!phoneNumber && !pContactIds)
         return [];
     /*
     var config = entities.createConfigForLoadingRows().entity("Communication_entity")
@@ -172,12 +200,14 @@ IncomingCallExecutor._getContactsFromNumber = function(pNumber)
     */
     //load entities does not work here, so use instead a traditional sql-query:
     var contactSql = SqlCondition.begin()
-    .andPrepare("COMMUNICATION.ADDR", phoneNumber)
-    .andPrepare("CONTACT.STATUS", $KeywordRegistry.contactStatus$active())
-    .buildSql("select CONTACT.CONTACTID, CONTACT.ORGANISATION_ID, ORGANISATION.NAME, CONTACT.PERSON_ID, CONTACT.ISOLANGUAGE, PERSON.LASTNAME, PERSON.FIRSTNAME from CONTACT \n\
-                            join ORGANISATION on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID \n\
-                            left join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID \n\
-                            join COMMUNICATION on COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID");
+                                 .andPrepareIfSet("COMMUNICATION.ADDR", phoneNumber)
+                                 .andIn("COMMUNICATION.CONTACT_ID", pContactIds)//this is automatically only added if pContactIds is truely
+                                 .andPrepare("CONTACT.STATUS", $KeywordRegistry.contactStatus$active())
+                                 .buildSql("select CONTACT.CONTACTID, CONTACT.ORGANISATION_ID, ORGANISATION.NAME, CONTACT.PERSON_ID, \n\
+                                                   CONTACT.ISOLANGUAGE, PERSON.LASTNAME, PERSON.FIRSTNAME from CONTACT \n\
+                                          join ORGANISATION on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID \n\
+                                          left join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID \n\
+                                          join COMMUNICATION on COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID");
 
     var contacts = db.table(contactSql);
     
@@ -219,12 +249,16 @@ IncomingCallExecutor.prototype.getLocaleFromUser = function(pUserObject)
 
 IncomingCallExecutor.prototype.getFormattedLocalAddress = function()
 {
-    return this.callData.localAddress;
+    return IncomingCallExecutor.formatAddress(this.callData.localAddress);
 }
 
 
 IncomingCallExecutor.prototype.getFormattedCallAddress = function()
 {
-    return this.callData.callAddress;
+    return IncomingCallExecutor.formatAddress(this.callData.callAddress);
 }
 
+IncomingCallExecutor.formatAddress = function (pAddress)
+{
+    return cti.formatPhoneNumber(pAddress.replace(/P?J?SIP\//, ""), true, null);
+}
diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js
index 096ef3111e2f05371f5de193cb0a165db89d412b..d77eba0b91df6718f22d1e498658ae2108be0e7f 100644
--- a/process/IncomingEmailExecutor_lib/process.js
+++ b/process/IncomingEmailExecutor_lib/process.js
@@ -1,3 +1,5 @@
+import("system.translate");
+import("Keyword_lib");
 import("EmailUtil_lib");
 import("Util_lib");
 import("system.question");
@@ -20,6 +22,7 @@ function IncomingEmailExecutor(pMail)
     //whenver this function is called it may not be in a context where a alias is given: the mail-importing-entity for example has no alias. 
     //therefore set it here manually
     this._alias = null;
+    this.locale = null;//this is maybe set later when determining an affected user for history
     this.setAlias();
     this.rawMail = pMail;
     this.mailSubject = this.rawMail[mail.MAIL_SUBJECT] || "";
@@ -47,26 +50,75 @@ function IncomingEmailExecutor(pMail)
     };
 }
 
-IncomingEmailExecutor.prototype.setActivityEmployeeContactId = function (pId)
+IncomingEmailExecutor.prototype.setActivityEmployeeContact = function (pContactId, pLanguageIso3, pSetAsFailback)
 {
-    this.activityData.employeeContactId = pId;
-};
+    //autodetect language if not given
+    if (pLanguageIso3 == undefined)
+    {
+        var langSql = SqlCondition.begin(this._alias)
+                                  .andPrepare("CONTACT.CONTACTID", pContactId)
+                                  .buildSql("select CONTACT.ISOLANGUAGE from CONTACT");
+        var lang = db.cell(langSql, this._alias);
+        if (lang)
+            pLanguageIso3 = lang;
+    }
+
+    if (pSetAsFailback)
+    {
+        this.failbackActivityData.employeeContactId = pContactId;
+        this.failbackActivityData.employeeContactLanguage = pLanguageIso3;
+    }
+    else
+    {
+        this.activityData.employeeContactId = pContactId;
+        this.activityData.employeeContactLanguage = pLanguageIso3;
+    }
+}
 
 IncomingEmailExecutor.prototype.setAlias = function(pAlias)
 {
     this._alias = pAlias || db.getCurrentAlias();
-};
+}
 
 IncomingEmailExecutor.prototype.getMailtextAsHtml = function()
 {
-    var htmlMailText = this.rawMail[mail.MAIL_ATTACHMENTCOUNT] + " Attachement(s)<br/><br/>\n";
+    var textInfos = [
+        translate.withArguments("Sender: %0", [this.rawMail[mail.MAIL_SENDER]], this.locale),
+        translate.withArguments("Recipients: %0", [this.mailRecipients.join(", ")], this.locale)
+    ]; 
+
+    var attachmentInfos = mail.getAttachmentInfos(this.rawMail);
+    var attachmentCount = attachmentInfos.length;
+    if (attachmentCount == 0)
+        textInfos.push(translate.text("no attachments", this.locale));
+    else
+    {
+        if (attachmentCount == 1)
+            textInfos.push(translate.withArguments("%0 attachment:", [attachmentCount], this.locale));
+        else
+            textInfos.push(translate.withArguments("%0 attachments:", [attachmentCount], this.locale));
+
+        var attachmentHtml = "";
+        var fileName;
+        for (var i = 0; i < attachmentCount; i++)
+        {
+            //don't use a <ul><li.......</ul> here since it does not look good in the client
+            [fileName] = text.decodeMS(attachmentInfos[i]);
+            attachmentHtml += "\n" + (i > 0 ? "<br/>" : "") + "&#x25CF; " + fileName;
+        }
+        textInfos.push(attachmentHtml);
+    }
+
     //since the activity has always and only a HTML-content-field we need to ensure that there will be always a HTML-content
     if (this.rawMail[mail.MAIL_HTMLTEXT])
-        htmlMailText += this.rawMail[mail.MAIL_HTMLTEXT];
+        textInfos.push("<br/>\n" + this.rawMail[mail.MAIL_HTMLTEXT]);
     else
-        htmlMailText += text.text2html(this.rawMail[mail.MAIL_TEXT], true);
-    return htmlMailText;
-};
+        textInfos.push("<br/>\n" + text.text2html(this.rawMail[mail.MAIL_TEXT], true));
+    
+    var res = textInfos.join("<br/>\n");
+    return res;
+}
+
 
 IncomingEmailExecutor.prototype.getSenderInfo = function()
 {
@@ -85,7 +137,7 @@ IncomingEmailExecutor.prototype.insertUnlinkedMail = function ()
     return {
         unlinkedMailId: unlinkedMailId
     };
-};
+}
 
 IncomingEmailExecutor.prototype.isUnlinkable = function ()
 {
@@ -97,12 +149,12 @@ IncomingEmailExecutor.getContactDataByEmail = function (pMailAddress, pAlias)
     var mailAddress = EmailUtils.extractAddress(pMailAddress).toUpperCase();
     var sql = SqlCondition.begin(pAlias)
     .andPrepare("COMMUNICATION.ADDR", mailAddress, "upper(#) = ?")
-    .buildSql("select CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID \n\
+    .buildSql("select CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID, CONTACT.ISOLANGUAGE \n\
                                                         from COMMUNICATION \n\
                                                         join CONTACT on (COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID)");
     var res = db.table(sql, pAlias);
     return res;
-};
+}
 
 IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks)
 {
@@ -125,6 +177,15 @@ IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks)
         this.activityData.links = this.activityData.links.concat(recipientContacts.prefered.length > 0 ? recipientContacts.prefered : recipientContacts.failback);
     }
 
+    var langIso3 = this.activityData.employeeContactLanguage || this.failbackActivityData.employeeContactLanguage;
+    var langIso2;
+    if (langIso3)
+    {
+        langIso2 = LanguageKeywordUtils.Iso2FromIso3(langIso3, this._alias);
+        if (langIso2)
+            this.locale = langIso2;
+    }
+
     //collecting all the information and combine it for the creation
     var activityDataForInsert = {
         subject: this.mailSubject,
@@ -141,7 +202,7 @@ IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks)
     
     var activityRes = ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, activityDocs, this._alias);
     return activityRes;
-};
+}
 
 IncomingEmailExecutor.prototype.deleteUnlinkedMail = function (pUnlinkedMailId)
 {
@@ -149,7 +210,7 @@ IncomingEmailExecutor.prototype.deleteUnlinkedMail = function (pUnlinkedMailId)
     {
         db.deleteData("AB_UNLINKEDMAIL", SqlCondition.begin().andPrepare("AB_UNLINKEDMAIL.AB_UNLINKEDMAILID", pUnlinkedMailId).build(), this._alias);
     }
-};
+}
 
 IncomingEmailExecutor.prototype.autoProcess = function(pUnlinkedMailId)
 {
@@ -166,13 +227,13 @@ IncomingEmailExecutor.prototype.autoProcess = function(pUnlinkedMailId)
     var activityRes = this.createActivity();
     this.deleteUnlinkedMail(pUnlinkedMailId);
     return activityRes;
-};
+}
 
 IncomingEmailExecutor.prototype._getProcessingFunction = function (pIsSender, pTargetArray)
 {
     return function(contactInfoRow) {
-        var contactId, contactStatus, contactPersonId;
-        [contactId, contactStatus, contactPersonId] = contactInfoRow;
+        var contactId, contactStatus, contactPersonId, languageIso3;
+        [contactId, contactStatus, contactPersonId, languageIso3] = contactInfoRow;
         
         //there *should* only exist no or one user per contactid, never two or more - so getUser (not getUsers) should be fine
         var user = tools.getUserByAttribute(tools.CONTACTID, [contactId]);
@@ -185,13 +246,13 @@ IncomingEmailExecutor.prototype._getProcessingFunction = function (pIsSender, pT
             var direction = pIsSender ? $KeywordRegistry.activityDirection$outgoing() : $KeywordRegistry.activityDirection$incoming();
             if (isContactActive)
             {
-                this.activityData.employeeContactId = contactId;
+                this.setActivityEmployeeContact(contactId, languageIso3);
                 this.activityData.direction = direction;
             }
             else
             {
                 //if the user is inactive, we may find a better (=active) user later
-                this.failbackActivityData.employeeContactId = contactId;
+                this.setActivityEmployeeContact(contactId, languageIso3, true);
                 this.failbackActivityData.direction = direction;
             }    
         }
@@ -204,4 +265,4 @@ IncomingEmailExecutor.prototype._getProcessingFunction = function (pIsSender, pT
                 pTargetArray["failback"].push(link);
         }
     };
-};
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js
index a7c0e93f06d11f278a3bc2d3e210249323e8de80..60b1ab269f24bf7a1b3c33d92d7a6d8d2733d3db 100644
--- a/process/JditoFilter_lib/process.js
+++ b/process/JditoFilter_lib/process.js
@@ -9,19 +9,26 @@ var JditoFilterUtils = (function ()
  * 
  * @param {Array} pColumns the column names
  * @param {Object} pFilter the filter object
+ * @param {Object} pCustomCheckFns
+ * @param {Object} pCheckFnThisArg
  * 
  * @private
  */
-function JditoFilterHelper (pColumns, pFilter) 
+function JditoFilterHelper (pColumns, pFilter, pCustomCheckFns, pCheckFnThisArg) 
 {
     var columnMap = {};
     for (let i = 0, l = pColumns.length; i < l; i++)
     {
-        if (pColumns[i])
-            columnMap[pColumns[i]] = i;
+        let col = pColumns[i];
+        if (col)
+            columnMap[col] = {
+                index : i,
+                checkFn : pCustomCheckFns[col]
+            };
     }
-    this._columnMap = columnMap;
-    this._filter = pFilter;
+    this.columnMap = columnMap;
+    this.filter = pFilter;
+    this.checkFnThisArg = pCheckFnThisArg || null;
 }
 
 /**
@@ -33,10 +40,10 @@ function JditoFilterHelper (pColumns, pFilter)
  */
 JditoFilterHelper.prototype.checkRecord = function (pRow)
 {
-    if (this._filter.length == 0)
+    if (this.filter.length == 0)
         return true;
     
-    return _testRecord.call(this, this._filter);
+    return _testRecord.call(this, this.filter);
     
     /**
      * recursive function to test the row against the condition
@@ -45,8 +52,9 @@ JditoFilterHelper.prototype.checkRecord = function (pRow)
     {
         if (pCondition.type == "row")
         {
-            let value = pRow[this._columnMap[pCondition.name]];
-            return _testValue(value, (pCondition.key || pCondition.value), pCondition.operator);
+            let value = pRow[this.columnMap[pCondition.name].index];
+            let testFn = this.columnMap[pCondition.name].checkFn || _testValue;
+            return testFn.call(this.checkFnThisArg, value, (pCondition.key || pCondition.value), pCondition.operator, pRow);
         }
         else if (pCondition.type == "group")
         {
@@ -130,15 +138,19 @@ JditoFilterUtils.getFilterFields = function (pFilterJsonRootNode)
  *                          the order has to match the columns of the recordFields property in the recordcontainer
  * @param {Array} pRecords two dimensional array with all records
  * @param {String|Object} pFilter the value of vars.get($local.filter).filter
+ * @param {Object} [pCustomCheckFns] Object of custom functions that should be used to ckeck records. The key has to be the name of the fields you want to
+ *          check. The provided function will be called with the arguments (recordValue, filterValue, operator, record) and should return a boolean (or something truthy or falsy).
+ * @param {Object} [pCheckFnThisArg] The object that should be the this-context when the custom check functions are called. This can be useful if you
+ *          need some kind of storage for extra data you need in your function that you don't have to load for every record.
  * 
  * @return {Array} the filtered records
  */
-JditoFilterUtils.filterRecords = function (pColumns, pRecords, pFilter)
+JditoFilterUtils.filterRecords = function (pColumns, pRecords, pFilter, pCustomCheckFns, pCheckFnThisArg)
 {
     if (!pFilter)
         return pRecords;
     
-    var filter = new JditoFilterHelper(pColumns, pFilter);
+    var filter = new JditoFilterHelper(pColumns, pFilter, pCustomCheckFns, pCheckFnThisArg);
     
     return pRecords.filter(function (row)
         {
@@ -152,11 +164,17 @@ JditoFilterUtils.filterRecords = function (pColumns, pRecords, pFilter)
  * @param {Object} pFilter the filter object
  * @param {String} pTable the database table
  * @param {String} [pTableAlias=null] the database table alias
- * @param {Object} [pColumnMap=null] Custom mapping for the fields to the DB columns, this is necessary
+ * @param {Object} [pColumnOrFnMap=null] Custom mapping for the fields to the DB columns or functions that return a SqlCondition, this is necessary
  *      if the fields are from different tables. Structure has to be like this:
  *      {
  *          FIELD1 : "TABLE1.COLUMN1",
- *          FIELD2 : ["TABLE2", "COLUMN2", "TABLE2ALIAS"] //do it like this if the table has an alias
+ *          FIELD2 : ["TABLE2", "COLUMN2", "TABLE2ALIAS"], //do it like this if the table has an alias
+ *          FIELD3 : function (pValue, pOperator)          //function if you need to build a special condition
+ *          {
+ *              var cond = new SqlCondition();
+ *              ...
+ *              return cond;
+ *          }
  *      }
  *      
  * @example
@@ -171,14 +189,14 @@ JditoFilterUtils.filterRecords = function (pColumns, pRecords, pFilter)
  * 
  * @return {SqlCondition} the SqlCondition object
  */
-JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColumnMap)
+JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColumnOrFnMap)
 {
     var condition = new SqlCondition();
     
     if (!pFilter)
         return condition;
-    if (!pColumnMap)
-        pColumnMap = {};
+    if (!pColumnOrFnMap)
+        pColumnOrFnMap = {};
     
     _addCondition.call(condition, pFilter, pFilter.operator);
     
@@ -190,19 +208,32 @@ JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColu
     {
         if (pCondition.type == "row")
         {
-            if (pCondition.name in pColumnMap)
-                pCondition.name = pColumnMap[pCondition.name];
+            if (pCondition.name in pColumnOrFnMap)
+                pCondition.name = pColumnOrFnMap[pCondition.name];
             else if (pTable && pTableAlias)
                 pCondition.name = [pTable, pCondition.name, pTableAlias];
             else if (pTable)
                 pCondition.name = pTable + "." + pCondition.name;
             
             pCondition.value = (pCondition.key || pCondition.value);
-            var condition = _getCondition.call(pCondition);
-            if (pOperator == "AND")
-                this.andPrepare(pCondition.name, pCondition.value, condition);
-            else if (pOperator == "OR")
-                this.orPrepare(pCondition.name, pCondition.value, condition);
+            
+            var condition;
+            if (typeof(pCondition.name) === "function")
+            {
+                condition = pCondition.name.call(null, pCondition.value, pCondition.operator);
+                if (pOperator == "AND")
+                    this.andSqlCondition(condition);
+                else if (pOperator == "OR")
+                    this.orSqlCondition(condition);
+            }
+            else
+            {
+                condition = _getCondition.call(pCondition, pCondition.value, pCondition.operator);
+                if (pOperator == "AND")
+                    this.andPrepare(pCondition.name, pCondition.value, condition);
+                else if (pOperator == "OR")
+                    this.orPrepare(pCondition.name, pCondition.value, condition);
+            }
         }
         else if (pCondition.type == "group")
         {
@@ -221,21 +252,21 @@ JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColu
     
     //returns the condition depending on the operator and 
     //adds wildcards to the value if necessary
-    function _getCondition ()
+    function _getCondition (pValue, pOperator)
     {
-        switch (this.operator)
+        switch (pOperator)
         {
             case "CONTAINS":
-                this.value = "%" + this.value + "%";
+                this.value = "%" + pValue + "%";
                 return "# like ?";
             case "CONTAINSNOT":
-                this.value = "%" + this.value + "%";
+                this.value = "%" + pValue + "%";
                 return "# not like ?";
             case "STARTSWITH":
-                this.value = this.value + "%";
+                this.value = pValue + "%";
                 return "# like ?";
             case "ENDSWITH":
-                this.value = "%" + this.value;
+                this.value = "%" + pValue;
                 return "# like ?";
             case "EQUAL":
                 return "# = ?";
diff --git a/process/KeywordData_lib/process.js b/process/KeywordData_lib/process.js
index 930d056393a8989f28842af3307d707754773264..3eb97115b302f01e8bbc722a9ad93bb8f19dc631 100644
--- a/process/KeywordData_lib/process.js
+++ b/process/KeywordData_lib/process.js
@@ -113,18 +113,20 @@ LanguageData.getData = function()
     });
 };
 
-LanguageData.getIso3Map = function(pLocale)
+LanguageData.getIso3Map = function(pLocale, pAlias)
 {
-    var cache = new CachedData("LanguagesISO3Map", true, pLocale);
-    return cache.load(function (pTranslationNecessary, pLocale){
-        var data = db.table("select AB_LANGUAGE.ISO3, AB_LANGUAGE.NAME_LATIN from AB_LANGUAGE");
+    var dbAlias = pAlias || db.getCurrentAlias();
+    var cache = new CachedData("LanguagesISO3Map", true, pLocale, dbAlias);
+    var cachedData = cache.load(function (pTranslationNecessary, pLocale, pAlias){
+        var data = db.table("select AB_LANGUAGE.ISO3, AB_LANGUAGE.ISO2, AB_LANGUAGE.NAME_LATIN from AB_LANGUAGE", pAlias);
         var res = {};
-        var iso3, countryName;
+        var iso3, iso2, countryName;
         for (var i = 0, l = data.length; i < l; i++)
         {
-            [iso3, countryName] = data[i];
-            res[iso3] = translate.text(countryName, pLocale);
+            [iso3, iso2, countryName] = data[i];
+            res[iso3] = {name: translate.text(countryName, pLocale), iso2: iso2};
         }
         return res;
     });
+    return cachedData;
 };
\ No newline at end of file
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index dc11d8a098008e549a1fd82b93da0ebbf791ec37..f3db5255815df2c575c3419e6267213f8181bdac 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -146,12 +146,14 @@ $KeywordRegistry.campaignStepCostCategory = function(){return "CampaignManagemen
 
 $KeywordRegistry.documentTemplateType = function(){return "DocumentTemplateType";};
 $KeywordRegistry.documentTemplateType$letter = function(){return $KeywordRegistry._autoPad("LET");};
+$KeywordRegistry.documentTemplateType$textModular = function(){return $KeywordRegistry._autoPad("TEX");};
 $KeywordRegistry.documentTemplateType$mail = function(){return $KeywordRegistry._autoPad("MAI");};
 $KeywordRegistry.documentTemplateType$attachment = function(){return $KeywordRegistry._autoPad("ATT");};
 
 $KeywordRegistry.documentTemplateTypeCategory = function(){return "DocumentTemplateTypeCategory";};
 $KeywordRegistry.documentTemplateTypeCategory$single = function(){return $KeywordRegistry._autoPad("1");};
 $KeywordRegistry.documentTemplateTypeCategory$serial = function(){return $KeywordRegistry._autoPad("2");};
+$KeywordRegistry.documentTemplateTypeCategory$htmlTemplate = function(){return $KeywordRegistry._autoPad("7");};
 
 $KeywordRegistry.classificationType = function(){return "ClassificationType";};
 $KeywordRegistry.classificationType$salesproject = function(){return $KeywordRegistry._autoPad("SALESPROJ");};
@@ -212,4 +214,6 @@ $KeywordRegistry.orderType$deliverynote = function(){return $KeywordRegistry._au
 $KeywordRegistry.orderType$invoice = function(){return $KeywordRegistry._autoPad("ORDTYPEINVO");};
 $KeywordRegistry.orderType$credit = function(){return $KeywordRegistry._autoPad("ORDTYPECRED");};
 $KeywordRegistry.orderType$cancellation = function(){return $KeywordRegistry._autoPad("ORDTYPECANC");};
-$KeywordRegistry.dunningLevel = function(){return "DunningLevel";};
\ No newline at end of file
+$KeywordRegistry.dunningLevel = function(){return "DunningLevel";};
+
+$KeywordRegistry.bulkMailProblem = function(){return "BulkMailProblem";};
\ No newline at end of file
diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js
index f0fd2438cb04e50991413362f85f97be8915c96f..cdee4d4334482080ddca333405ec150b1bc823e3 100644
--- a/process/Keyword_lib/process.js
+++ b/process/Keyword_lib/process.js
@@ -27,7 +27,7 @@ KeywordUtils.getResolvedTitleSqlPart = function(pContainerName, pDbFieldName, pL
 {
     var keywordData = KeywordData.getSimpleData(pContainerName, pLocale);
     var resSql = SqlUtils.getResolvingCaseWhen(keywordData, pDbFieldName, pLocale);
-    return db.translateStatement(resSql);
+    return SqlUtils.translateStatementWithQuotes(resSql);
 };
 
 /**
@@ -305,7 +305,7 @@ LanguageKeywordUtils.getResolvedTitleSqlPart = function(pDbFieldName, pLocale)
 {
     var data = LanguageData.getData();
     var resSql = SqlUtils.getResolvingCaseWhen(data, pDbFieldName, pLocale);
-    return db.translateStatement(resSql);
+    return SqlUtils.translateStatementWithQuotes(resSql);
 };
 
 /**
@@ -323,8 +323,36 @@ LanguageKeywordUtils.getViewValue = function(key, locale)
         return "";
     
     var languageMap = LanguageData.getIso3Map(locale);
-    var title = languageMap[key];
+    var languageInfo = languageMap[key];
+    if (languageInfo == undefined)
+        return "";
+    var title = languageInfo.name;
     if (title == undefined)
         return "";
     return title;
+};
+
+/**
+ * deterines on server- and clientside the matching iso2-code to a iso3 by generating a map and then returning the matched result; 
+ * on clientside the map is cached
+ * 
+ * @param {String} key id value (iso3) of the language where the value shall be searched
+ * @param {String} [pAlias=the current alias] the database alias where the information shall be retrieved
+ *
+ * @return {String} iso2 or "" when nothing was found
+ * 
+ */
+LanguageKeywordUtils.Iso2FromIso3 = function(key, pAlias)
+{
+    if (!key)
+        return "";
+    //maybe this should be retrieved by a simple select on the serverside since LanguageData-methods are only cached on the client side
+    var languageMap = LanguageData.getIso3Map(null, pAlias);
+    var languageInfo = languageMap[key];
+    if (languageInfo == undefined)
+        return "";
+    var res = languageInfo.iso2;
+    if (res == undefined)
+        return "";
+    return res;
 };
\ No newline at end of file
diff --git a/process/Liquibase_lib/process.js b/process/Liquibase_lib/process.js
index f7656297bf61248f10f6e4f97f3ae7184ddd907d..a885c6706d403e86ccb668c3a1c5b8c0f4556cf6 100644
--- a/process/Liquibase_lib/process.js
+++ b/process/Liquibase_lib/process.js
@@ -1,3 +1,4 @@
+import("system.text");
 import("system.translate");
 import("Util_lib");
 import("system.fileIO");
@@ -27,25 +28,31 @@ function LiquiUtils(){}
 *                                       note that the liquibase tables "DATABASECHANGELOG" and "DATABASECHANGELOGLOCK" will never be exported
 *                                       (regardless of what you specify here)
 * @param {Boolean} [pIncludeClearTableDirective=false] if true, a delete element is added at the beginning of the changeset for the table
+* @param {Boolean} [pGenerateChangeSetIdFromArguments=false] if true the id of the changeset will be generated by the passed arguments to this function
 *
-* @return void
+* @return {Object} returns an object that has currently only one property<br/>- exportedTables:Array of tableNames that have been exported
+* 
 *
 */
-LiquiUtils.exportAllTablesAsLiquibaseFiles = function(pOutFolderPath, pAuthor, pAlias, pExcludedTables, pIncludeClearTableDirective)
+LiquiUtils.exportAllTablesAsLiquibaseFiles = function(pOutFolderPath, pAuthor, pAlias, pExcludedTables, pIncludeClearTableDirective, pGenerateChangeSetIdFromArguments)
 {
     var excludedTables = ["DATABASECHANGELOG", "DATABASECHANGELOGLOCK"];//liquibase-tables - therefor they shall never be included
     if (pExcludedTables)
         excludedTables = excludedTables.concat(pExcludedTables);
     var alias = pAlias || db.getCurrentAlias();
     var tables = db.getTables(alias);
+    var exportedTables = [];
     for (var i = 0, l = tables.length; i < l; i++) 
     {
         if (ArrayUtils.hasElement(excludedTables, tables[i], true))
             continue;
 
         var cond = null;
-        LiquiUtils.exportTableAsLiquibaseFiles(pOutFolderPath, tables[i], null, cond, pAuthor, pIncludeClearTableDirective, alias);
+        var res = LiquiUtils.exportTableAsLiquibaseFiles(pOutFolderPath, tables[i], null, cond, pAuthor, pIncludeClearTableDirective, alias, pGenerateChangeSetIdFromArguments);
+        if (res.exported)
+            exportedTables.push(tables[i]);
     }
+    return {exportedTables: exportedTables}
 };
 
 /**
@@ -59,19 +66,20 @@ LiquiUtils.exportAllTablesAsLiquibaseFiles = function(pOutFolderPath, pAuthor, p
 * @param {String} [pAuthor="autogenerated"] author that will be written into the liquibase-changeset
 * @param {Boolean} [pIncludeClearTableDirective=false] if true, a delete element is added at the beginning of the changeset for the table
 * @param {String} [pAlias=current db-alias] alias where the data will be loaded from
+* @param {Boolean} [pGenerateChangeSetIdFromArguments=false] if true the id of the changeset will be generated by the passed arguments to this function
 *
-* @return {null} returns currently always null
+* @return {Object} returns an object that has currently only one property<br/>- exported:boolean if the table has been exported or not
 */
-LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, pCondition, pAuthor, pIncludeClearTableDirective, pAlias)
+LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, pCondition, pAuthor, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments)
 {
-    var resXml = LiquiUtils._getDataXml(pAuthor, pPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias);
+    var resXml = LiquiUtils._getDataXml(pAuthor, pPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments);
     if (resXml == "")
-        return null;
+        return {exported: false};
     
     fileIO.mkdir(pPath, true);
     var fullFileName = pPath += "/" + pTableName + ".xml";
     fileIO.storeData(fullFileName, resXml, util.DATA_TEXT, false, "UTF8");
-    return null;
+    return {exported: true};
 };
 
 /**
@@ -88,15 +96,16 @@ LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, p
 * @param {String} [pCondition=none] db-condition to limit the data that will be exported; if nothing given the whole content will be exported
 * @param {Boolean} [pIncludeClearTableDirective=false] if true, a delete element is added at the beginning of the changeset for the table
 * @param {String} [pAlias=current db-alias] alias where the data will be loaded from
+* @param {Boolean} [pGenerateChangeSetIdFromArguments=false] if true the id of the changeset will be generated by the passed arguments to this function
 *
 * @return {String} the liquibase-changest in xml-form
 */
-LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias) 
+LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments) 
 {
     var author = pAuthor || "autogenerated";
     var alias = pAlias || db.getCurrentAlias();
     //cannot be added within jdito code to the XML-object, so instead add it as string
-    var XML_HEADER_LINE= '<?xml version="1.1" encoding="UTF-8" standalone="no"?>';
+    var XML_HEADER_LINE = LiquiXmlUtils.xmlHeaderLineStr();
     
     var columns = pColumns || db.getColumns(pTableName, alias);
     var dbData = db.table("select " + columns.join(", ") + " from " + pTableName + " " + (pCondition ? "where " + pCondition : ""), alias);
@@ -128,7 +137,16 @@ LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCond
     });
     var columnLen = columns.length;
 
-    var changeLogXml = LiquiXmlUtils.databaseChangeLog(author);
+    var changesetId;
+    if (pGenerateChangeSetIdFromArguments)
+    {
+        changesetId = Array.prototype.slice.call(arguments);//todo: use Array.from instead when supported (>= rhino 1.7.11)
+        changesetId = changesetId.reduce(function (accumulator, currentValue){
+            return (currentValue !== null && currentValue !== undefined ? accumulator + JSON.stringify(currentValue) : accumulator);
+        }, "");
+        changesetId = text.hash(changesetId, text.HASH_MD5);
+    }//or otherwise is the changesetId automatically generated within the databaseChangeLogWithChangeSet function
+    var changeLogXml = LiquiXmlUtils.databaseChangeLogWithChangeSet(author, changesetId);
     if (pIncludeClearTableDirective)
         changeLogXml.changeSet.appendChild(<delete tableName={pTableName}/>);
     dbData.forEach(function(row)
@@ -158,16 +176,23 @@ LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCond
  */
 function LiquiXmlUtils(){}
 
-
 //TODO: comments
-LiquiXmlUtils.databaseChangeLog = function (pAuthor, pChangeSetId)
+LiquiXmlUtils.xmlHeaderLineStr = function()
+{
+    return '<?xml version="1.1" encoding="UTF-8" standalone="no"?>';
+};
+
+LiquiXmlUtils.databaseChangeLog = function ()
+{
+    return <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"/>;
+};
+
+LiquiXmlUtils.databaseChangeLogWithChangeSet = function (pAuthor, pChangeSetId)
 {
     if (pChangeSetId == undefined)
         pChangeSetId = util.getNewUUID();
-    var dbcl = <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"/>
-        ;
-        
+    var dbcl = LiquiXmlUtils.databaseChangeLog();
     dbcl.changeSet = <changeSet author={pAuthor} id={pChangeSetId} />;
     return dbcl;
 };
@@ -274,7 +299,7 @@ LiquiXTable.prototype.addClobCol = function (pColName, pValue)
             throw new Error(translate.withArguments("[%0]it was necessary to create a text-file from a clob-field but no lob-file-path was specified."
                     + "The lob-file-path is required when adding long clob-values. value length was %1.", ["LiquiXTable addClobCol", pValue.length]));
         var relativeFolderPath = this._name + "/" + pColName + "/clobFiles/";
-        var fileName = util.getNewUUID() + ".txt";
+        var fileName = text.hash(pValue, text.HASH_MD5) + ".txt";
         fileIO.mkdir(lobBasePath + relativeFolderPath, true);
         fileIO.storeData(lobBasePath + relativeFolderPath + fileName, pValue, util.DATA_TEXT, false, "UTF8");
         return this.appendIfNotNull(LiquiXmlUtils.colValue(pColName, relativeFolderPath + fileName, "valueClobFile"));
@@ -290,7 +315,7 @@ LiquiXTable.prototype.addBlobCol = function (pColName, pValue)
             throw new Error(translate.withArguments("[%0]it was necessary to create a file from a blob-field but no lob-file-path was specified."
                 + "The lob-file-path is required when adding blob-values.", ["LiquiXTable addClobCol"]));
     var relativeFolderPath = this._name + "/" + pColName + "/blobFiles/";
-    var fileName = util.getNewUUID();
+    var fileName = text.hash(pValue, text.HASH_MD5);
     fileIO.mkdir(lobBasePath + relativeFolderPath, true);
     fileIO.storeData(lobBasePath + relativeFolderPath + fileName, pValue, util.DATA_BINARY, false);
     return this.appendIfNotNull(LiquiXmlUtils.colValue(pColName, relativeFolderPath + fileName, "valueBlobFile"));
diff --git a/process/runIndexer_ws/runIndexer_ws.aod b/process/Location_lib/Location_lib.aod
similarity index 58%
rename from process/runIndexer_ws/runIndexer_ws.aod
rename to process/Location_lib/Location_lib.aod
index db6e61aec93c39e7a721a23b9c3378a69beb6adb..1a9a229f653f16af767f0c6193958ec831ea120c 100644
--- a/process/runIndexer_ws/runIndexer_ws.aod
+++ b/process/Location_lib/Location_lib.aod
@@ -1,14 +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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
-  <name>runIndexer_ws</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <process>%aditoprj%/process/runIndexer_ws/process.js</process>
-  <publishAsWebservice v="true" />
-  <style>REST</style>
-  <loginTypeId>internal.none</loginTypeId>
-  <restrictedRoles />
-  <alias>Data_alias</alias>
-  <variants>
-    <element>LIBRARY</element>
-  </variants>
-</process>
+<?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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>Location_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/Location_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/Location_lib/process.js b/process/Location_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c24f993ced1f9e5df6705430247784ea0ee6680
--- /dev/null
+++ b/process/Location_lib/process.js
@@ -0,0 +1,187 @@
+import("Util_lib");
+import("system.eMath");
+
+function GeoLocationUtils () {}
+
+/**
+ * average earth radius in kilometres
+ */
+GeoLocationUtils.EARTH_RADIUS_AVG = function ()
+{
+    return 6371.001;
+}
+
+/**
+ * earth radius at the equator in kilometres
+ */
+GeoLocationUtils.EARTH_RADIUS_EQUATOR = function ()
+{
+    return 6378.137;
+}
+
+/**
+ * earth radius at the poles in kilometres
+ */
+GeoLocationUtils.EARTH_RADIUS_POLES = function ()
+{
+    return 6356.752;
+}
+
+/**
+ * Calculates the distance between two given locations using the haversine formula.
+ * This method is reasonably accurate for most applications (in most cases the error is under 0.3%).
+ * 
+ * @param {String|Number} pLatA latitude of the first location
+ * @param {String|Number} pLonA longitude of the first location
+ * @param {String|Number} pLatB latitude of the second location
+ * @param {String|Number} pLonB longitude of the second location
+ * @return {Number} the distance in kilometres
+ */
+GeoLocationUtils.distanceHaversine = function (pLatA, pLonA, pLatB, pLonB)
+{
+    pLatA = GeoLocationUtils.degreeToRadians(pLatA);
+    pLonA = GeoLocationUtils.degreeToRadians(pLonA);
+    pLatB = GeoLocationUtils.degreeToRadians(pLatB);
+    pLonB = GeoLocationUtils.degreeToRadians(pLonB);
+
+    var R = GeoLocationUtils.EARTH_RADIUS_AVG(); //average Earth radius in km https://en.wikipedia.org/wiki/Earth_radius
+
+    var deltaLat = pLatA - Math.abs(pLatB); //lat can be negative
+    var deltaLon = pLonA - pLonB;
+
+    var sinLat = Math.sin(deltaLat / 2);
+    var sinLon = Math.sin(deltaLon / 2);
+    
+    return R * 2 * Math.asin(Math.sqrt(sinLat * sinLat + Math.cos(pLatA) * Math.cos(Math.abs(pLatB)) * sinLon * sinLon));
+}
+
+/**
+ * JavaScript function to calculate the geodetic distance between two points specified by latitude/longitude using the Vincenty inverse formula for ellipsoids.
+ * This is much more accurate than the haversine formula but also more complex and thus not as fast and can fail if the points are antipodal (very uncommon).
+ *
+ * Taken from http://movable-type.co.uk/scripts/latlong-vincenty.html
+ * 
+ * @param   {Number} latA: first point in decimal degrees
+ * @param   {Number} lonA: first point in decimal degrees
+ * @param   {Number} latB: second point in decimal degrees
+ * @param   {Number} lonB: second point in decimal degrees
+ * @returns {Number} distance in kilometres between points
+ */
+GeoLocationUtils.distanceVincenty = function (latA, lonA, latB, lonB) 
+{
+    let phi1 = GeoLocationUtils.degreeToRadians(latA), lambda1 = GeoLocationUtils.degreeToRadians(lonA);
+    let phi2 = GeoLocationUtils.degreeToRadians(latB), lambda2 = GeoLocationUtils.degreeToRadians(lonB);
+
+    let a_ = 6378137;
+    let b = 6356752.314245;
+    let f = 1/298.257223563;
+    let epsilon = Math.pow(2, -52);
+
+    let L = lambda2 - lambda1; // L = difference in longitude, U = reduced latitude, defined by tan U = (1-f)·tanphi.
+    let tanU1 = (1-f) * Math.tan(phi1), cosU1 = 1 / Math.sqrt((1 + tanU1*tanU1)), sinU1 = tanU1 * cosU1;
+    let tanU2 = (1-f) * Math.tan(phi2), cosU2 = 1 / Math.sqrt((1 + tanU2*tanU2)), sinU2 = tanU2 * cosU2;
+
+    let antipodal = Math.abs(L) > Math.PI/2 || Math.abs(phi2-phi1) > Math.PI/2;
+
+    let maxIterations = 100;
+    
+    let lambda = L, sinlambda = null, coslambda = null; // lambda = difference in longitude on an auxiliary sphere
+    let sigma = antipodal ? Math.PI : 0, sinsigma = 0, cossigma = antipodal ? -1 : 1, sinSqsigma = null; // sigma = angular distance P₁ P₂ on the sphere
+    let cos2sigmaM = 1;                      // sigmaM = angular distance on the sphere from the equator to the midpoint of the line
+    let sinalpha = null, cosSqalpha = 1;         // alpha = azimuth of the geodesic at the equator
+    let C = null;
+
+    let lambdaP = null, iterations = 0;
+    do {
+        sinlambda = Math.sin(lambda);
+        coslambda = Math.cos(lambda);
+        sinSqsigma = (cosU2*sinlambda) * (cosU2*sinlambda) + (cosU1*sinU2-sinU1*cosU2*coslambda) * (cosU1*sinU2-sinU1*cosU2*coslambda);
+        
+        if (Math.abs(sinSqsigma) < epsilon) 
+            break;  // co-incident/antipodal points (falls back on lambda/sigma = L)
+        
+        sinsigma = Math.sqrt(sinSqsigma);
+        cossigma = sinU1*sinU2 + cosU1*cosU2*coslambda;
+        sigma = Math.atan2(sinsigma, cossigma);
+        sinalpha = cosU1 * cosU2 * sinlambda / sinsigma;
+        cosSqalpha = 1 - sinalpha*sinalpha;
+        cos2sigmaM = (cosSqalpha != 0) ? (cossigma - 2*sinU1*sinU2/cosSqalpha) : 0; // on equatorial line cos²alpha = 0 (§6)
+        C = f/16*cosSqalpha*(4+f*(4-3*cosSqalpha));
+        lambdaP = lambda;
+        lambda = L + (1-C) * f * sinalpha * (sigma + C*sinsigma*(cos2sigmaM+C*cossigma*(-1+2*cos2sigmaM*cos2sigmaM)));
+        
+    } while (Math.abs(lambda-lambdaP) > 1e-12 && ++iterations<maxIterations);
+
+    if (iterations >= maxIterations)
+        return NaN;
+
+    let uSq = cosSqalpha * (a_*a_ - b*b) / (b*b);
+    let A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
+    let B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));
+    let deltasigma = B*sinsigma*(cos2sigmaM+B/4*(cossigma*(-1+2*cos2sigmaM*cos2sigmaM)-
+        B/6*cos2sigmaM*(-3+4*sinsigma*sinsigma)*(-3+4*cos2sigmaM*cos2sigmaM)));
+
+    let s = b*A*(sigma-deltasigma); // s = length of the geodesic
+
+    return s / 1000; //convert metres into kilometres
+}
+
+/**
+ * Calculates the distance between two points on earth's surface ignoring earth's curvature.
+ * This method is very fast, but not suitable for too large distances. (less than 1000 km should be fine)
+ */
+GeoLocationUtils.distanceFlat = function (latA, lonA, latB, lonB)
+{
+    var deglen = 110.25;
+    var x = latA - latB;
+    var y = (lonA - lonB) * Math.cos(latB)
+    return deglen * Math.sqrt(x*x + y*y)
+}
+
+/** 
+ * haversine function
+ * 
+ * @param {String|Number} pDelta req delta-value in radians
+ * @return {Number} hav(pDelta)
+ */ 
+GeoLocationUtils.haversine = function (pDelta)
+{
+    return Math.sin(pDelta / 2);
+}
+
+/**
+ * converts degrees to radians
+ * 
+ * @param {String|Number} pAngle angle in degrees
+ * @return {Number} angle in radians
+ */
+GeoLocationUtils.degreeToRadians = function (pAngle)
+{
+    return pAngle * Math.PI / 180;
+}
+
+function AreaSearchUtils () {}
+
+/**
+ * WIP
+ * @ignore
+ */
+AreaSearchUtils.findOrganisationsInArea = function (pLatitude, pLongitude, pMaxDistance)
+{
+    var locationData = [];
+    var locations = [];
+    
+    for (let i = 0, l = locationData.length; i < l; i++)
+    {
+        let distance = GeoLocationUtils.distanceVincenty(pLatitude, pLongitude, locationData[i][0], locationData[i][1]);
+        if (distace <= pMaxDistance)
+            locations.push(locationData[i]);
+    }
+    
+    return locations.sort(distanceSortFn);
+    
+    function distanceSortFn (a, b) 
+    { 
+        return a[3] - b[3]; 
+    }
+}
\ No newline at end of file
diff --git a/process/MimeType_lib/MimeType_lib.aod b/process/MimeType_lib/MimeType_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..01ad226f611bd45cacf2aca4b7ad0649a439afea
--- /dev/null
+++ b/process/MimeType_lib/MimeType_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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>MimeType_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/MimeType_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/MimeType_lib/process.js b/process/MimeType_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f075f2fe3acbc713e4dd56c705afd850d00d092
--- /dev/null
+++ b/process/MimeType_lib/process.js
@@ -0,0 +1,58 @@
+/**
+ * Object for the enumeration of mime types.
+ * This is an incomplete list and includes commonly used types, if something is missing, feel free to add it.
+ */
+function MimeTypes () {}
+
+/* application */
+MimeTypes.BIN = function () {return "application/octet-stream";};
+MimeTypes.ODT = function () {return "application/vnd.oasis.opendocument.text";};
+MimeTypes.PDF = function () {return "application/pdf";};
+MimeTypes.DOC = function () {return "application/msword";};
+MimeTypes.DOCX = function() {return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";};
+MimeTypes.XLS = function () {return "application/vnd.ms-excel";};
+MimeTypes.XLSX = function() {return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";};
+MimeTypes.PPT = function () {return "application/vnd.ms-powerpoint";};
+MimeTypes.MDB = function () {return "application/x-msaccess";};
+MimeTypes.RTF = function () {return "application/rtf";};
+MimeTypes.JS = function  () {return "application/javascript";};
+MimeTypes.JSON = function() {return "application/json";};
+MimeTypes.ZIP = function () {return "application/zip";};
+MimeTypes.MSG = function () {return "application/vnd.ms-outlook";};
+MimeTypes.TAR = function () {return "application/x-tar";};
+MimeTypes.XHTML = function() {return "application/xhtml+xml";};
+
+/* text */
+MimeTypes.TXT = function () {return "text/plain";};
+MimeTypes.HTML = function() {return "text/html";};
+MimeTypes.CSV = function () {return "text/comma-separated-values";};
+MimeTypes.TSV = function () {return "text/tab-separated-values";};
+MimeTypes.CSS = function () {return "text/css";};
+MimeTypes.RTX = function () {return "text/richtext";};
+MimeTypes.XML = function () {return "text/xml";};
+
+/* mail */
+MimeTypes.EML = function () {return "message/rfc822";};
+
+/* images */
+MimeTypes.BMP = function () {return "image/bmp";};
+MimeTypes.GIF = function () {return "image/gif";};
+MimeTypes.JPEG = function() {return "image/jpeg";};
+MimeTypes.TIFF = function() {return "image/tiff";};
+MimeTypes.PNG = function () {return "image/png";};
+MimeTypes.SVG = function () {return "image/svg+xml";};
+MimeTypes.WEBP = function() {return "image/webp";};
+
+/* audio */
+MimeTypes.MP3 = function () {return "audio/mpeg";};
+MimeTypes.AAC = function () {return "audio/aac";};
+MimeTypes.OGG = function () {return "audio/ogg";};
+MimeTypes.WAV = function () {return "audio/x-wav";};
+MimeTypes.WEBA = function() {return "audio/webm";};
+
+/* video */
+MimeTypes.MPEG = function() {return "video/mpeg";};
+MimeTypes.MP4 = function () {return "video/mp4";};
+MimeTypes.AVI = function () {return "video/x-msvideo";};
+MimeTypes.OGV = function () {return "video/ogg";};
+MimeTypes.WEBM = function() {return "video/webm";};
diff --git a/process/ObjectRelation_lib/process.js b/process/ObjectRelation_lib/process.js
index d21bebfee07f43cec9e8167742fd65211ab477a7..badb2f5ff02c8a4d4b4044e9e8760a81ccc17942 100644
--- a/process/ObjectRelation_lib/process.js
+++ b/process/ObjectRelation_lib/process.js
@@ -13,7 +13,7 @@ function ObjectRelationUtils() {}
  * Get all possible relationTypes by a objectType. (objectrelationtypeId and title)
  * Normally it only returns the id and title. If you set pFullInfo to true, you will get additional information, too.
  * 
- * @param {String} [pObjectType=undefined] the object type to load the relation types for.] 
+ * @param {String} [pObjectTypes=undefined] the object types to load the relation types for.] 
  * @param {Boolean} [pFullInfo=false] return also RELATION_TYPE, direction (normal, reverse, same), hierarchy, OBJECT_TYPE dest, OBJECT_TYPE source, objectrelationtypeId1, objectrelationtypeId2, side, objectrelationtypeId, other title, icon
  * @param {Boolean} [pOnlyFirstSide=false] load all types only for the first side.
  * @param {String} [pRelationTypeId=undefined] load only the specified relationType
@@ -21,18 +21,28 @@ function ObjectRelationUtils() {}
  * 
  * @return {String[][]}
  */
-ObjectRelationUtils.getPossibleRelationTypes = function(pObjectType, pFullInfo, pOnlyFirstSide, pRelationTypeId, pDummyField)
+ObjectRelationUtils.getPossibleRelationTypes = function(pObjectTypes, pFullInfo, pOnlyFirstSide, pRelationTypeId, pDummyField)
 {
+    // TODO: use sql builder
+    
     var sql = " from AB_OBJECTRELATIONTYPE main \n\
             left join AB_OBJECTRELATIONTYPE type2 on (type2.AB_OBJECTRELATIONTYPEID <> main.AB_OBJECTRELATIONTYPEID and type2.RELATION_TYPE = main.RELATION_TYPE) ";
     var cond = "";
     
     var params = [];
     
-    if (pObjectType)
+    if (pObjectTypes)
     {
-        cond = "where case when type2.OBJECT_TYPE is null then main.OBJECT_TYPE else type2.OBJECT_TYPE end = ? "
-        params.push([pObjectType, db.getColumnTypes("AB_OBJECTRELATIONTYPE", ["OBJECT_TYPE"])[0]]);
+        pObjectTypes.forEach(function(pObjectType)
+        {
+            if (!cond)
+                cond += "where ";
+            else
+                cond += " or ";
+            
+            cond += "case when type2.OBJECT_TYPE is null then main.OBJECT_TYPE else type2.OBJECT_TYPE end = ? ";
+            params.push([pObjectType, db.getColumnTypes("AB_OBJECTRELATIONTYPE", ["OBJECT_TYPE"])[0]]);
+        });
     }
     
     if (pRelationTypeId)
@@ -81,7 +91,7 @@ ObjectRelationUtils.getPossibleRelationTypes = function(pObjectType, pFullInfo,
              else type2.AB_OBJECTRELATIONTYPEID end objectrelationtypeId2, \n\
         main.SIDE,\n\
         case when type2.AB_OBJECTRELATIONTYPEID is  null then main.AB_OBJECTRELATIONTYPEID else type2.AB_OBJECTRELATIONTYPEID end,\n\
-        type2.RELATION_TITLE" + (pDummyField ? ", ''" : "") + ", main.ICON" + sql; // Icon is only savid in type1
+        type2.RELATION_TITLE" + (pDummyField ? ", ''" : "") + ", main.ICON" + sql; // Icon is only saved in type1
     }
        
     // full info:
diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index a15b9b48af33ff0aa6b622c27ea0c98d51e56391..5766569d1c8b04fabd858deda5267cec985a52f6 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -469,7 +469,7 @@ OfferItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCu
                 , "ITEMPOSITION"
                 , "ITEMSORT"];
 
-    return ItemUtils.prototype.insertPartsList.apply(this, [cols, pProductId, pAssignedTo, pCurrency, pContactId, [[["info", "INFO"], ["info", db.translateStatement(SqlCondition.begin()
+    return ItemUtils.prototype.insertPartsList.apply(this, [cols, pProductId, pAssignedTo, pCurrency, pContactId, [[["info", "INFO"], ["info", SqlUtils.translateStatementWithQuotes(SqlCondition.begin()
                                   .andPrepare("DESCRIPTIONTRANSLATION.OBJECT_ROWID", pProductId)
                                   .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE = 'Product'")
                                   .andPrepare("DESCRIPTIONTRANSLATION.LANG", pLanguage)
diff --git a/process/Permission_lib/Permission_lib.aod b/process/Permission_lib/Permission_lib.aod
index 0128621f7ef4c8fe1264d04c0d17fd8cbb9db78b..5554ac337c4eeb3f6498c96133b6d564d63d149e 100644
--- a/process/Permission_lib/Permission_lib.aod
+++ b/process/Permission_lib/Permission_lib.aod
@@ -5,6 +5,5 @@
   <process>%aditoprj%/process/Permission_lib/process.js</process>
   <variants>
     <element>LIBRARY</element>
-    <element>EXECUTABLE</element>
   </variants>
 </process>
diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js
index bfe618882b42cfbdb8510f15b31f3051c89116d9..b3088f98e9f8d9ee68525d0ca9017956c920da9f 100644
--- a/process/Permission_lib/process.js
+++ b/process/Permission_lib/process.js
@@ -286,6 +286,19 @@ function PermissionUtil () {}
         + " where ASYS_PERMISSIONID = '" + pPermId + "'";
         return db.cell(sqlStr, alias);
     }
+    
+    /**
+ * Gets the parent permission set of a set.
+ * 
+ * @param {String} pSetId id of the permission set
+ * 
+ * @result {String} returns id of the parent permission set of the given set. Never 'null', empty string if there is no result.
+ */
+    PermissionUtil.getParentSetOfSet = function(pSetId) {
+        var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSIONSET"
+        + " where ASYS_PERMISSIONSETID = '" + pSetId + "'";
+        return db.cell(sqlStr, alias);
+    }
 
     /**
  * Checks if the given permission set has any children left.
@@ -418,6 +431,19 @@ function PermissionUtil () {}
         var sqlStr = "select CONDTYPE from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'";
         return db.cell(sqlStr, alias);
     }
+    
+    /**
+     * Returns the condition of a permission.
+     * 
+     * @param {String} pPermId id of the permission which condition should be returned, mandatory
+     * 
+     * @result {String} returns the condition of a permission
+     */
+    PermissionUtil.getCond = function(pPermId) {
+        var table = "ASYS_PERMISSION";
+        var sqlStr = "select COND from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'";
+        return db.cell(sqlStr, alias);
+    }
 
     /**
      * Returns true if the permission exists, otherwise false.
diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js
index aa5c3244d371be4a48d816542210db53e298b33d..fc110b9bf6098879ec79727538897237013bb7c5 100644
--- a/process/Placeholder_lib/process.js
+++ b/process/Placeholder_lib/process.js
@@ -1,157 +1,178 @@
-import("CustomPlaceholder_lib");
-import("Sql_lib");
-import("Communication_lib");
-
-/* Library for document template placeholders.
- * All possible placeholders that can be used in a template are defined here.
- */
-
-/**
- * Provides functions for placeholders.
- */
-function PlaceholderUtils () {}
-
-/**
- * basic placeholder configuration
- * 
- * @return {Array} array of placeholders
- */
-PlaceholderUtils.getPlaceholders = function ()
-{
-    var placeholders = [];
-    var sqlUtil = new SqlMaskingUtils();
-    
-    /***************************************************************************************************************/ 
-    //Definition of available basic Placeholders. For project specific Placeholders, use CustomPlaceholder_lib
-    
-    _addAddressFormat("address", "{street} {buildingno}");
-    _addAddressFormat("zipCode", "{zip}");
-    _addAddressFormat("city", "{city}");
-    _addAddressFormat("district", "{district}");
-    _addAddressFormat("region", "{region}");
-    _addAddressFormat("country", "{country}");
-    _addAddressFormat("letterSalutation", "{letter_salutation}");
-    _addAddressFormat("fullAddress", "");
-    _addAddressFormat("senderOrgname", "{organisation_name}", Placeholder.targets.SENDER);
-    _addAddressFormat("senderAddress", "{street} {buildingno}", Placeholder.targets.SENDER);
-    _addAddressFormat("senderZipCity", "{country} - {zip} {city}", Placeholder.targets.SENDER);
-    _addAddressFormat("senderFullAddress", "", Placeholder.targets.SENDER);
-    
-    _addSqlPart("orgname", "ORGANISATION.NAME");
-    _addSqlPart("firstname", "PERSON.FIRSTNAME");
-    _addSqlPart("middlename", "PERSON.MIDDLENAME");
-    _addSqlPart("lastname", "PERSON.LASTNAME");
-    _addSqlPart("salutation", "PERSON.SALUTATION");
-    _addSqlPart("title", "PERSON.TITLE");
-    _addSqlPart("phone", CommUtil.getStandardSubSqlPhone());
-    _addSqlPart("email", CommUtil.getStandardSubSqlMail());
-    _addSqlPart("name", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]));
-    _addSqlPart("senderPhone", CommUtil.getStandardSubSqlPhone(), Placeholder.targets.SENDER);
-    _addSqlPart("senderEmail", CommUtil.getStandardSubSqlMail(), Placeholder.targets.SENDER);
-    _addSqlPart("senderName", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER);
-    
-    
-    /***************************************************************************************************************/ 
-    
-    placeholders = placeholders.concat(CustomPlaceholderUtils.getPlaceholders());
-    return placeholders;
-    
-    //these functions should make adding placeholders easier and require less code:
-    
-    /**
-     * add an address format placeholder to placeholders
-     */
-    function _addAddressFormat (pName, pFormat, pTarget)
-    {
-        placeholders.push(new Placeholder(pName, Placeholder.types.ADDRESSFORMAT, pFormat, pTarget));
-    }
-    
-    /**
-     * Add a sub-sql placeholder to placeholders. For further information regarding the full query, you can take
-     * a look at the function 'fetchAddressData' in Address_lib. You can use fields from CONTACT, ADDRESS, ORGANISATION and PERSON.
-     */
-    function _addSqlPart (pName, pSqlPart, pTarget)
-    {
-        placeholders.push(new Placeholder(pName, Placeholder.types.SQLPART, "(" + pSqlPart + ")", pTarget));
-    }
-    
-    /**
-     * Add a placeholder to placeholders with a function that returns a sub-sql. The function will be called
-     * with no parameters. You have to deliver an actual function, don't call it here.
-     */
-    function _addSqlPartFunction (pName, pSqlPartFunction, pTarget)
-    {
-        placeholders.push(new Placeholder(pName, Placeholder.types.SQLPARTFUNCTION, pSqlPartFunction, pTarget));
-    }
-}
-
-/**
- * Returns the placeholder with the required prefix and postfix added.
- * This function defines the format for placeholders.
- */
-PlaceholderUtils.formatPlaceholder = function (pPlaceholder)
-{
-    return "{@" + pPlaceholder + "@}";
-}
-
-
-/**
- * object representing a placeholder
- * 
- * @param {String} pName name of the placeholder (without prefix and postfix)
- * @param {String} pType type of the placeholder, see PlaceholderUtils.types
- * @param {String|Function} pValueDef string or function (depends on the type) defining the value
- * @param {String} [pTarget] what contact is used to get the data, see PlaceholderUtils.targets
- */
-function Placeholder (pName, pType, pValueDef, pTarget) 
-{
-    this.placeholderName = PlaceholderUtils.formatPlaceholder(pName);
-    this.type = pType;
-    this.target = pTarget || Placeholder.targets.RECIPIENT;
-    this.valueDefinition = pValueDef;
-}
-
-Placeholder.prototype.toString = function ()
-{
-    return this.placeholderName;
-}
-
-/**
- * placeholder types, defines how the value is acquired
- * 
- * @enum {String}
- */
-Placeholder.types = {
-    /**
-     * define an address format for the placeholder
-     */
-    ADDRESSFORMAT : "ADDRESSFORMAT",
-    /**
-     * sub-sql or field
-     */
-    SQLPART : "SQLPART",
-    /**
-     * function that returns a sub-sql
-     */
-    SQLPARTFUNCTION : "SQLPARTFUNCTION"
-};
-
-/**
- * placeholder targets, defines whose data is used
- * 
- * @enum {String}
- */
-Placeholder.targets = {
-    /**
-     * use the data of the recipient (default)
-     */
-    RECIPIENT : "RECIPIENT",
-    /**
-     * use the data of the sender
-     */
-    SENDER : "SENDER",
-    /**
-     * use the data of the user
-     */
-    EMPLOYEE : "EMPLOYEE"
-};
+import("system.translate");
+import("system.vars");
+import("CustomPlaceholder_lib");
+import("Sql_lib");
+import("Communication_lib");
+import("system.datetime");
+
+
+/* Library for document template placeholders.
+ * All possible placeholders that can be used in a template are defined here.
+ */
+
+/**
+ * Provides functions for placeholders.
+ */
+function PlaceholderUtils () {}
+
+/**
+ * basic placeholder configuration
+ * 
+ * @return {Array} array of placeholders
+ */
+PlaceholderUtils.getPlaceholders = function ()
+{
+    var placeholders = [];
+    var sqlUtil = new SqlMaskingUtils();
+    
+    /***************************************************************************************************************/ 
+    //Definition of available basic Placeholders. For project specific Placeholders, use CustomPlaceholder_lib
+    
+    _addAddressFormat("address", "{street} {buildingno}");
+    _addAddressFormat("zipCode", "{zip}");
+    _addAddressFormat("city", "{city}");
+    _addAddressFormat("district", "{district}");
+    _addAddressFormat("region", "{region}");
+    _addAddressFormat("country", "{country}");
+    _addAddressFormat("letterSalutation", "{letter_salutation}");
+    _addAddressFormat("fullAddress", "");
+    _addAddressFormat("senderOrgname", "{organisation_name}", Placeholder.targets.SENDER);
+    _addAddressFormat("senderAddress", "{street} {buildingno}", Placeholder.targets.SENDER);
+    _addAddressFormat("senderZipCity", "{country} - {zip} {city}", Placeholder.targets.SENDER);
+    _addAddressFormat("senderFullAddress", "", Placeholder.targets.SENDER);
+    
+    _addSqlPart("orgname", "ORGANISATION.NAME");
+    _addSqlPart("firstname", "PERSON.FIRSTNAME");
+    _addSqlPart("middlename", "PERSON.MIDDLENAME");
+    _addSqlPart("lastname", "PERSON.LASTNAME");
+    _addSqlPart("salutation", "PERSON.SALUTATION");
+    _addSqlPart("title", "PERSON.TITLE");
+    _addSqlPart("phone", CommUtil.getStandardSubSqlPhone());
+    _addSqlPart("email", CommUtil.getStandardSubSqlMail());
+    _addSqlPart("name", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]));
+    _addSqlPart("senderPhone", CommUtil.getStandardSubSqlPhone(), Placeholder.targets.SENDER);
+    _addSqlPart("senderEmail", CommUtil.getStandardSubSqlMail(), Placeholder.targets.SENDER);
+    _addSqlPart("senderName", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER);
+    _addSqlPart("date", "'" + datetime.toDate(vars.get("sys.date"), translate.text("dd.MM.yyyy")) + "'", Placeholder.targets.SENDER);
+    
+    
+    /***************************************************************************************************************/ 
+    
+    placeholders = placeholders.concat(CustomPlaceholderUtils.getPlaceholders());
+    return placeholders;
+    
+    //these functions should make adding placeholders easier and require less code:
+    
+    /**
+     * add an address format placeholder to placeholders
+     */
+    function _addAddressFormat (pName, pFormat, pTarget)
+    {
+        placeholders.push(new Placeholder(pName, Placeholder.types.ADDRESSFORMAT, pFormat, pTarget));
+    }
+    
+    /**
+     * Add a sub-sql placeholder to placeholders. For further information regarding the full query, you can take
+     * a look at the function 'fetchAddressData' in Address_lib. You can use fields from CONTACT, ADDRESS, ORGANISATION and PERSON.
+     */
+    function _addSqlPart (pName, pSqlPart, pTarget)
+    {
+        placeholders.push(new Placeholder(pName, Placeholder.types.SQLPART, "(" + pSqlPart + ")", pTarget));
+    }
+    
+    /**
+     * Add a placeholder to placeholders with a function that returns a sub-sql. The function will be called
+     * with no parameters. You have to deliver an actual function, don't call it here.
+     */
+    function _addSqlPartFunction (pName, pSqlPartFunction, pTarget)
+    {
+        placeholders.push(new Placeholder(pName, Placeholder.types.SQLPARTFUNCTION, pSqlPartFunction, pTarget));
+    }
+}
+
+/**
+ * Returns the placeholder with the required prefix and postfix added.
+ * This function defines the format for placeholders.
+ */
+PlaceholderUtils.formatPlaceholder = function (pPlaceholder)
+{
+    return "{@" + pPlaceholder + "@}";
+}
+
+/**
+ * Returns the Regexp to match all placeholders
+ * e.g. 
+ * myText.replace(PlaceholderUtils.getRegexpMatchAll(), function() {
+ *  return "my special replacement"
+ * });
+ */
+PlaceholderUtils.getRegexpMatchAll = function (pSpecialCharFilterRegexpPart)
+{
+    if (pSpecialCharFilterRegexpPart == undefined)
+    {
+        pSpecialCharFilterRegexpPart = "";
+    }
+    
+    return "{" + pSpecialCharFilterRegexpPart + "@(.|(\\r?\\n))+?@" + pSpecialCharFilterRegexpPart + "}";
+}
+
+/**
+ * object representing a placeholder
+ * 
+ * @param {String} pName name of the placeholder (without prefix and postfix)
+ * @param {String} pType type of the placeholder, see PlaceholderUtils.types
+ * @param {String|Function} pValueDef string or function (depends on the type) defining the value
+ * @param {String} [pTarget] what contact is used to get the data, see PlaceholderUtils.targets
+ */
+function Placeholder (pName, pType, pValueDef, pTarget) 
+{
+    this.placeholderName = PlaceholderUtils.formatPlaceholder(pName);
+    this.type = pType;
+    this.target = pTarget || Placeholder.targets.RECIPIENT;
+    this.valueDefinition = pValueDef;
+}
+
+Placeholder.prototype.toString = function ()
+{
+    return this.placeholderName;
+}
+
+/**
+ * placeholder types, defines how the value is acquired
+ * 
+ * @enum {String}
+ */
+Placeholder.types = {
+    /**
+     * define an address format for the placeholder
+     */
+    ADDRESSFORMAT : "ADDRESSFORMAT",
+    /**
+     * sub-sql or field
+     */
+    SQLPART : "SQLPART",
+    /**
+     * function that returns a sub-sql
+     */
+    SQLPARTFUNCTION : "SQLPARTFUNCTION"
+};
+
+/**
+ * placeholder targets, defines whose data is used
+ * 
+ * @enum {String}
+ */
+Placeholder.targets = {
+    /**
+     * use the data of the recipient (default)
+     */
+    RECIPIENT : "RECIPIENT",
+    /**
+     * use the data of the sender
+     */
+    SENDER : "SENDER",
+    /**
+     * use the data of the user
+     */
+    EMPLOYEE : "EMPLOYEE"
+};
diff --git a/process/PostalAddress_lib/process.js b/process/PostalAddress_lib/process.js
index de5ac3dcd8e6fb96c2e975543aed2f8c589bf468..9e2a28bb1c1b7a77ce4767255bbe741efd8f84e6 100644
--- a/process/PostalAddress_lib/process.js
+++ b/process/PostalAddress_lib/process.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("KeywordRegistry_basic");
 import("system.db");
 import("Sql_lib");
@@ -268,4 +269,21 @@ AddressValidationUtils.isValidZip = function(countryCode, zipCode)
     regExpVal = "^" + regExpVal + "$";
     var regExp = new RegExp(regExpVal);
     return regExp.test(zipCode);
-};
\ No newline at end of file
+};
+
+/**
+ * validates a zip field
+ * @param {String} pCountry
+ * @param {String} pZip zip code to validate
+ * 
+ * @return {String} an empty string or an error message if validation failed.
+ */
+AddressValidationUtils.validateZipField = function(pCountry, pZip)
+{
+    var message = "";
+    var isValid = AddressValidationUtils.isValidZip(pCountry, pZip);
+    if (!isValid)
+        message = translate.text("The ZIP code does not match the format of the country.");
+
+    return message;
+}
\ No newline at end of file
diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js
index 979fa29aa2c359791721559fd5afc0fa55206b5c..61310ddd92946d5186473c1b18f44436bde8b3c4 100644
--- a/process/Product_lib/process.js
+++ b/process/Product_lib/process.js
@@ -185,7 +185,7 @@ ProductUtils.getProductDetails = function(pid, priceListFilter, additionalProduc
 
         cols = cols.concat(colsPricelistValid);
         joins.push("left join PRODUCTPRICE validPP on " 
-                    + db.translateCondition(SqlCondition.begin()
+                    + SqlCondition.begin()
                                .and("validPP.PRODUCT_ID = PRODUCTID")
                                .andPrepare(["PRODUCTPRICE", "CURRENCY", "validPP"], priceListFilter.currency)
                                 .andPrepare(["PRODUCTPRICE", "VALID_FROM", "validPP"], datetime.date().toString(), "# <= ?")
@@ -201,7 +201,7 @@ ProductUtils.getProductDetails = function(pid, priceListFilter, additionalProduc
                                         .andPrepare(["PRODUCTPRICE", "BUYSELL", "validPP"], 'SP'), 
                                     "1 = 2"), 
                                 "1 = 2")
-                                .build("1 = 2")))
+                                .translate("1 = 2"))
     }
     
     var ProductDataSql = SqlCondition.begin()
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 12b84dc591b54f10fd9f8f3326697eb7353b17fa..a11e8669d5a86f7bf786b62ea845045a8c0dfd7a 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -461,6 +461,17 @@ SqlCondition.prototype.buildSql = function(pBeforeCondition, pAlternativeCond, p
             " " + pAfterCondition, this.preparedValues];
 }
 
+/**
+ * translates SqlCondition to plain SQL. Use this if prepared statements are not supported.
+ * It resolves all prepared values.
+ * @param {String} pAlternativeCond used if the SqlCondition does not contain any condition.
+ * @return {String} plain SQL condition
+ */
+SqlCondition.prototype.translate = function(pAlternativeCond) 
+{
+    return SqlUtils.translateConditionWithQuotes(this.build(pAlternativeCond, this.alias));
+}
+
 /**
  * Check if (adito-)variable exists and vars.getString is not empty
  * @param {String} variable the variable name (e.g. "$field.CONTACT_ID")
@@ -625,7 +636,7 @@ SqlCondition.equalsNot = function(pField, pValue, pAlternativeCond, pAlias) {
  * Object for building sqls. The main purpose of this is to make it
  * possible to use SqlCondition objects inside join conditions or sub sqls.
  * This can also be useful to build complex sqls where parts should be added
- * dynamically while keeping the code clear.
+ * dynamically while keeping the code clean.
  * 
  * @class
  */
@@ -658,13 +669,18 @@ function SqlBuilder ()
  *   .leftJoin("ORGANISATION", SqlCondition.begin()
  *       .and("CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID")
  *       .andPrepare("ORGANISATION.NAME", "S%", "# like ?")
- *       .build("1=2))
+ *       .build("1=2"))
  *   .where(SqlCondition.begin()
  *       .andPrepare("CONTACT.STATUS", $KeywordRegistry.contactStatus$active())
- *       .build("1=2))
- *   .build();
- *
- * var data = db.table(query);
+ *       .build("1=2"));
+ * 
+ * if (getCountry) //changing and adding parts
+ * {
+ *   query.select("ORGANISATION.NAME, FIRSTNAME, LASTNAME, COUNTRY");
+ *   query.leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID");
+ * }
+ *   
+ * var data = db.table(query.build());
  */
 SqlBuilder.begin = function ()
 {
@@ -677,7 +693,7 @@ SqlBuilder.begin = function ()
  */
 SqlBuilder.prototype.toString = function ()
 {
-    return db.translateStatement(this.build());
+    return SqlUtils.translateStatementWithQuotes(this.build());
 }
 
 /**
@@ -906,6 +922,17 @@ SqlBuilder.prototype.build = function ()
     return [sqlStr, preparedVals];
 }
 
+/**
+ * translates SqlBuilder to plain SQL. Use this if prepared statements are not supported.
+ * For the db-functions (db.table, db.cell, etc.) use ".build()" as they support prepared statements.
+ * It resolves all prepared values.
+ * @param {String} [pAlias=undefined] the alias to use for db.translateStatement
+ * @return {String} plain SQL statement
+ */
+SqlBuilder.prototype.translate = function(pAlias)
+{
+    return SqlUtils.translateStatementWithQuotes(this.build(), pAlias);
+}
 
 
 /**
@@ -1706,6 +1733,14 @@ SqlUtils._pageData = function(sqlType ,sqlStatement, blockSize, callbackFn, dbAl
     return true;
 }
 
+/**
+ *  @return the alias for table asys_binaries
+ */
+SqlUtils.getBinariesAlias = function()
+{
+    return SqlUtils.getSystemAlias();
+}
+
 /**
  *  @return the sytemalias
  */
@@ -1824,3 +1859,49 @@ SqlUtils.getResolvingCaseWhen = function(pKeyValueArray, pDbFieldName, pLocale)
     resSql = [resSql, preparedValues];
     return resSql;
 };
+
+/**
+ * Will quote all prepared statement values from the given statement.
+ * @param {[String, String[]]} pStatement Same as first paraemter of db.translateStatement.
+ * @param {([String, String[]]) => String} pExecutionCallback A function which must return the final SQL.
+ * @return The SQL, same as the result of db.translateStatement.
+ */
+SqlUtils.translateWithQuotes = function (pStatement, pExecutionCallback) {
+    // Validate type of incoming paramter.
+    if (!(pStatement instanceof Array))
+        return null;
+
+    // The second element of the array has to be an array.
+    if (!(pStatement[1] instanceof Array))
+        return null;
+
+    // As the second element represents the prepared statements we need to map it...
+    var preparedStatements = pStatement[1].map(function (pValue) {
+        // Just in case as a fallback value..
+        if (!(pValue instanceof Array))
+            return pValue;
+
+        // As the first element represents the value it will be quoted here.
+        return [db.quote(pValue[0]), pValue[1]];
+    });
+
+    return pExecutionCallback([pStatement[0], preparedStatements]);
+}
+
+/**
+ * Will quote all prepared statement values from the given statement.
+ * @param {[String, String[]]} pStatement Same as the first parameter of db.translateStatement.
+ * @returns {String} The SQL, same as the result of db.translateStatement.
+ */
+SqlUtils.translateStatementWithQuotes = function (pStatement) {
+    return SqlUtils.translateWithQuotes(pStatement, function(pValue) {return db.translateStatement(pValue)});
+}
+
+/**
+ * Will quote all prepared statement values from the given statement.
+ * @param {[String, String[]]} pStatement Same as the first parameter of db.translateCondition.
+ * @returns {String} The SQL, same as the result of db.translateCondition.
+ */
+SqlUtils.translateConditionWithQuotes = function (pStatement) {
+    return SqlUtils.translateWithQuotes(pStatement, function(pValue) {return db.translateCondition(pValue)});
+}
\ No newline at end of file
diff --git a/process/WsValidation_lib/WsValidation_lib.aod b/process/WsValidation_lib/WsValidation_lib.aod
index 87bb88bd27524ebb6e88e2b5f99abad69df32e98..7557aa61ac45ba4e94288bb7fb5d8dc6dad0eedb 100644
--- a/process/WsValidation_lib/WsValidation_lib.aod
+++ b/process/WsValidation_lib/WsValidation_lib.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>WsValidation_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/WsValidation_lib/documentation.adoc</documentation>
   <process>%aditoprj%/process/WsValidation_lib/process.js</process>
   <variants>
     <element>LIBRARY</element>
diff --git a/process/WsValidation_lib/documentation.adoc b/process/WsValidation_lib/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a47408f2eda03e4053709939fcb9deb4d48ae12e
--- /dev/null
+++ b/process/WsValidation_lib/documentation.adoc
@@ -0,0 +1 @@
+See beginning of Lib. (TODO: move here??)
\ No newline at end of file
diff --git a/process/WsValidation_lib/process.js b/process/WsValidation_lib/process.js
index 69379c6adf70362e376cd9eeaa411c0817666d38..4fb75a44076fb51ce5815370283d967e97de5bb0 100644
--- a/process/WsValidation_lib/process.js
+++ b/process/WsValidation_lib/process.js
@@ -1,3 +1,4 @@
+import("system.result");
 import("system.logging");
 import("system.translate");
 import("system.project");
@@ -7,6 +8,74 @@ import("system.net");
 import("system.util");
 import("system.auth");
 import("DataCaching_lib");
+import("AddressEntity_lib");
+
+/******************************************************************************/
+/******************************************************************************/
+/********************************DOCUMENTATION*********************************/
+/******************************************************************************/
+/******************************************************************************/
+/*
+1. How to add a new Webservice type
+-----------------------------------
+- Scroll down to WsValidationType.get
+- add a new Type into the cache like the other ones
+- IMPORTANT: use the same name for the key as for the first parameter of the new WsValidationType!
+- the second param, pWebserviceName defines which webservice should be used. This name is used for the custom project preferences
+  e.g. nominatim webservice has the custom preference nominatim.enable which is checked by WsValidationUtils.isWsEnabled
+  all other project preferences can contain the url, useername, password, etc. and are used by the function you create in the next step:
+- WS-Request function: (pProcessRequestCallback)
+  This callback defines a function which is called if a Request is triggered.
+  the following params are available (if you need more you have to add them to WsValidationUtils.validate(...)
+  pValue, pCountry, pCity
+  
+  You can base your callback on the function _nominatimRequest(pValue, pCountry, pCity)
+
+  Your callback has to call the processResultCallback (created as next step) for example like this:
+    return this.processResultCallback.call(this, ret, pValue);
+  
+- WS-Result function: (pProcessResultCallback)
+  This callback defines a function which is called on receiving an answer from the webservice.
+  
+  Base it on function _processNominatimAddressLookup(pWsResult, pValue) below.
+
+- create a new provider, which presets the Type_param with the new Type (you should not expose the parameter on this provider):
+import("WsValidation_lib");
+import("system.result");
+
+result.string(WsValidationType.get().TYPE_ADDRESS_NOMINATIM.key);
+
+
+2. Address_entity-specific! 
+How to add a new lookup using the webservice (like e.g. ZIP)
+------------------------------------------------------------
+
+In the following Text I use "main field" when referencing the field which is directly connected with the db and contains the actual data (e.g. $field.ZIP)
+The main field is only displayed if the webservice is disabled.
+In the following Text I use "ws field" when referencing the new field which is displayed when the webservice is enabled. It "uses" the data provided by the main field.
+
+- create new ws field:
+  e.g. Zip_ws
+- Set the following properties:
+  * textInputAllowed: true
+  * onValueChangeTypes: Mask (only)
+  * title
+- add the following processes by using the functions from WsValidationFieldUtils (see the already existing Zip_ws field for reference)
+  * valueProcess
+  * displayValueProcess
+  * onValueChange
+  * stateProcess
+  * mandatoryProcess
+- if your main field has a onValidationProcess, copy it from the main field and wrap it with a check for ENABLÖED webservice (see Zip_ws) 
+   and maybe modify it (note that the onValidationProcess may get the Request answer as value. You have to deal with it!
+  Also wrap the onValidationProcess of your main field with a check for DISABLED webservice (see ZIP field)
+- create a new Consumer (e.g. ZipValidation_entity) and point it to the AddressValidation_entity. 
+  Use the corresponding provider which is created for the type you need (see documentation 1. above)
+  You may have to fill the parameters. if they are needed by your webservice
+- You HAVE TO fill the param "currentValueParam" by the value of your main field.
+- set the consumer of your ws field to the newly created consumer
+- Add your new ws field to the views: AddressList_view and AddressMultiEdit_view (right above the mainField)
+*/
 
 /**
  * Class used for the webservice validation types.
@@ -15,15 +84,15 @@ import("DataCaching_lib");
  * 
  * @param {String} pKey the key-name
  * @param {String} pWebserviceName name of the webservice. Used to find the correct webservice configuraation
- * @param {Function} pProcessResultCallback function for processing Webservice-result to the return value
  * @param {Function} pProcessRequestCallback function for processing Webservice-request
+ * @param {Function} pProcessResultCallback function for processing Webservice-result to the return value
  * @param {Object} pAdditionalInfo additional Info. Can be an object or something else. (callback specific)
  */
-function WsValidationType(pKey, pWebserviceName, pProcessResultCallback, pProcessRequestCallback, pAdditionalInfo) 
+function WsValidationType(pKey, pWebserviceName, pProcessRequestCallback, pProcessResultCallback, pAdditionalInfo) 
 {
     this.key = pKey;
-    this.processResultCallback = pProcessResultCallback;
     this.processRequestCallback = pProcessRequestCallback;
+    this.processResultCallback = pProcessResultCallback;
     this.webserviceName = pWebserviceName;
     this.additionalInfo = pAdditionalInfo;
 }
@@ -39,13 +108,13 @@ WsValidationType.get = function(pKey)
     if (!this._cache)
         this._cache = {
             // Address lookups
-            TYPE_ADDRESS_NOMINATIM: new WsValidationType("TYPE_ADDRESS_NOMINATIM", "nominatim", _processNominatimAddressLookup, _nominatimRequest, "q"),
-            TYPE_ZIP_NOMINATIM: new WsValidationType("TYPE_ZIP_NOMINATIM", "nominatim", _processNominatimAddressLookup, _nominatimRequest, "postalcode"),
-            TYPE_CITY_NOMINATIM: new WsValidationType("TYPE_CITY_NOMINATIM", "nominatim", _processNominatimAddressLookup, _nominatimRequest, "city"),
-            TYPE_STREET_NOMINATIM: new WsValidationType("TYPE_STREET_NOMINATIM", "nominatim", _processNominatimAddressLookup, _nominatimRequest, "street"),
+            TYPE_ADDRESS_NOMINATIM: new WsValidationType("TYPE_ADDRESS_NOMINATIM", "nominatim", _nominatimRequest, _processNominatimAddressLookup, "q"),
+            TYPE_ZIP_NOMINATIM: new WsValidationType("TYPE_ZIP_NOMINATIM", "nominatim", _nominatimRequest, _processNominatimAddressLookup, "postalcode"),
+            TYPE_CITY_NOMINATIM: new WsValidationType("TYPE_CITY_NOMINATIM", "nominatim", _nominatimRequest, _processNominatimAddressLookup, "city"),
+            TYPE_STREET_NOMINATIM: new WsValidationType("TYPE_STREET_NOMINATIM", "nominatim", _nominatimRequest, _processNominatimAddressLookup, "street"),
             
-            // Communication validation
-            TYPE_PHONE: new WsValidationType("TYPE_PHONE", "phoneValidation", _processCommunicationValidation, _customRequest, "Number")
+            // Communication validation (Not used anymore, as it's done via system functions now. Left here for reference.)
+            TYPE_PHONE: new WsValidationType("TYPE_PHONE", "phoneValidation", _customRequest, _processCommunicationValidation, "Number")
         }
     
     if (pKey)
@@ -183,6 +252,8 @@ WsValidationType.get = function(pKey)
                 nominatimCache.last = parameterName + pValue + (pCountry ? pCountry : "") + (pCity ? pCity : "")
 
                 var url = project.getPreferenceValue("custom." + this.webserviceName + ".url");
+                var pw = project.getPreferenceValue("custom." + this.webserviceName + ".pw");
+                var user = project.getPreferenceValue("custom." + this.webserviceName + ".user");
 
 
                 if (!url)
@@ -200,6 +271,18 @@ WsValidationType.get = function(pKey)
                                     .dataTypeJDitoSend(util.DATA_TEXT)
                                     .addQueryParameter("format", "json")
                                     .addQueryParameter("addressdetails", "1");
+                    
+                    var authConf;
+                    if (user && pw)
+                    {
+                        authConf = auth.createConfigForBasicAuth()
+                                    .userName(user)
+                                    .password(pw);
+                    } 
+                    else
+                    {
+                        authConf = auth.createConfigForNoAuth()
+                    }
 
                     // add user input params
                     if (pCountry)
@@ -215,7 +298,7 @@ WsValidationType.get = function(pKey)
 
 
                     // call webservice
-                    var ret = JSON.parse(net.callRestWebservice(restConf, auth.createConfigForNoAuth()));
+                    var ret = JSON.parse(net.callRestWebservice(restConf, authConf));
 
                     // if error, log the error. But also process the result and let the callback generate the correct default value
                     if (ret == null)
@@ -271,7 +354,7 @@ WsValidationUtils.validate = function(pValue, pType, pCountry, pCity)
  * 
  * @return {Array|null} the parsed data as array or null if it was no array
  */
-WsValidationUtils._parseJSONArray = function(pJSON) {
+WsValidationUtils.parseJSONArray = function(pJSON) {
     try
     {
         var data = JSON.parse(pJSON);
@@ -291,18 +374,17 @@ WsValidationUtils._parseJSONArray = function(pJSON) {
 
 /**
  * set all address-fields by pValue, which should contain an array of all values as JSON
- * Note: it does not set the current field itself as this sould be done by the value process. Use WsValidationUtils.valueFromJSON for this.
  * 
  * @param {String} pJSON the values as json
+ * @return {Boolean} if any fields were set
  */
 WsValidationUtils.setAddressFields = function(pJSON)
 {
-    var data = WsValidationUtils._parseJSONArray(pJSON);
+    var data = WsValidationUtils.parseJSONArray(pJSON);
     if (data == null)
-        return
+        return false;
 
-    var currentField = vars.get("$this.name");
-    var toSet = {
+    var toSet = { 
         "$field.ZIP": data[1],
         "$field.CITY": data[2],
         "$field.COUNTRY": data[4],
@@ -314,15 +396,14 @@ WsValidationUtils.setAddressFields = function(pJSON)
     
     for (field in toSet) 
     {
-        if (field != currentField) 
-        {
-            let value = toSet[field];
-            if (!value)
-            value = ""
-        
-            neon.setFieldValue(field, value);
-        }
+        let value = toSet[field];
+        if (!value)
+        value = ""
+
+        neon.setFieldValue(field, value);
     }
+    
+    return true;
 }
 
 /**
@@ -333,7 +414,7 @@ WsValidationUtils.setAddressFields = function(pJSON)
  */
 WsValidationUtils.valueFromJSON = function(pJSON)
 {
-    var data = WsValidationUtils._parseJSONArray(pJSON);
+    var data = WsValidationUtils.parseJSONArray(pJSON);
     if (data == null)
         return null
 
@@ -364,4 +445,103 @@ WsValidationUtils.isWsEnabled = function(pType)
 WsValidationUtils._isError = function(pWsReturn)
 {
     return pWsReturn == null || !pWsReturn.hasHttpSuccessStatusCode || pWsReturn.httpStatusCode != 200;
+}
+
+/**
+ * Class containing functions for fields validated by the ws (e.g. Address_entity: ZIP, ADDRESS, CITY)
+ * do not create an instance of this
+ * 
+ * @class
+ */
+function WsValidationFieldUtils() {}
+
+/**
+ * @param {WsValidationType} pWsType
+ * @return {String} componentstate
+ */
+WsValidationFieldUtils.mainFieldStateProcess = function(pWsType)
+{
+    if (WsValidationUtils.isWsEnabled(pWsType))
+        return neon.COMPONENTSTATE_INVISIBLE
+    else
+        return neon.COMPONENTSTATE_AUTO
+}
+
+/**
+ * @param {WsValidationType} pWsType
+ * @return {String} componentstate
+ */
+WsValidationFieldUtils.wsFieldStateProcess = function(pWsType)
+{
+    if (!WsValidationUtils.isWsEnabled(pWsType))
+        return neon.COMPONENTSTATE_INVISIBLE
+    else
+        return neon.COMPONENTSTATE_AUTO
+}
+
+/**
+ * @param {WsValidationType} pWsType
+ * @param {Boolean} pMandatory if field is a mandatory field
+ * @return {Boolean} mandatory
+ */
+WsValidationFieldUtils.wsFieldMandatoryProcess = function(pWsType, pMandatory)
+{
+    return (WsValidationUtils.isWsEnabled(pWsType) && pMandatory);
+}
+
+/**
+ * @param {WsValidationType} pWsType
+ * @param {Boolean} pMandatory if field is a mandatory field
+ * @return {Boolean} mandatory
+ */
+WsValidationFieldUtils.mainFieldMandatoryProcess = function(pWsType, pMandatory)
+{
+    return (!WsValidationUtils.isWsEnabled(pWsType) && pMandatory);
+}
+
+/**
+ * Note: may call result.string(...)
+ *
+ * @param {WsValidationType} pWsType
+ * @param {String} field-variable from the main field. e.g. "$field.ZIP"
+ */
+WsValidationFieldUtils.wsValueProcess = function(pWsType, pMainField)
+{//vars.get("$this.value") == null && 
+    if (WsValidationUtils.isWsEnabled(pWsType))
+    {
+        result.string(vars.get(pMainField));
+    }
+}
+
+/**
+ * Note: may call result.string(...)
+ *
+ * @param {WsValidationType} pWsType
+ * @param {String} field-variable from the main field. e.g. "$field.ZIP"
+ */
+WsValidationFieldUtils.wsDisplayValueProcess = function(pWsType, pMainField)
+{
+    if (WsValidationUtils.isWsEnabled(pWsType))
+    {
+        // use the value from the current field as display value (for instant refresh of display value
+        result.string(vars.get("$" + vars.get("$this.name")))
+    }
+}
+
+/**
+ * Note: may call result.string(...)
+ *
+ * @param {WsValidationType} pWsType
+ * @param {String} field-variable from the main field. e.g. "$field.ZIP"
+ */
+WsValidationFieldUtils.wsOnValueChangeProcess = function(pWsType, pMainField)
+{
+    if (WsValidationUtils.isWsEnabled(pWsType))
+    {
+        var newCurrentValue = WsValidationUtils.setAddressFields(vars.get("$local.value"));
+        
+        // Set the corresponding field if it was not set by setAddressFields because the value was not from the WS.
+        if (!newCurrentValue)
+            neon.setFieldValue(pMainField, vars.get("$local.value"));
+    }
 }
\ No newline at end of file
diff --git a/process/_test_clientProcess/_test_clientProcess.aod b/process/_test_clientProcess/_test_clientProcess.aod
index d9fc5ecafdcd42994d8d78fabbf27d9b1b13dbc7..8d3c013bc1005159af61b6cd0f747aafc1123135 100644
--- a/process/_test_clientProcess/_test_clientProcess.aod
+++ b/process/_test_clientProcess/_test_clientProcess.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>_test_clientProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/_test_clientProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/_test_clientProcess/process.js</process>
   <publishAsWebservice v="true" />
   <alias>Data_alias</alias>
diff --git a/process/_test_clientProcess/documentation.adoc b/process/_test_clientProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..681d75e93bd91e76bc2831c52727982319c6ff5f
--- /dev/null
+++ b/process/_test_clientProcess/documentation.adoc
@@ -0,0 +1,3 @@
+= _test_clientProcess
+
+Executeable Process for testing something in the client context
\ No newline at end of file
diff --git a/process/_test_clientProcess/process.js b/process/_test_clientProcess/process.js
index 273b7362004c369f828a237f97eafb777ee393d7..45a99f31db517376f49a73ed8a132b8d55c7ac18 100644
--- a/process/_test_clientProcess/process.js
+++ b/process/_test_clientProcess/process.js
@@ -1,21 +1 @@
-import("Sql_lib");
-import("system.datetime");
-import("system.util");
-import("system.logging");
-import("Liquibase_lib");
-import("system.db");
-import("system.fileIO");
-
-var alias = SqlUtils.getSystemAlias();
-//var alias = "betterDataSys";
-//var alias = "betterData";
-//var alias = db.getCurrentAlias();
-var outFolderPath = "C:\\temp\\generatedData\\" + alias + "\\";
-
-var excludedTables = ["AB_COUNTRYINFO", "AB_LANGUAGE"];
-//LiquiUtils.exportAllTablesAsLiquibaseFiles(outFolderPath, null, alias, excludedTables, true);
-
-alias = SqlUtils.getSystemAlias();
-outFolderPath = "C:\\temp\\generatedData\\" + alias + "\\";
-LiquiUtils.exportTableAsLiquibaseFiles(outFolderPath, "ASYS_USERS", null, "PROPKEY in ('mailserverAlias', 'userserverEnabled') ", null, false, alias);
-logging.log("finish");
\ No newline at end of file
+throw new Error("proccess not defined")
\ No newline at end of file
diff --git a/process/_test_importer/_test_importer.aod b/process/_test_importer/_test_importer.aod
index dbac3d114ee5bf9292a22d2fba0317cd6af67d7b..568877e7f2c885868cdbe59ec84437449790db82 100644
--- a/process/_test_importer/_test_importer.aod
+++ b/process/_test_importer/_test_importer.aod
@@ -3,6 +3,7 @@
   <name>_test_importer</name>
   <title>Importer</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/_test_importer/documentation.adoc</documentation>
   <process>%aditoprj%/process/_test_importer/process.js</process>
   <variants>
     <element>EXECUTABLE</element>
diff --git a/process/_test_importer/documentation.adoc b/process/_test_importer/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..73c74189523ce93e420282f9348dd4bf4d1d5bb1
--- /dev/null
+++ b/process/_test_importer/documentation.adoc
@@ -0,0 +1,3 @@
+= _test_importer
+
+Executeable Process for testing the importer. This process also provides an example for using the importer module.
\ No newline at end of file
diff --git a/process/blobHandler/process.js b/process/blobHandler/process.js
index ce84590c95bd6ad04f2e89398ca3e688dfdb0cf3..80fd6b0323da731d3d3304665bf91902cbc7ae5e 100644
--- a/process/blobHandler/process.js
+++ b/process/blobHandler/process.js
@@ -33,22 +33,22 @@ if (operation)
 
 function createBlob (path, filename) 
 {
-    _writeBlob(path + filename  + ".0")
+    _writeBlob(path + filename )
 }
 
 function deleteBlob (path, filename) 
 {
-    fileIO.remove(path + filename  + ".0");
+    fileIO.remove(path + filename );
 }
 
 function updateBlob (path, filename) 
 {
-    _writeBlob(path + filename + ".0");
+    _writeBlob(path + filename );
 }
 
 function readBlob (path, filename) 
 {
-    var fullPath = path + filename + ".0";
+    var fullPath = path + filename;
     var fromWhereCond = " from ASYS_BINARIES where ID = '" + filename + "'";
     
     sqlHelper = new SqlMaskingUtils();
@@ -58,9 +58,9 @@ function readBlob (path, filename)
         var blob = fileIO.getData(fullPath, util.DATA_BINARY);
         result.string(blob);
     }
-    else if (db.cell("select " + sqlHelper.bindataLength("BINDATA") + fromWhereCond) > 0)
+    else if (db.cell("select " + sqlHelper.bindataLength("BINDATA") + fromWhereCond, SqlUtils.getBinariesAlias()) > 0)
     {
-        blob = db.cell("select BINDATA " + fromWhereCond);
+        blob = db.cell("select BINDATA " + fromWhereCond, SqlUtils.getBinariesAlias() );
         result.string(blob);
     }
 }
diff --git a/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod b/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
index 0cfcaabc36e1978d969d6e4543408803fb9d1004..9b0cfecfde3e0a91cca8857de4d2ba2a8d4c97d3 100644
--- a/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
+++ b/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>buildSerialLetter_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/buildSerialLetter_serverProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/buildSerialLetter_serverProcess/process.js</process>
   <alias>Data_alias</alias>
   <variants>
diff --git a/process/buildSerialLetter_serverProcess/documentation.adoc b/process/buildSerialLetter_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b14e985e429701c890c24e6c0e3aa5aeff1d5632
--- /dev/null
+++ b/process/buildSerialLetter_serverProcess/documentation.adoc
@@ -0,0 +1,6 @@
+= buildSerialLetter_serverProcess
+
+Executeable Process to build the serial letter and download it.
+This process is executed by the bulkmail process.
+
+Is only executebale via JDITO not via user / manager.
\ No newline at end of file
diff --git a/process/buildSerialLetter_serverProcess/process.js b/process/buildSerialLetter_serverProcess/process.js
index fd114e183e7396551fd4031865056c8bd1fce14a..9b34df62172d03ad3627fef3f0554941815a4921 100644
--- a/process/buildSerialLetter_serverProcess/process.js
+++ b/process/buildSerialLetter_serverProcess/process.js
@@ -25,5 +25,6 @@ if (recipientIds && recipientIds.length > 0)
     
 var contactIds = db.table(condition.buildSql("select CONTACT_ID from LETTERRECIPIENT join CONTACT on LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID", "1=2"));
 var document = template.getSerialLetterByContactIds(contactIds);
+ 
 if (document)
     neon.download(document, template.filename);
\ No newline at end of file
diff --git a/process/exportLiquibaseContent_serverProcess/documentation.adoc b/process/exportLiquibaseContent_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..02ea0014a0982dbffbc144f5ea9888df8259dc6c
--- /dev/null
+++ b/process/exportLiquibaseContent_serverProcess/documentation.adoc
@@ -0,0 +1,4 @@
+= exportLiquibaseContent_serverProcess
+
+Process for exporting data to liquibase format.
+Often used to convert from demodata to liquibase.
\ No newline at end of file
diff --git a/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod b/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..117726612c9ffdc42c5f4e04273f6b9acf1c4094
--- /dev/null
+++ b/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>exportLiquibaseContent_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/exportLiquibaseContent_serverProcess/documentation.adoc</documentation>
+  <process>%aditoprj%/process/exportLiquibaseContent_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/exportLiquibaseContent_serverProcess/process.js b/process/exportLiquibaseContent_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..c641f1610619552228bf35aa8e46d501c6903fc4
--- /dev/null
+++ b/process/exportLiquibaseContent_serverProcess/process.js
@@ -0,0 +1,37 @@
+import("system.vars");
+import("Sql_lib");
+import("system.datetime");
+import("system.util");
+import("system.logging");
+import("Liquibase_lib");
+import("system.db");
+import("system.fileIO");
+
+var alias = "diffAlias";
+var outFolderBase = vars.get("$sys.servertemp") + "/" + alias + "/";
+
+var outFolderPath = outFolderBase + "generatedData/";
+
+var excludedTables = ["AB_COUNTRYINFO", "AB_LANGUAGE"];
+excludedTables.push("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTERELATION", "AB_KEYWORD_ENTRY");
+excludedTables.push("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE");
+var exportRes = LiquiUtils.exportAllTablesAsLiquibaseFiles(outFolderPath, null, alias, excludedTables, true);
+var exportedTables = exportRes.exportedTables;
+var changeLogData = LiquiXmlUtils.databaseChangeLog("autogenerated");
+exportedTables.forEach(function (tableName){
+    var fileValue = "generatedData/" + tableName + ".xml";
+    changeLogData.appendChild(<include relativeToChangelogFile="true" file={
+        fileValue
+        }/>);    
+});
+changeLogData = LiquiXmlUtils.xmlHeaderLineStr() + "\n" + changeLogData.toString();
+fileIO.storeData(outFolderBase + "changelog.xml", changeLogData, util.DATA_TEXT, false, "UTF8");
+logging.log("liquibase data (" + exportedTables.length + " tables) exported into folder:" + outFolderPath);
+
+//remember to change the alias db to the data_system when running binaries exporter:
+//LiquiUtils.exportTableAsLiquibaseFiles(outFolderPath, "ASYS_BINARIES", null, null, null, false, alias);
+
+//alias = SqlUtils.getSystemAlias();
+//outFolderPath = "C:\\temp\\generatedData\\" + alias + "\\";
+//LiquiUtils.exportTableAsLiquibaseFiles(outFolderPath, "ASYS_USERS", null, "PROPKEY in ('mailserverAlias', 'userserverEnabled') ", null, false, alias);
+//logging.log("finish");
\ No newline at end of file
diff --git a/process/getDocxDocument_serverProcess/documentation.adoc b/process/getDocxDocument_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..3f7cd4b2de0be4b1eee7b14e953598705ca0496b
--- /dev/null
+++ b/process/getDocxDocument_serverProcess/documentation.adoc
@@ -0,0 +1,13 @@
+= getDocxDocument_serverProcess
+
+Process for working with Docx in JavaScript.
+Is only executebale via JDITO not via user / manager.
+
+This Process has 13k lines of code since 2 js-libs are included (results in about 420KB)
+The maximum size limit for pre-compiling is 64KB. If this process would be a "lib_" it'd cause every process where
+it's imported to be interpreted. As a serverprocess only this sp is interpreted
+
+Override the definition of the IntegerArrays, because Rhino does not fully support these TypedArrays.
+The zip- and tempalter- lib check if these TypedArrays are defined and then uses them or an alternative.
+Therefor make them not existant so that the alternative is used. 
+This should not cause any problems in other situations since this is a serverProcess and not code that is imported somewhere else.
\ No newline at end of file
diff --git a/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod b/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
index 9e1fa2db82027ac987033e6c2a0f3b98220d64a8..b1f3151abdb6dc733e14ee175fd1d33f2d890e33 100644
--- a/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
+++ b/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>getDocxDocument_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/getDocxDocument_serverProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/getDocxDocument_serverProcess/process.js</process>
   <variants>
     <element>EXECUTABLE</element>
diff --git a/process/getDocxDocument_serverProcess/process.js b/process/getDocxDocument_serverProcess/process.js
index 12ab4e172f914455bd6af4a0eb501fc23d6fcbd2..a3a086a5a32ddc09f7de5a72cd7b0a76f5072e26 100644
--- a/process/getDocxDocument_serverProcess/process.js
+++ b/process/getDocxDocument_serverProcess/process.js
@@ -4,18 +4,6 @@ import("system.swing");
 import("system.fileIO");
 import("system.util");
 
-/* This is a serverprocess to improve the performance
- * This Process has 13k lines of code since 2 js-libs are included (results in about 420KB)
- * The maximum size limit for pre-compiling is 64KB. If this process would be a "lib_" it'd cause every process where
- * it's imported to be interpreted. As a serverprocess only this sp is interpreted
- */
-
- /*
- Override the definition of the IntegerArrays, because Rhino does not fully support these TypedArrays.
- The zip- and tempalter- lib check if these TypedArrays are defined and then uses them or an alternative.
- Therefor make them not existant so that the alternative is used. 
- This should not cause any problems in other situations since this is a serverProcess and not code that is imported somewhere else.
- */
 Int8Array = undefined;
 Uint8Array = undefined;
 Uint8ClampedArray = undefined;
@@ -107,7 +95,7 @@ function _getAutoNewLineModule()
 
 
 /*
- * do NOT TOUCH the following code. these are js-libraries
+ * do NOT TOUCH the following code. these are js-libraries (modified to remove all jdito warnings)
  */
 
 
@@ -149,8 +137,59 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 */
 function initJsZip()
 {
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-'use strict';
+(function (f) {
+    if (typeof exports === "object" && typeof module !== "undefined") {
+        module.exports = f()
+    } else if (typeof define === "function" && define.amd) {
+        define([], f)
+    } else {
+        var g;
+        if (typeof window !== "undefined") {
+            g = window
+        } else if (typeof global !== "undefined") {
+            g = global
+        } else if (typeof self !== "undefined") {
+            g = self
+        } else {
+            g = this
+        }
+        g.JSZip = f()
+    }
+})(function () {
+    var define,
+    module,
+    exports;
+    return (function e(t, n, r) {
+        function s(o, u) {
+            if (!n[o]) {
+                if (!t[o]) {
+                    var a1 = typeof require == "function" && require;
+                    if (!u && a1)
+                        return a1(o, !0);
+                    if (i1)
+                        return i1(o, !0);
+                    var f = new Error("Cannot find module '" + o + "'");
+                    throw f.code = "MODULE_NOT_FOUND",
+                    f
+                }
+                var l = n[o] = {
+                    exports: {}
+                };
+                t[o][0].call(l.exports, function (e) {
+                    var n = t[o][1][e];
+                    return s(n ? n : e)
+                }, l, l.exports, e, t, n, r)
+            }
+            return n[o].exports
+        }
+        var i1 = typeof require == "function" && require;
+        for (var o = 0; o < r.length; o++)
+            s(r[o]);
+        return s
+    })({
+        1: [function (require, module, exports)
+{
+
 var DataReader = require('./dataReader');
 
 function ArrayReader(data) {
@@ -196,14 +235,14 @@ ArrayReader.prototype.readData = function(size) {
     if(size === 0) {
         return [];
     }
-    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
+    var res = this.data.slice(this.zero + this.index, this.zero + this.index + size);
     this.index += size;
-    return result;
+    return res;
 };
 module.exports = ArrayReader;
 
 },{"./dataReader":6}],2:[function(require,module,exports){
-'use strict';
+
 // private property
 var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
@@ -275,7 +314,7 @@ exports.decode = function(input, utf8) {
 };
 
 },{}],3:[function(require,module,exports){
-'use strict';
+
 function CompressedObject() {
     this.compressedSize = 0;
     this.uncompressedSize = 0;
@@ -305,7 +344,7 @@ CompressedObject.prototype = {
 module.exports = CompressedObject;
 
 },{}],4:[function(require,module,exports){
-'use strict';
+
 exports.STORE = {
     magic: "\x00\x00",
     compress: function(content, compressionOptions) {
@@ -320,7 +359,7 @@ exports.STORE = {
 exports.DEFLATE = require('./flate');
 
 },{"./flate":9}],5:[function(require,module,exports){
-'use strict';
+
 
 var utils = require('./utils');
 
@@ -424,7 +463,7 @@ module.exports = function crc32(input, crc) {
 // vim: set shiftwidth=4 softtabstop=4:
 
 },{"./utils":22}],6:[function(require,module,exports){
-'use strict';
+
 var utils = require('./utils');
 
 function DataReader(data) {
@@ -483,14 +522,14 @@ DataReader.prototype = {
      * @return {number} the corresponding number.
      */
     readInt: function(size) {
-        var result = 0,
+        var res = 0,
             i;
         this.checkOffset(size);
         for (i = this.index + size - 1; i >= this.index; i--) {
-            result = (result << 8) + this.byteAt(i);
+            res = (res << 8) + this.byteAt(i);
         }
         this.index += size;
-        return result;
+        return res;
     },
     /**
      * Get the next string with a given byte size.
@@ -534,7 +573,7 @@ DataReader.prototype = {
 module.exports = DataReader;
 
 },{"./utils":22}],7:[function(require,module,exports){
-'use strict';
+
 exports.base64 = false;
 exports.binary = false;
 exports.dir = false;
@@ -547,11 +586,11 @@ exports.unixPermissions = null;
 exports.dosPermissions = null;
 
 },{}],8:[function(require,module,exports){
-'use strict';
+
 var utils = require('./utils');
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.string2binary = function(str) {
@@ -559,7 +598,7 @@ exports.string2binary = function(str) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.string2Uint8Array = function(str) {
@@ -567,7 +606,7 @@ exports.string2Uint8Array = function(str) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.uint8Array2String = function(array) {
@@ -575,7 +614,7 @@ exports.uint8Array2String = function(array) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.string2Blob = function(str) {
@@ -584,7 +623,7 @@ exports.string2Blob = function(str) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.arrayBuffer2Blob = function(buffer) {
@@ -592,7 +631,7 @@ exports.arrayBuffer2Blob = function(buffer) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.transformTo = function(outputType, input) {
@@ -600,7 +639,7 @@ exports.transformTo = function(outputType, input) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.getTypeOf = function(input) {
@@ -608,7 +647,7 @@ exports.getTypeOf = function(input) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.checkSupport = function(type) {
@@ -616,20 +655,20 @@ exports.checkSupport = function(type) {
 };
 
 /**
- * @deprecated
+ * 
  * This value will be removed in a future version without replacement.
  */
 exports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;
 
 /**
- * @deprecated
+ * 
  * This value will be removed in a future version without replacement.
  */
 exports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;
 
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.pretty = function(str) {
@@ -637,7 +676,7 @@ exports.pretty = function(str) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.findCompression = function(compressionMethod) {
@@ -645,7 +684,7 @@ exports.findCompression = function(compressionMethod) {
 };
 
 /**
- * @deprecated
+ * 
  * This function will be removed in a future version without replacement.
  */
 exports.isRegExp = function (object) {
@@ -654,7 +693,7 @@ exports.isRegExp = function (object) {
 
 
 },{"./utils":22}],9:[function(require,module,exports){
-'use strict';
+
 var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
 
 var pako = require("pako");
@@ -672,7 +711,7 @@ exports.uncompress =  function(input) {
 };
 
 },{"pako":25}],10:[function(require,module,exports){
-'use strict';
+
 
 var base64 = require('./base64');
 
@@ -721,6 +760,7 @@ function JSZip(data, options) {
         }
         return newObj;
     };
+    return undefined
 }
 JSZip.prototype = require('./object');
 JSZip.prototype.load = require('./load');
@@ -728,21 +768,21 @@ JSZip.support = require('./support');
 JSZip.defaults = require('./defaults');
 
 /**
- * @deprecated
+ * 
  * This namespace will be removed in a future version without replacement.
  */
 JSZip.utils = require('./deprecatedPublicUtils');
 
 JSZip.base64 = {
     /**
-     * @deprecated
+     * 
      * This method will be removed in a future version without replacement.
      */
     encode : function(input) {
         return base64.encode(input);
     },
     /**
-     * @deprecated
+     * 
      * This method will be removed in a future version without replacement.
      */
     decode : function(input) {
@@ -753,7 +793,7 @@ JSZip.compressions = require('./compressions');
 module.exports = JSZip;
 
 },{"./base64":2,"./compressions":4,"./defaults":7,"./deprecatedPublicUtils":8,"./load":11,"./object":14,"./support":18}],11:[function(require,module,exports){
-'use strict';
+
 var base64 = require('./base64');
 var utf8 = require('./utf8');
 var utils = require('./utils');
@@ -795,7 +835,7 @@ module.exports = function(data, options) {
 
 },{"./base64":2,"./utf8":21,"./utils":22,"./zipEntries":23}],12:[function(require,module,exports){
 (function (Buffer){
-'use strict';
+
 module.exports = function(data, encoding){
     return new Buffer(data, encoding);
 };
@@ -805,7 +845,7 @@ module.exports.test = function(b){
 
 }).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
 },{}],13:[function(require,module,exports){
-'use strict';
+
 var Uint8ArrayReader = require('./uint8ArrayReader');
 
 function NodeBufferReader(data) {
@@ -821,14 +861,14 @@ NodeBufferReader.prototype = new Uint8ArrayReader();
  */
 NodeBufferReader.prototype.readData = function(size) {
     this.checkOffset(size);
-    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
+    var res = this.data.slice(this.zero + this.index, this.zero + this.index + size);
     this.index += size;
-    return result;
+    return res;
 };
 module.exports = NodeBufferReader;
 
 },{"./uint8ArrayReader":19}],14:[function(require,module,exports){
-'use strict';
+
 var support = require('./support');
 var utils = require('./utils');
 var crc32 = require('./crc32');
@@ -873,19 +913,19 @@ var getRawData = function(file) {
  * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
  */
 var getBinaryData = function(file) {
-    var result = getRawData(file),
-        type = utils.getTypeOf(result);
+    var res = getRawData(file),
+        type = utils.getTypeOf(res);
     if (type === "string") {
         if (!file.options.binary) {
             // unicode text !
             // unicode string => binary string is a painful process, check if we can avoid it.
             if (support.nodebuffer) {
-                return nodeBuffer(result, "utf-8");
+                return nodeBuffer(res, "utf-8");
             }
         }
         return file.asBinary();
     }
-    return result;
+    return res;
 };
 
 /**
@@ -894,28 +934,28 @@ var getBinaryData = function(file) {
  * @return {String} the string representing this._data.
  */
 var dataToString = function(asUTF8) {
-    var result = getRawData(this);
-    if (result === null || typeof result === "undefined") {
+    var res = getRawData(this);
+    if (res === null || typeof result === "undefined") {
         return "";
     }
     // if the data is a base64 string, we decode it before checking the encoding !
     if (this.options.base64) {
-        result = base64.decode(result);
+        res = base64.decode(res);
     }
     if (asUTF8 && this.options.binary) {
         // JSZip.prototype.utf8decode supports arrays as input
         // skip to array => string step, utf8decode will do it.
-        result = out.utf8decode(result);
+        res = out.utf8decode(res);
     }
     else {
         // no utf8 transformation, do the array => string step.
-        result = utils.transformTo("string", result);
+        res = utils.transformTo("string", res);
     }
 
     if (!asUTF8 && !this.options.binary) {
-        result = utils.transformTo("string", out.utf8encode(result));
+        res = utils.transformTo("string", out.utf8encode(res));
     }
-    return result;
+    return res;
 };
 /**
  * A simple object representing a file in the zip file.
@@ -966,16 +1006,16 @@ ZipObject.prototype = {
      * @return {Buffer} the content as a Buffer.
      */
     asNodeBuffer: function() {
-        var result = getBinaryData(this);
-        return utils.transformTo("nodebuffer", result);
+        var res = getBinaryData(this);
+        return utils.transformTo("nodebuffer", res);
     },
     /**
      * Returns the content as an Uint8Array.
      * @return {Uint8Array} the content as an Uint8Array.
      */
     asUint8Array: function() {
-        var result = getBinaryData(this);
-        return utils.transformTo("uint8array", result);
+        var res = getBinaryData(this);
+        return utils.transformTo("uint8array", res);
     },
     /**
      * Returns the content as an ArrayBuffer.
@@ -1152,26 +1192,26 @@ var folderAdd = function(name, createFolders) {
  * @return {JSZip.CompressedObject} the compressed result.
  */
 var generateCompressedObjectFrom = function(file, compression, compressionOptions) {
-    var result = new CompressedObject(),
+    var res = new CompressedObject(),
         content;
 
     // the data has not been decompressed, we might reuse things !
     if (file._data instanceof CompressedObject) {
-        result.uncompressedSize = file._data.uncompressedSize;
-        result.crc32 = file._data.crc32;
+        res.uncompressedSize = file._data.uncompressedSize;
+        res.crc32 = file._data.crc32;
 
-        if (result.uncompressedSize === 0 || file.dir) {
+        if (res.uncompressedSize === 0 || file.dir) {
             compression = compressions['STORE'];
-            result.compressedContent = "";
-            result.crc32 = 0;
+            res.compressedContent = "";
+            res.crc32 = 0;
         }
         else if (file._data.compressionMethod === compression.magic) {
-            result.compressedContent = file._data.getCompressedContent();
+            res.compressedContent = file._data.getCompressedContent();
         }
         else {
             content = file._data.getContent();
             // need to decompress / recompress
-            result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
+            res.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
         }
     }
     else {
@@ -1181,15 +1221,15 @@ var generateCompressedObjectFrom = function(file, compression, compressionOption
             compression = compressions['STORE'];
             content = "";
         }
-        result.uncompressedSize = content.length;
-        result.crc32 = crc32(content);
-        result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
+        res.uncompressedSize = content.length;
+        res.crc32 = crc32(content);
+        res.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
     }
 
-    result.compressedSize = result.compressedContent.length;
-    result.compressionMethod = compression.magic;
+    res.compressedSize = res.compressedContent.length;
+    res.compressionMethod = compression.magic;
 
-    return result;
+    return res;
 };
 
 
@@ -1212,15 +1252,15 @@ var generateCompressedObjectFrom = function(file, compression, compressionOption
  */
 var generateUnixExternalFileAttr = function (unixPermissions, isDir) {
 
-    var result = unixPermissions;
+    var res = unixPermissions;
     if (!unixPermissions) {
         // I can't use octal values in strict mode, hence the hexa.
         //  040775 => 0x41fd
         // 0100664 => 0x81b4
-        result = isDir ? 0x41fd : 0x81b4;
+        res = isDir ? 0x41fd : 0x81b4;
     }
 
-    return (result & 0xFFFF) << 16;
+    return (res & 0xFFFF) << 16;
 };
 
 /**
@@ -1269,7 +1309,7 @@ var generateZipParts = function(name, file, compressedObject, offset, platform,
         extraFields = "",
         unicodePathExtraField = "",
         unicodeCommentExtraField = "",
-        dir, date;
+        dir, date1;
 
 
     // handle the deprecated options.dir
@@ -1281,9 +1321,9 @@ var generateZipParts = function(name, file, compressedObject, offset, platform,
 
     // handle the deprecated options.date
     if(file._initialMetadata.date !== file.date) {
-        date = file.date;
+        date1 = file.date;
     } else {
-        date = o.date;
+        date1 = o.date;
     }
 
     var extFileAttr = 0;
@@ -1305,17 +1345,17 @@ var generateZipParts = function(name, file, compressedObject, offset, platform,
     // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
     // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
 
-    dosTime = date.getHours();
+    dosTime = date1.getHours();
     dosTime = dosTime << 6;
-    dosTime = dosTime | date.getMinutes();
+    dosTime = dosTime | date1.getMinutes();
     dosTime = dosTime << 5;
-    dosTime = dosTime | date.getSeconds() / 2;
+    dosTime = dosTime | date1.getSeconds() / 2;
 
-    dosDate = date.getFullYear() - 1980;
+    dosDate = date1.getFullYear() - 1980;
     dosDate = dosDate << 4;
-    dosDate = dosDate | (date.getMonth() + 1);
+    dosDate = dosDate | (date1.getMonth() + 1);
     dosDate = dosDate << 5;
-    dosDate = dosDate | date.getDate();
+    dosDate = dosDate | date1.getDate();
 
     if (useUTF8ForFileName) {
         // set the unicode path extra field. unzip needs at least one extra
@@ -1442,7 +1482,7 @@ var out = {
      * @return {Array} An array of matching elements.
      */
     filter: function(search) {
-        var result = [],
+        var res = [],
             filename, relativePath, file, fileClone;
         for (filename in this.files) {
             if (!this.files.hasOwnProperty(filename)) {
@@ -1454,10 +1494,10 @@ var out = {
             relativePath = filename.slice(this.root.length, filename.length);
             if (filename.slice(0, this.root.length) === this.root && // the file is in the current root
             search(relativePath, fileClone)) { // and the file matches the function
-                result.push(fileClone);
+                res.push(fileClone);
             }
         }
-        return result;
+        return res;
     },
 
     /**
@@ -1674,7 +1714,6 @@ var out = {
     },
 
     /**
-     * @deprecated
      * This method will be removed in a future version without replacement.
      */
     crc32: function (input, crc) {
@@ -1682,7 +1721,6 @@ var out = {
     },
 
     /**
-     * @deprecated
      * This method will be removed in a future version without replacement.
      */
     utf8encode: function (string) {
@@ -1690,7 +1728,6 @@ var out = {
     },
 
     /**
-     * @deprecated
      * This method will be removed in a future version without replacement.
      */
     utf8decode: function (input) {
@@ -1700,7 +1737,7 @@ var out = {
 module.exports = out;
 
 },{"./base64":2,"./compressedObject":3,"./compressions":4,"./crc32":5,"./defaults":7,"./nodeBuffer":12,"./signature":15,"./stringWriter":17,"./support":18,"./uint8ArrayWriter":20,"./utf8":21,"./utils":22}],15:[function(require,module,exports){
-'use strict';
+
 exports.LOCAL_FILE_HEADER = "PK\x03\x04";
 exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
 exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
@@ -1709,7 +1746,7 @@ exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
 exports.DATA_DESCRIPTOR = "PK\x07\x08";
 
 },{}],16:[function(require,module,exports){
-'use strict';
+
 var DataReader = require('./dataReader');
 var utils = require('./utils');
 
@@ -1741,14 +1778,14 @@ StringReader.prototype.lastIndexOfSignature = function(sig) {
 StringReader.prototype.readData = function(size) {
     this.checkOffset(size);
     // this will work because the constructor applied the "& 0xff" mask.
-    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
+    var res = this.data.slice(this.zero + this.index, this.zero + this.index + size);
     this.index += size;
-    return result;
+    return res;
 };
 module.exports = StringReader;
 
 },{"./dataReader":6,"./utils":22}],17:[function(require,module,exports){
-'use strict';
+
 
 var utils = require('./utils');
 
@@ -1781,7 +1818,7 @@ module.exports = StringWriter;
 
 },{"./utils":22}],18:[function(require,module,exports){
 (function (Buffer){
-'use strict';
+
 exports.base64 = true;
 exports.array = true;
 exports.string = true;
@@ -1818,7 +1855,7 @@ else {
 
 }).call(this,(typeof Buffer !== "undefined" ? Buffer : undefined))
 },{}],19:[function(require,module,exports){
-'use strict';
+
 var ArrayReader = require('./arrayReader');
 
 function Uint8ArrayReader(data) {
@@ -1839,14 +1876,14 @@ Uint8ArrayReader.prototype.readData = function(size) {
         // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
         return new Uint8Array(0);
     }
-    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
+    var res = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
     this.index += size;
-    return result;
+    return res;
 };
 module.exports = Uint8ArrayReader;
 
 },{"./arrayReader":1}],20:[function(require,module,exports){
-'use strict';
+
 
 var utils = require('./utils');
 
@@ -1884,7 +1921,7 @@ Uint8ArrayWriter.prototype = {
 module.exports = Uint8ArrayWriter;
 
 },{"./utils":22}],21:[function(require,module,exports){
-'use strict';
+
 
 var utils = require('./utils');
 var support = require('./support');
@@ -2077,23 +2114,23 @@ exports.utf8decode = function utf8decode(buf) {
     // Chrome prefers to work with "small" chunks of data
     // for the method buf2string.
     // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.
-    var result = [], k = 0, len = buf.length, chunk = 65536;
+    var res = [], k = 0, len = buf.length, chunk = 65536;
     while (k < len) {
         var nextBoundary = utf8border(buf, Math.min(k + chunk, len));
         if (support.uint8array) {
-            result.push(buf2string(buf.subarray(k, nextBoundary)));
+            res.push(buf2string(buf.subarray(k, nextBoundary)));
         } else {
-            result.push(buf2string(buf.slice(k, nextBoundary)));
+            res.push(buf2string(buf.slice(k, nextBoundary)));
         }
         k = nextBoundary;
     }
-    return result.join("");
+    return res.join("");
 
 };
 // vim: set shiftwidth=4 softtabstop=4:
 
 },{"./nodeBuffer":12,"./support":18,"./utils":22}],22:[function(require,module,exports){
-'use strict';
+
 var support = require('./support');
 var compressions = require('./compressions');
 var nodeBuffer = require('./nodeBuffer');
@@ -2103,11 +2140,11 @@ var nodeBuffer = require('./nodeBuffer');
  * @return {String} the binary string.
  */
 exports.string2binary = function(str) {
-    var result = "";
+    var res = "";
     for (var i = 0; i < str.length; i++) {
-        result += String.fromCharCode(str.charCodeAt(i) & 0xff);
+        res += String.fromCharCode(str.charCodeAt(i) & 0xff);
     }
-    return result;
+    return res;
 };
 exports.arrayBuffer2Blob = function(buffer, mimeType) {
     exports.checkSupport("blob");
@@ -2175,7 +2212,7 @@ function arrayLikeToString(array) {
     //
     // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
     var chunk = 65536;
-    var result = [],
+    var res = [],
         len = array.length,
         type = exports.getTypeOf(array),
         k = 0,
@@ -2205,10 +2242,10 @@ function arrayLikeToString(array) {
     while (k < len && chunk > 1) {
         try {
             if (type === "array" || type === "nodebuffer") {
-                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
+                res.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
             }
             else {
-                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
+                res.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
             }
             k += chunk;
         }
@@ -2216,7 +2253,7 @@ function arrayLikeToString(array) {
             chunk = Math.floor(chunk / 2);
         }
     }
-    return result.join("");
+    return res.join("");
 }
 
 exports.applyFromCharCode = arrayLikeToString;
@@ -2336,8 +2373,8 @@ exports.transformTo = function(outputType, input) {
     }
     exports.checkSupport(outputType);
     var inputType = exports.getTypeOf(input);
-    var result = transform[inputType][outputType](input);
-    return result;
+    var res = transform[inputType][outputType](input);
+    return res;
 };
 
 /**
@@ -2362,6 +2399,7 @@ exports.getTypeOf = function(input) {
     if (support.arraybuffer && input instanceof ArrayBuffer) {
         return "arraybuffer";
     }
+    return undefined;
 };
 
 /**
@@ -2425,21 +2463,21 @@ exports.isRegExp = function (object) {
  * @param {...Object} var_args All objects to merge.
  * @return {Object} a new object with the data of the others.
  */
-exports.extend = function() {
-    var result = {}, i, attr;
+exports.extend = function(var_args) {
+    var res = {}, i, attr;
     for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers
         for (attr in arguments[i]) {
-            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
-                result[attr] = arguments[i][attr];
+            if (arguments[i].hasOwnProperty(attr) && typeof res[attr] === "undefined") {
+                res[attr] = arguments[i][attr];
             }
         }
     }
-    return result;
+    return res;
 };
 
 
 },{"./compressions":4,"./nodeBuffer":12,"./support":18}],23:[function(require,module,exports){
-'use strict';
+
 var StringReader = require('./stringReader');
 var NodeBufferReader = require('./nodeBufferReader');
 var Uint8ArrayReader = require('./uint8ArrayReader');
@@ -2485,9 +2523,9 @@ ZipEntries.prototype = {
         var currentIndex = this.reader.index;
         this.reader.setIndex(askedIndex);
         var signature = this.reader.readString(4);
-        var result = signature === expectedSignature;
+        var res = signature === expectedSignature;
         this.reader.setIndex(currentIndex);
-        return result;
+        return res;
     },
     /**
      * Read the end of the central directory.
@@ -2721,7 +2759,7 @@ ZipEntries.prototype = {
 module.exports = ZipEntries;
 
 },{"./arrayReader":1,"./nodeBufferReader":13,"./object":14,"./signature":15,"./stringReader":16,"./support":18,"./uint8ArrayReader":19,"./utils":22,"./zipEntry":24}],24:[function(require,module,exports){
-'use strict';
+
 var StringReader = require('./stringReader');
 var utils = require('./utils');
 var CompressedObject = require('./compressedObject');
@@ -3043,7 +3081,7 @@ module.exports = ZipEntry;
 
 },{"./compressedObject":3,"./object":14,"./stringReader":16,"./support":18,"./utils":22}],25:[function(require,module,exports){
 // Top level file is just a mixin of submodules & constants
-'use strict';
+
 
 var assign    = require('./lib/utils/common').assign;
 
@@ -3058,7 +3096,7 @@ assign(pako, deflate, inflate, constants);
 module.exports = pako;
 
 },{"./lib/deflate":26,"./lib/inflate":27,"./lib/utils/common":28,"./lib/zlib/constants":31}],26:[function(require,module,exports){
-'use strict';
+
 
 
 var zlib_deflate = require('./zlib/deflate');
@@ -3245,6 +3283,8 @@ function Deflate(options) {
 
     this._dict_set = true;
   }
+  
+  return undefined;
 }
 
 /**
@@ -3460,7 +3500,7 @@ exports.deflateRaw = deflateRaw;
 exports.gzip = gzip;
 
 },{"./utils/common":28,"./utils/strings":29,"./zlib/deflate":33,"./zlib/messages":38,"./zlib/zstream":40}],27:[function(require,module,exports){
-'use strict';
+
 
 
 var zlib_inflate = require('./zlib/inflate');
@@ -3606,6 +3646,7 @@ function Inflate(options) {
   this.header = new GZheader();
 
   zlib_inflate.inflateGetHeader(this.strm, this.header);
+  return undefined;
 }
 
 /**
@@ -3880,7 +3921,7 @@ exports.inflateRaw = inflateRaw;
 exports.ungzip  = inflate;
 
 },{"./utils/common":28,"./utils/strings":29,"./zlib/constants":31,"./zlib/gzheader":34,"./zlib/inflate":36,"./zlib/messages":38,"./zlib/zstream":40}],28:[function(require,module,exports){
-'use strict';
+
 
 
 var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
@@ -3931,7 +3972,7 @@ var fnTyped = {
   },
   // Join array of chunks to single array.
   flattenChunks: function (chunks) {
-    var i, l, len, pos, chunk, result;
+    var i, l, len, pos, chunk, res;
 
     // calculate data length
     len = 0;
@@ -3940,15 +3981,15 @@ var fnTyped = {
     }
 
     // join chunks
-    result = new Uint8Array(len);
+    res = new Uint8Array(len);
     pos = 0;
     for (i = 0, l = chunks.length; i < l; i++) {
       chunk = chunks[i];
-      result.set(chunk, pos);
+      res.set(chunk, pos);
       pos += chunk.length;
     }
 
-    return result;
+    return res;
   }
 };
 
@@ -3985,7 +4026,7 @@ exports.setTyped(TYPED_OK);
 
 },{}],29:[function(require,module,exports){
 // String encode/decode helpers
-'use strict';
+
 
 
 var utils = require('./common');
@@ -4076,11 +4117,11 @@ function buf2binstring(buf, len) {
     }
   }
 
-  var result = '';
+  var res = '';
   for (var i = 0; i < len; i++) {
-    result += String.fromCharCode(buf[i]);
+    res += String.fromCharCode(buf[i]);
   }
-  return result;
+  return res;
 }
 
 
@@ -4171,7 +4212,7 @@ exports.utf8border = function (buf, max) {
 };
 
 },{"./common":28}],30:[function(require,module,exports){
-'use strict';
+
 
 // Note: adler32 takes 12% for level 0 and 2% for level 6.
 // It doesn't worth to make additional optimizationa as in original.
@@ -4205,7 +4246,7 @@ function adler32(adler, buf, len, pos) {
 module.exports = adler32;
 
 },{}],31:[function(require,module,exports){
-'use strict';
+
 
 
 module.exports = {
@@ -4257,7 +4298,7 @@ module.exports = {
 };
 
 },{}],32:[function(require,module,exports){
-'use strict';
+
 
 // Note: we can't get significant speed boost here.
 // So write code to minimize size - no pregenerated tables
@@ -4300,7 +4341,7 @@ function crc32(crc, buf, len, pos) {
 module.exports = crc32;
 
 },{}],33:[function(require,module,exports){
-'use strict';
+
 
 var utils   = require('../utils/common');
 var trees   = require('./trees');
@@ -6157,7 +6198,7 @@ exports.deflateTune = deflateTune;
 */
 
 },{"../utils/common":28,"./adler32":30,"./crc32":32,"./messages":38,"./trees":39}],34:[function(require,module,exports){
-'use strict';
+
 
 
 function GZheader() {
@@ -6199,7 +6240,7 @@ function GZheader() {
 module.exports = GZheader;
 
 },{}],35:[function(require,module,exports){
-'use strict';
+
 
 // See state defs from inflate.js
 var BAD = 30;       /* got a data error -- remain here until reset */
@@ -6527,7 +6568,7 @@ module.exports = function inflate_fast(strm, start) {
 };
 
 },{}],36:[function(require,module,exports){
-'use strict';
+
 
 
 var utils         = require('../utils/common');
@@ -8067,7 +8108,7 @@ exports.inflateUndermine = inflateUndermine;
 */
 
 },{"../utils/common":28,"./adler32":30,"./crc32":32,"./inffast":35,"./inftrees":37}],37:[function(require,module,exports){
-'use strict';
+
 
 
 var utils = require('../utils/common');
@@ -8396,7 +8437,7 @@ module.exports = function inflate_table(type, lens, lens_index, codes, table, ta
 };
 
 },{"../utils/common":28}],38:[function(require,module,exports){
-'use strict';
+
 
 module.exports = {
   2:      'need dictionary',     /* Z_NEED_DICT       2  */
@@ -8411,7 +8452,7 @@ module.exports = {
 };
 
 },{}],39:[function(require,module,exports){
-'use strict';
+
 
 
 var utils = require('../utils/common');
@@ -9615,7 +9656,7 @@ exports._tr_tally = _tr_tally;
 exports._tr_align = _tr_align;
 
 },{"../utils/common":28}],40:[function(require,module,exports){
-'use strict';
+
 
 
 function ZStream() {
@@ -9647,7 +9688,7 @@ module.exports = ZStream;
 
 },{}]},{},[10])(10)
 });
-};
+}
 
 
 //templater
@@ -9669,8 +9710,58 @@ function initTemplater()
 {
     initJsZip();
 
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Docxtemplater = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-"use strict";
+(function (f) {
+    if (typeof exports === "object" && typeof module !== "undefined") {
+        module.exports = f()
+    } else if (typeof define === "function" && define.amd) {
+        define([], f)
+    } else {
+        var g;
+        if (typeof window !== "undefined") {
+            g = window
+        } else if (typeof global !== "undefined") {
+            g = global
+        } else if (typeof self !== "undefined") {
+            g = self
+        } else {
+            g = this
+        }
+        g.Docxtemplater = f()
+    }
+})(function () {
+    var define,
+    module,
+    exports;
+    return (function e(t, n, r) {
+        function s(o, u) {
+            if (!n[o]) {
+                if (!t[o]) {
+                    var a1 = typeof require == "function" && require;
+                    if (!u && a1)
+                        return a1(o, !0);
+                    if (i1)
+                        return i1(o, !0);
+                    var f = new Error("Cannot find module '" + o + "'");
+                    throw f.code = "MODULE_NOT_FOUND",
+                    f
+                }
+                var l = n[o] = {
+                    exports: {}
+                };
+                t[o][0].call(l.exports, function (e) {
+                    var n = t[o][1][e];
+                    return s(n ? n : e)
+                }, l, l.exports, e, t, n, r)
+            }
+            return n[o].exports
+        }
+        var i1 = typeof require == "function" && require;
+        for (var o = 0; o < r.length; o++)
+            s(r[o]);
+        return s
+    })({
+        1: [function (require, module, exports) 
+{
 
 function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
@@ -9723,8 +9814,8 @@ DocUtils.mergeObjects = function () {
 };
 
 DocUtils.xml2str = function (xmlNode) {
-	var a = new XMLSerializer();
-	return a.serializeToString(xmlNode);
+	var a1 = new XMLSerializer();
+	return a1.serializeToString(xmlNode);
 };
 
 DocUtils.decodeUtf8 = function (s) {
@@ -9799,9 +9890,9 @@ DocUtils.cloneDeep = function (obj) {
 };
 
 DocUtils.concatArrays = function (arrays) {
-	return arrays.reduce(function (result, array) {
-		Array.prototype.push.apply(result, array);
-		return result;
+	return arrays.reduce(function (res, array) {
+		Array.prototype.push.apply(res, array);
+		return res;
 	}, []);
 };
 
@@ -9848,6 +9939,7 @@ DocUtils.getRight = function (parsed, element, index) {
 		}
 	}
 	throwXmlTagNotFound({ position: "right", element: element, parsed: parsed, index: index });
+        return undefined;
 };
 
 DocUtils.getLeft = function (parsed, element, index) {
@@ -9858,11 +9950,12 @@ DocUtils.getLeft = function (parsed, element, index) {
 		}
 	}
 	throwXmlTagNotFound({ position: "left", element: element, parsed: parsed, index: index });
+        return undefined;
 };
 
 module.exports = DocUtils;
 },{"./errors":2,"./memoize":5,"xmldom":19}],2:[function(require,module,exports){
-"use strict";
+
 
 function XTError(message) {
 	this.name = "GenericError";
@@ -9900,7 +9993,7 @@ module.exports = {
 	XTScopeParserError: XTScopeParserError
 };
 },{}],3:[function(require,module,exports){
-"use strict";
+
 
 var loopModule = require("./modules/loop");
 var spacePreserveModule = require("./modules/space-preserve");
@@ -9945,7 +10038,7 @@ module.exports = {
 	pptx: PptXFileTypeConfig
 };
 },{"./modules/expand-pair-trait":8,"./modules/loop":9,"./modules/rawxml":10,"./modules/render":11,"./modules/space-preserve":12}],4:[function(require,module,exports){
-"use strict";
+
 
 var Errors = require("./errors");
 var DocUtils = require("./doc-utils");
@@ -10013,11 +10106,11 @@ function tagMatcher(content, textMatchArray, othersMatchArray) {
 		    tag = _getTag.tag,
 		    position = _getTag.position;
 
-		var text = allMatches[tag];
-		if (text == null) {
+		var text1 = allMatches[tag];
+		if (text1 == null) {
 			continue;
 		}
-		totalMatches.push({ type: "tag", position: position, text: text, offset: offset, value: tagText });
+		totalMatches.push({ type: "tag", position: position, text: text1, offset: offset, value: tagText });
 	}
 
 	return totalMatches;
@@ -10188,7 +10281,7 @@ module.exports = {
 	}
 };
 },{"./doc-utils":1,"./errors":2}],5:[function(require,module,exports){
-"use strict";
+
 
 function memoize(func) {
 	var stringifyJson = JSON.stringify,
@@ -10202,7 +10295,7 @@ function memoize(func) {
 
 module.exports = memoize;
 },{}],6:[function(require,module,exports){
-"use strict";
+
 
 function getMinFromArrays(arrays, state) {
 	var minIndex = -1;
@@ -10246,7 +10339,7 @@ module.exports = function (arrays) {
 	return resultArray;
 };
 },{}],7:[function(require,module,exports){
-"use strict";
+
 
 function emptyFun() {}
 function identity(i) {
@@ -10273,7 +10366,7 @@ module.exports = function (module) {
 	return module;
 };
 },{}],8:[function(require,module,exports){
-"use strict";
+
 
 var traitName = "expandPair";
 var mergeSort = require("../mergesort");
@@ -10344,6 +10437,7 @@ function getPairs(traits) {
 	}
 	var part = firstTrait.part;
 	throwUnmatchedLoopException({ part: part, location: part.location });
+        return undefined;
 }
 
 var expandPairTrait = {
@@ -10404,7 +10498,7 @@ module.exports = function () {
 	return wrapper(expandPairTrait);
 };
 },{"../doc-utils":1,"../errors":2,"../mergesort":6,"../module-wrapper":7,"../traits":16}],9:[function(require,module,exports){
-"use strict";
+
 
 var DocUtils = require("../doc-utils");
 var dashInnerRegex = /^-([^\s]+)\s(.+)$/;
@@ -10435,7 +10529,7 @@ var loopModule = {
 	},
 	getTraits: function getTraits(traitName, parsed) {
 		if (traitName !== "expandPair") {
-			return;
+			return undefined;
 		}
 
 		return parsed.reduce(function (tags, part, offset) {
@@ -10467,7 +10561,7 @@ module.exports = function () {
 	return wrapper(loopModule);
 };
 },{"../doc-utils":1,"../module-wrapper":7}],10:[function(require,module,exports){
-"use strict";
+
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
@@ -10558,7 +10652,7 @@ module.exports = function () {
 	return wrapper(new RawXmlModule());
 };
 },{"../doc-utils":1,"../errors":2,"../module-wrapper":7}],11:[function(require,module,exports){
-"use strict";
+
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
@@ -10602,7 +10696,7 @@ module.exports = function () {
 	return wrapper(new Render());
 };
 },{"../module-wrapper":7}],12:[function(require,module,exports){
-"use strict";
+
 
 var wrapper = require("../module-wrapper");
 var spacePreserve = {
@@ -10610,7 +10704,7 @@ var spacePreserve = {
 	postparse: function postparse(parsed) {
 		var chunk = [];
 		var inChunk = false;
-		var result = parsed.reduce(function (parsed, part) {
+		var res = parsed.reduce(function (parsed, part) {
 			if (part.type === "tag" && part.position === "start" && part.text && part.value === "<w:t>") {
 				inChunk = true;
 			}
@@ -10629,15 +10723,15 @@ var spacePreserve = {
 			}
 			return parsed;
 		}, []);
-		Array.prototype.push.apply(result, chunk);
-		return result;
+		Array.prototype.push.apply(res, chunk);
+		return res;
 	}
 };
 module.exports = function () {
 	return wrapper(spacePreserve);
 };
 },{"../module-wrapper":7}],13:[function(require,module,exports){
-"use strict";
+
 
 var DocUtils = require("./doc-utils");
 
@@ -10703,7 +10797,7 @@ var parser = {
 
 module.exports = parser;
 },{"./doc-utils":1}],14:[function(require,module,exports){
-"use strict";
+
 
 var ScopeManager = require("./scope-manager");
 var DocUtils = require("./doc-utils");
@@ -10747,7 +10841,7 @@ function render(options) {
 
 module.exports = render;
 },{"./doc-utils":1,"./scope-manager":15}],15:[function(require,module,exports){
-"use strict";
+
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
@@ -10796,7 +10890,7 @@ var ScopeManager = function () {
 					scope = value[i];
 					this.functorIfInverted(!inverted, functor, scope);
 				}
-				return;
+				return undefined;
 			}
 			if (type === "[object Object]") {
 				return this.functorIfInverted(!inverted, functor, value);
@@ -10804,6 +10898,7 @@ var ScopeManager = function () {
 			if (value === true) {
 				return this.functorIfInverted(!inverted, functor, currentValue);
 			}
+                    return undefined;
 		}
 	}, {
 		key: "getValue",
@@ -10812,7 +10907,7 @@ var ScopeManager = function () {
 			this.num = num == null ? this.scopeList.length - 1 : num;
 			var err = void 0;
 			var parser = void 0;
-			var result = void 0;
+			var res = void 0;
 			var scope = this.scopeList[this.num];
 			try {
 				parser = this.parser(tag);
@@ -10827,7 +10922,7 @@ var ScopeManager = function () {
 				throw err;
 			}
 			try {
-				result = parser.get(scope, { num: this.num, scopeList: this.scopeList });
+				res = parser.get(scope, { num: this.num, scopeList: this.scopeList });
 			} catch (error) {
 				err = new Errors.XTScopeParserError("Scope parser execution failed");
 				err.properties = {
@@ -10839,10 +10934,10 @@ var ScopeManager = function () {
 				};
 				throw err;
 			}
-			if (result == null && this.num > 0) {
+			if (res == null && this.num > 0) {
 				return this.getValue(tag, this.num - 1);
 			}
-			return result;
+			return res;
 		}
 	}, {
 		key: "createSubScopeManager",
@@ -10874,7 +10969,7 @@ ScopeManager.createBaseScopeManager = function (_ref) {
 
 module.exports = ScopeManager;
 },{"./errors":2}],16:[function(require,module,exports){
-"use strict";
+
 
 var DocUtils = require("./doc-utils");
 var Errors = require("./errors");
@@ -10920,22 +11015,22 @@ function getListXmlElements(parts) {
 		return part.value;
 	});
 
-	var result = [];
+	var res = [];
 
 	for (var i = 0, tag; i < tags.length; i++) {
 		tag = tags[i];
 		// closing tag
 		if (tag[1] === "/") {
-			if (lastTagIsOpenTag(result, tag)) {
-				result.pop();
+			if (lastTagIsOpenTag(res, tag)) {
+				res.pop();
 			} else {
-				result = addTag(result, tag);
+				res = addTag(res, tag);
 			}
 		} else if (tag[tag.length - 1] !== "/") {
-			result = addTag(result, tag);
+			res = addTag(res, tag);
 		}
 	}
-	return result;
+	return res;
 }
 
 function getExpandToDefault(parts) {
@@ -10995,7 +11090,7 @@ module.exports = {
 	getExpandToDefault: getExpandToDefault
 };
 },{"./doc-utils":1,"./errors":2}],17:[function(require,module,exports){
-"use strict";
+
 // res class responsibility is to parse the XML.
 
 var DocUtils = require("./doc-utils");
@@ -11073,7 +11168,7 @@ module.exports = function (content, tagsXmlArray) {
 	return DocUtils.cloneDeep(memoized(content, tagsXmlArray));
 };
 },{"./doc-utils":1,"./memoize":5}],18:[function(require,module,exports){
-"use strict";
+
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
@@ -11089,10 +11184,10 @@ var _render = require("./render.js");
 
 function _getFullText(content, tagsXmlArray) {
 	var matcher = xmlMatcher(content, tagsXmlArray);
-	var result = matcher.matches.map(function (match) {
+	var res = matcher.matches.map(function (match) {
 		return match.array[2];
 	});
-	return DocUtils.wordToUtf8(DocUtils.convertSpaces(result.join("")));
+	return DocUtils.wordToUtf8(DocUtils.convertSpaces(res.join("")));
 }
 
 module.exports = function () {
@@ -11266,9 +11361,9 @@ DOMHandler.prototype = {
         	this.doc.documentURI = this.locator.systemId;
     	}
 	},
-	startElement:function(namespaceURI, localName, qName, attrs) {
+	startElement:function(namespaceURI1, localName, qName1, attrs) {
 		var doc = this.doc;
-	    var el = doc.createElementNS(namespaceURI, qName||localName);
+	    var el = doc.createElementNS(namespaceURI1, qName1||localName);
 	    var len = attrs.length;
 	    appendElement(this, el);
 	    this.currentElement = el;
@@ -11304,10 +11399,11 @@ DOMHandler.prototype = {
 		chars = _toString.apply(this,arguments)
 		//console.log(chars)
 		if(chars){
+                        var charNode
 			if (this.cdata) {
-				var charNode = this.doc.createCDATASection(chars);
+				charNode = this.doc.createCDATASection(chars);
 			} else {
-				var charNode = this.doc.createTextNode(chars);
+				charNode = this.doc.createTextNode(chars);
 			}
 			if(this.currentElement){
 				this.currentElement.appendChild(charNode);
@@ -11324,7 +11420,8 @@ DOMHandler.prototype = {
 		this.doc.normalize();
 	},
 	setDocumentLocator:function (locator) {
-	    if(this.locator = locator){// && !('lineNumber' in locator)){
+            this.locator = locator;
+	    if(this.locator){// && !('lineNumber' in locator)){
 	    	locator.lineNumber = 0;
 	    }
 	},
@@ -11371,6 +11468,7 @@ function _locator(l){
 	if(l){
 		return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
 	}
+        return undefined;
 }
 function _toString(chars,start,length){
 	if(typeof chars == 'string'){
@@ -11458,7 +11556,7 @@ function _extends(Class,Super){
 		pt.__proto__ = ppt;
 	}
 	if(!(pt instanceof Super)){
-		function t(){};
+		function t(){}
 		t.prototype = Super.prototype;
 		t = new t();
 		copy(pt,t);
@@ -11520,7 +11618,7 @@ function DOMException(code, message) {
 	error.code = code;
 	if(message) this.message = this.message + ": " + message;
 	return error;
-};
+}
 DOMException.prototype = Error.prototype;
 copy(ExceptionCode,DOMException)
 /**
@@ -11529,7 +11627,7 @@ copy(ExceptionCode,DOMException)
  * The items in the NodeList are accessible via an integral index, starting from 0.
  */
 function NodeList() {
-};
+}
 NodeList.prototype = {
 	/**
 	 * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
@@ -11582,13 +11680,14 @@ _extends(LiveNodeList,NodeList);
  * used for attributes or DocumentType entities
  */
 function NamedNodeMap() {
-};
+}
 
 function _findNodeIndex(list,node){
 	var i = list.length;
 	while(i--){
 		if(list[i] === node){return i}
 	}
+        return undefined;
 }
 
 function _addNamedNode(el,list,newAttr,oldAttr){
@@ -11642,6 +11741,7 @@ NamedNodeMap.prototype = {
 				return attr;
 			}
 		}
+                return undefined;
 	},
 	setNamedItem: function(attr) {
 		var el = attr.ownerElement;
@@ -11699,7 +11799,7 @@ function DOMImplementation(/* Object */ features) {
 			 this._features = features[feature];
 		}
 	}
-};
+}
 
 DOMImplementation.prototype = {
 	hasFeature: function(/* string */ feature, /* string */ version) {
@@ -11748,7 +11848,7 @@ DOMImplementation.prototype = {
  */
 
 function Node() {
-};
+}
 
 Node.prototype = {
 	firstChild : null,
@@ -11859,6 +11959,7 @@ copy(NodeType,Node);
 copy(NodeType,Node.prototype);
 
 /**
+ * @param node 
  * @param callback return true for continue,false for break
  * @return boolean true: break visit;
  */
@@ -11866,11 +11967,14 @@ function _visitNode(node,callback){
 	if(callback(node)){
 		return true;
 	}
-	if(node = node.firstChild){
+	node = node.firstChild;
+	if(node){
 		do{
 			if(_visitNode(node,callback)){return true}
-        }while(node=node.nextSibling)
-    }
+			node=node.nextSibling;
+		}while(node)
+	}
+	return undefined;
 }
 
 
@@ -11982,12 +12086,13 @@ function _insertBefore(parentNode,newChild,nextChild){
 }
 function _appendSingleChild(parentNode,newChild){
 	var cp = newChild.parentNode;
+        var pre
 	if(cp){
-		var pre = parentNode.lastChild;
+		pre = parentNode.lastChild;
 		cp.removeChild(newChild);//remove and update
-		var pre = parentNode.lastChild;
+		pre = parentNode.lastChild;
 	}
-	var pre = parentNode.lastChild;
+	pre = parentNode.lastChild;
 	newChild.parentNode = parentNode;
 	newChild.previousSibling = pre;
 	newChild.nextSibling = null;
@@ -12045,6 +12150,7 @@ Document.prototype = {
 					return true;
 				}
 			}
+                        return undefined;
 		})
 		return rtv;
 	},
@@ -12150,7 +12256,7 @@ _extends(Document,Node);
 
 function Element() {
 	this._nsMap = {};
-};
+}
 Element.prototype = {
 	nodeType : ELEMENT_NODE,
 	hasAttribute : function(name){
@@ -12243,13 +12349,13 @@ Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNa
 
 _extends(Element,Node);
 function Attr() {
-};
+}
 Attr.prototype.nodeType = ATTRIBUTE_NODE;
 _extends(Attr,Node);
 
 
 function CharacterData() {
-};
+}
 CharacterData.prototype = {
 	data : '',
 	substringData : function(offset, count) {
@@ -12280,16 +12386,16 @@ CharacterData.prototype = {
 }
 _extends(CharacterData,Node);
 function Text() {
-};
+}
 Text.prototype = {
 	nodeName : "#text",
 	nodeType : TEXT_NODE,
 	splitText : function(offset) {
-		var text = this.data;
-		var newText = text.substring(offset);
-		text = text.substring(0, offset);
-		this.data = this.nodeValue = text;
-		this.length = text.length;
+		var text1 = this.data;
+		var newText = text1.substring(offset);
+		text1 = text1.substring(0, offset);
+		this.data = this.nodeValue = text1;
+		this.length = text1.length;
 		var newNode = this.ownerDocument.createTextNode(newText);
 		if(this.parentNode){
 			this.parentNode.insertBefore(newNode, this.nextSibling);
@@ -12299,7 +12405,7 @@ Text.prototype = {
 }
 _extends(Text,CharacterData);
 function Comment() {
-};
+}
 Comment.prototype = {
 	nodeName : "#comment",
 	nodeType : COMMENT_NODE
@@ -12307,7 +12413,7 @@ Comment.prototype = {
 _extends(Comment,CharacterData);
 
 function CDATASection() {
-};
+}
 CDATASection.prototype = {
 	nodeName : "#cdata-section",
 	nodeType : CDATA_SECTION_NODE
@@ -12316,27 +12422,27 @@ _extends(CDATASection,CharacterData);
 
 
 function DocumentType() {
-};
+}
 DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
 _extends(DocumentType,Node);
 
 function Notation() {
-};
+}
 Notation.prototype.nodeType = NOTATION_NODE;
 _extends(Notation,Node);
 
 function Entity() {
-};
+}
 Entity.prototype.nodeType = ENTITY_NODE;
 _extends(Entity,Node);
 
 function EntityReference() {
-};
+}
 EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
 _extends(EntityReference,Node);
 
 function DocumentFragment() {
-};
+}
 DocumentFragment.prototype.nodeName =	"#document-fragment";
 DocumentFragment.prototype.nodeType =	DOCUMENT_FRAGMENT_NODE;
 _extends(DocumentFragment,Node);
@@ -12359,7 +12465,7 @@ function nodeSerializeToString(isHtml,nodeFilter){
 
 	if(uri && prefix == null){
 		//console.log(prefix)
-		var prefix = refNode.lookupPrefix(uri);
+		prefix = refNode.lookupPrefix(uri);
 		if(prefix == null){
 			//isHTML = true;
 			var visibleNamespaces=[
@@ -12407,14 +12513,14 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 		if(node){
 			if(typeof node == 'string'){
 				buf.push(node);
-				return;
+				return undefined;
 			}
 		}else{
-			return;
+			return undefined;
 		}
 		//buf.sort.apply(attrs, attributeSorter);
 	}
-	switch(node.nodeType){
+        switch(node.nodeType){
 	case ELEMENT_NODE:
 		if (!visibleNamespaces) visibleNamespaces = [];
 		var startVisibleNamespaces = visibleNamespaces.length;
@@ -12422,7 +12528,11 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 		var len = attrs.length;
 		var child = node.firstChild;
 		var nodeName = node.tagName;
-
+		var attr;
+		var prefix;
+		var uri;
+		var ns;
+		
 		isHTML =  (htmlns === node.namespaceURI) ||isHTML
 		buf.push('<',nodeName);
 
@@ -12430,19 +12540,19 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 
 		for(var i=0;i<len;i++){
 			// add namespaces for attributes
-			var attr = attrs.item(i);
+			attr = attrs.item(i);
 			if (attr.prefix == 'xmlns') {
 				visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
 			}else if(attr.nodeName == 'xmlns'){
 				visibleNamespaces.push({ prefix: '', namespace: attr.value });
 			}
 		}
-		for(var i=0;i<len;i++){
-			var attr = attrs.item(i);
+		for(i=0;i<len;i++){
+			attr = attrs.item(i);
 			if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
-				var prefix = attr.prefix||'';
-				var uri = attr.namespaceURI;
-				var ns = prefix ? ' xmlns:' + prefix : " xmlns";
+				prefix = attr.prefix||'';
+				uri = attr.namespaceURI;
+				ns = prefix ? ' xmlns:' + prefix : " xmlns";
 				buf.push(ns, '="' , uri , '"');
 				visibleNamespaces.push({ prefix: prefix, namespace:uri });
 			}
@@ -12450,9 +12560,9 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 		}
 		// add namespace for current node
 		if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
-			var prefix = node.prefix||'';
-			var uri = node.namespaceURI;
-			var ns = prefix ? ' xmlns:' + prefix : " xmlns";
+			prefix = node.prefix||'';
+			uri = node.namespaceURI;
+			ns = prefix ? ' xmlns:' + prefix : " xmlns";
 			buf.push(ns, '="' , uri , '"');
 			visibleNamespaces.push({ prefix: prefix, namespace:uri });
 		}
@@ -12482,15 +12592,15 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 		}
 		// remove added visible namespaces
 		//visibleNamespaces.length = startVisibleNamespaces;
-		return;
+		return undefined;
 	case DOCUMENT_NODE:
 	case DOCUMENT_FRAGMENT_NODE:
-		var child = node.firstChild;
+		child = node.firstChild;
 		while(child){
 			serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
 			child = child.nextSibling;
 		}
-		return;
+		return undefined;
 	case ATTRIBUTE_NODE:
 		return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
 	case TEXT_NODE:
@@ -12518,7 +12628,7 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 			}
 			buf.push(">");
 		}
-		return;
+		return undefined;
 	case PROCESSING_INSTRUCTION_NODE:
 		return buf.push( "<?",node.target," ",node.data,"?>");
 	case ENTITY_REFERENCE_NODE:
@@ -12528,6 +12638,7 @@ function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
 	default:
 		buf.push('??',node.nodeName);
 	}
+        return undefined;
 }
 function importNode(doc,node,deep){
 	var node2;
@@ -12600,7 +12711,7 @@ function cloneNode(doc,node,deep){
 		for(var i=0;i<len;i++){
 			node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
 		}
-		break;;
+		break;
 	case ATTRIBUTE_NODE:
 		deep = true;
 	}
@@ -12765,15 +12876,17 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
 	var parseStack = [{currentNSMap:defaultNSMapCopy}]
 	var closeMap = {};
 	var start = 0;
+        var end;
+        
 	while(true){
 		try{
 			var tagStart = source.indexOf('<',start);
 			if(tagStart<0){
 				if(!source.substr(start).match(/^\s*$/)){
 					var doc = domBuilder.doc;
-	    			var text = doc.createTextNode(source.substr(start));
-	    			doc.appendChild(text);
-	    			domBuilder.currentElement = text;
+	    			var text1 = doc.createTextNode(source.substr(start));
+	    			doc.appendChild(text1);
+	    			domBuilder.currentElement = text1;
 				}
 				return;
 			}
@@ -12782,7 +12895,7 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
 			}
 			switch(source.charAt(tagStart+1)){
 			case '/':
-				var end = source.indexOf('>',tagStart+3);
+				end = source.indexOf('>',tagStart+3);
 				var tagName = source.substring(tagStart+2,end);
 				var config = parseStack.pop();
 				if(end<0){
@@ -12831,7 +12944,7 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
 				var el = new ElementAttributes();
 				var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
 				//elStartEnd
-				var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
+				end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
 				var len = el.length;
 
 
@@ -12845,9 +12958,9 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
 					var locator2 = copyLocator(locator,{});
 					//try{//attribute position fixed
 					for(var i = 0;i<len;i++){
-						var a = el[i];
-						position(a.offset);
-						a.locator = copyLocator(locator,{});
+						var a1 = el[i];
+						position(a1.offset);
+						a1.locator = copyLocator(locator,{});
 					}
 					//}catch(e){console.error('@@@@@'+e)}
 					domBuilder.locator = locator2
@@ -13017,7 +13130,7 @@ function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,error
 					s = S_ATTR_SPACE;
 					break;
 				case S_ATTR_NOQUOT_VALUE:
-					var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
+					value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
 					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
 					el.add(attrName,value,start)
 				case S_ATTR_END:
@@ -13071,15 +13184,18 @@ function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,error
 function appendElement(el,domBuilder,currentNSMap){
 	var tagName = el.tagName;
 	var localNSMap = null;
+        var nsp;
+        var prefix;
+        
 	//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
 	var i = el.length;
 	while(i--){
-		var a = el[i];
-		var qName = a.qName;
-		var value = a.value;
-		var nsp = qName.indexOf(':');
+		var a1 = el[i];
+		var qName = a1.qName;
+		var value = a1.value;
+		nsp = qName.indexOf(':');
 		if(nsp>0){
-			var prefix = a.prefix = qName.slice(0,nsp);
+			prefix = a1.prefix = qName.slice(0,nsp);
 			var localName = qName.slice(nsp+1);
 			var nsPrefix = prefix === 'xmlns' && localName
 		}else{
@@ -13088,7 +13204,7 @@ function appendElement(el,domBuilder,currentNSMap){
 			nsPrefix = qName === 'xmlns' && ''
 		}
 		//can not set prefix,because prefix !== ''
-		a.localName = localName ;
+		a1.localName = localName ;
 		//prefix == null for no ns prefix attribute
 		if(nsPrefix !== false){//hack!!
 			if(localNSMap == null){
@@ -13098,25 +13214,25 @@ function appendElement(el,domBuilder,currentNSMap){
 				//console.log(currentNSMap,1)
 			}
 			currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
-			a.uri = 'http://www.w3.org/2000/xmlns/'
+			a1.uri = 'http://www.w3.org/2000/xmlns/'
 			domBuilder.startPrefixMapping(nsPrefix, value)
 		}
 	}
-	var i = el.length;
+	i = el.length;
 	while(i--){
-		a = el[i];
-		var prefix = a.prefix;
+		a1 = el[i];
+		prefix = a1.prefix;
 		if(prefix){//no prefix attribute has no namespace
 			if(prefix === 'xml'){
-				a.uri = 'http://www.w3.org/XML/1998/namespace';
+				a1.uri = 'http://www.w3.org/XML/1998/namespace';
 			}if(prefix !== 'xmlns'){
-				a.uri = currentNSMap[prefix || '']
+				a1.uri = currentNSMap[prefix || '']
 
 				//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
 			}
 		}
 	}
-	var nsp = tagName.indexOf(':');
+	nsp = tagName.indexOf(':');
 	if(nsp>0){
 		prefix = el.prefix = tagName.slice(0,nsp);
 		localName = el.localName = tagName.slice(nsp+1);
@@ -13142,22 +13258,23 @@ function appendElement(el,domBuilder,currentNSMap){
 		//parseStack.push(el);
 		return true;
 	}
+        return undefined;
 }
 function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
 	if(/^(?:script|textarea)$/i.test(tagName)){
 		var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
-		var text = source.substring(elStartEnd+1,elEndStart);
-		if(/[&<]/.test(text)){
+		var text1 = source.substring(elStartEnd+1,elEndStart);
+		if(/[&<]/.test(text1)){
 			if(/^script$/i.test(tagName)){
 				//if(!/\]\]>/.test(text)){
 					//lexHandler.startCDATA();
-					domBuilder.characters(text,0,text.length);
+					domBuilder.characters(text1,0,text1.length);
 					//lexHandler.endCDATA();
 					return elEndStart;
 				//}
 			}//}else{//text area
-				text = text.replace(/&#?\w+;/g,entityReplacer);
-				domBuilder.characters(text,0,text.length);
+				text1 = text1.replace(/&#?\w+;/g,entityReplacer);
+				domBuilder.characters(text1,0,text1.length);
 				return elEndStart;
 			//}
 
@@ -13184,10 +13301,11 @@ function _copy(source,target){
 }
 function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
 	var next= source.charAt(start+2)
+        var end;
 	switch(next){
 	case '-':
 		if(source.charAt(start + 3) === '-'){
-			var end = source.indexOf('-->',start+4);
+			end = source.indexOf('-->',start+4);
 			//append comment source.substring(4,end)//<!--
 			if(end>start){
 				domBuilder.comment(source,start+4,end-start-4);
@@ -13202,7 +13320,7 @@ function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
 		}
 	default:
 		if(source.substr(start+3,6) == 'CDATA['){
-			var end = source.indexOf(']]>',start+9);
+			end = source.indexOf(']]>',start+9);
 			domBuilder.startCDATA();
 			domBuilder.characters(source,start+9,end-start-9);
 			domBuilder.endCDATA()
@@ -13290,7 +13408,7 @@ function _set_proto_(thiz,parent){
 }
 if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
 	_set_proto_ = function(thiz,parent){
-		function p(){};
+		function p(){}
 		p.prototype = parent;
 		p = new p();
 		for(parent in thiz){
@@ -13306,17 +13424,19 @@ function split(source,start){
 	var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
 	reg.lastIndex = start;
 	reg.exec(source);//skip <
-	while(match = reg.exec(source)){
+	match = reg.exec(source);
+	while(match){
 		buf.push(match);
 		if(match[1])return buf;
 	}
+        return undefined;
 }
 
 exports.XMLReader = XMLReader;
 
 
 },{}],"/src/js/docxtemplater.js":[function(require,module,exports){
-"use strict";
+
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
diff --git a/process/mailbridge/documentation.adoc b/process/mailbridge/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ae6786885d3fa1959bb4d163102e00582c37fe1b
--- /dev/null
+++ b/process/mailbridge/documentation.adoc
@@ -0,0 +1,3 @@
+= mailbridge
+
+Handling of the mailbridge process.
\ No newline at end of file
diff --git a/process/mailbridge/mailbridge.aod b/process/mailbridge/mailbridge.aod
index 3f8a094d6ef0925cbee895f946fb4c8cd75b8603..3ba8b0af554cc587cf3e18db05978fbb26ea8d55 100644
--- a/process/mailbridge/mailbridge.aod
+++ b/process/mailbridge/mailbridge.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>mailbridge</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/mailbridge/documentation.adoc</documentation>
   <process>%aditoprj%/process/mailbridge/process.js</process>
   <alias>Data_alias</alias>
 </process>
diff --git a/process/rebuildIndex_serverProcess/documentation.adoc b/process/rebuildIndex_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5ea77f9331eb7fbb26919a15cf8dde44eae9f6de
--- /dev/null
+++ b/process/rebuildIndex_serverProcess/documentation.adoc
@@ -0,0 +1,3 @@
+= rebuildIndex_serverProcess
+
+Rebuilding the index via indexsearch.runIndexer.
\ No newline at end of file
diff --git a/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod b/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
index 58abddf7d2739644ed6a65ea307c98082e68563a..449e1205ab5d84dce6e2336bf8d3847b5d41be5e 100644
--- a/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
+++ b/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
@@ -3,6 +3,7 @@
   <name>rebuildIndex_serverProcess</name>
   <title>rebuild Index</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/rebuildIndex_serverProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/rebuildIndex_serverProcess/process.js</process>
   <alias>Data_alias</alias>
   <variants>
diff --git a/process/runIndexer_ws/process.js b/process/runIndexer_ws/process.js
deleted file mode 100644
index e9d5f5e85953705e13bbb1ebcb3a0dbf4cba2b00..0000000000000000000000000000000000000000
--- a/process/runIndexer_ws/process.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.indexsearch");
-
-function restget(obj) {
-    obj = JSON.parse(obj);
-    var index = obj.query.index.split(",");
-    index = typeof(index) == "string" ? [index] : index;
-    indexsearch.runIndexer(index);
-    obj.response.body = "index(es) requested for rebuild:\n" + index.reduce(function (l, r){
-        return l + "\n    > " + r;
-    }, "");
-    obj = JSON.stringify(obj);
-    return obj;
-}
diff --git a/process/sendBulkMail_serverProcess/documentation.adoc b/process/sendBulkMail_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..90f67ed7487724282b36a94d3f80fc93774f65d3
--- /dev/null
+++ b/process/sendBulkMail_serverProcess/documentation.adoc
@@ -0,0 +1,4 @@
+= sendBulkMail_serverProcess
+
+Process for sending BulkMails via process.
+Is only executebale via JDITO not via user / manager.
\ No newline at end of file
diff --git a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
index eedbd698a37de20e16572ed649bfc21ad97ae355..7878ab4b9170ada900c4b6391c215239dd7e3155 100644
--- a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
+++ b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
@@ -2,6 +2,7 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
   <name>sendBulkMail_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/sendBulkMail_serverProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/sendBulkMail_serverProcess/process.js</process>
   <variants>
     <element>EXECUTABLE</element>
diff --git a/report/DSGVO_Disclosure_report/reportData.jrxml b/report/DSGVO_Disclosure_report/reportData.jrxml
index 2f970ea50e60269bbc1c00f4573ed69d5488ec9a..b9945422c989eefb22950bf6e13c0c1db5b96d70 100644
--- a/report/DSGVO_Disclosure_report/reportData.jrxml
+++ b/report/DSGVO_Disclosure_report/reportData.jrxml
@@ -58,7 +58,7 @@
 			<staticText>
 				<reportElement positionType="Float" x="0" y="308" width="555" height="28" isRemoveLineWhenBlank="true" uuid="32c9ed76-b254-425f-9577-5ee1a05d72b6"/>
 				<textElement verticalAlignment="Middle">
-					<font fontName="SansSerif"/>
+					<font />
 				</textElement>
 				<text><![CDATA[Wir verarbeiten folgende Daten zu Ihrer Person:]]></text>
 			</staticText>
diff --git a/report/DSGVO_Information_report/reportData.jrxml b/report/DSGVO_Information_report/reportData.jrxml
index 53cbafcb19d9fa5cfc285fd5106b6c755192c887..1700b14159481242099004ff43b6c84ff03fc78d 100644
--- a/report/DSGVO_Information_report/reportData.jrxml
+++ b/report/DSGVO_Information_report/reportData.jrxml
@@ -38,7 +38,7 @@
 			<staticText>
 				<reportElement positionType="Float" x="0" y="184" width="555" height="30" uuid="b840456d-93dc-4fe0-b503-89d6608ddcaf"/>
 				<textElement>
-					<font fontName="SansSerif" isBold="true"/>
+					<font  isBold="true"/>
 				</textElement>
 				<text><![CDATA[Betreff: Informationspflichten nach Art. 13 DSGVO]]></text>
 			</staticText>
@@ -147,21 +147,21 @@
 			<textField pattern="EEEEE dd MMMMM yyyy">
 				<reportElement x="342" y="0" width="91" height="20" forecolor="#999999" uuid="b19e0510-3fb5-482f-a16f-b51a4dc88771"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="433" y="0" width="80" height="20" forecolor="#999999" uuid="78f17e4d-0b60-4a11-a806-99d7e1629efd"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
 			</textField>
 			<textField evaluationTime="Report">
 				<reportElement x="513" y="0" width="40" height="20" forecolor="#999999" uuid="75d436a1-d6e5-4661-bde9-8be99ea2ea43"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
 			</textField>
diff --git a/report/Reminder_report/reportData.jrxml b/report/Reminder_report/reportData.jrxml
index 731bdfbc40b623144ca50cb15b3a2b56122a624c..5e0e92752aff29c9212d7fed72e0a86f5592701e 100644
--- a/report/Reminder_report/reportData.jrxml
+++ b/report/Reminder_report/reportData.jrxml
@@ -41,28 +41,28 @@
 				<textField>
 					<reportElement x="13" y="0" width="68" height="15" uuid="0a515534-8d2a-4e3e-9370-6cac4c65ef68"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Ordernumber}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="104" y="0" width="63" height="15" uuid="87fc2f40-ffdc-47d5-9fd8-7a8caf821114"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Orderdate}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="202" y="0" width="62" height="15" uuid="86eacb27-6bb5-4ce8-b8cf-c3f0993380ad"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{DueDate}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="429" y="0" width="59" height="15" uuid="62a0909f-ef03-4242-969a-8a9532d1aa9a"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Due}]]></textFieldExpression>
 				</textField>
@@ -72,56 +72,56 @@
 				<textField>
 					<reportElement x="104" y="36" width="64" height="15" uuid="ca4c366a-1954-4aee-91c4-05c093b04df5"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERDATE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="13" y="36" width="68" height="15" uuid="3fcb3ee0-fe4d-409e-8cb8-7a0e6ceca5ab"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERCODE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="202" y="36" width="62" height="15" uuid="b5e006cf-5d37-42a1-bf74-0b49d3a39b27"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{DUEDATE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="428" y="36" width="60" height="15" uuid="d57eeb7b-f517-4c85-a925-cdc3c1ea0830"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8" isBold="true"/>
+						<font  size="8" isBold="true"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{OFFEN}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="307" y="35" width="56" height="15" uuid="72a49ece-7fc0-4cd7-a00c-94580845d150"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{BRUTTO}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="307" y="15" width="56" height="15" uuid="a991ccab-0b04-4550-bbd2-2033a5fad0f0"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="429" y="15" width="59" height="15" uuid="8e257160-536a-418a-b9df-80fa020268b8"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="326" y="0" width="62" height="15" uuid="000feb72-9b7d-42e6-ade9-8e12359c3eef"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$R{Rech.-Betrag}]]></textFieldExpression>
 				</textField>
@@ -140,7 +140,7 @@
 			<textField>
 				<reportElement x="13" y="88" width="527" height="20" forecolor="#000000" uuid="a47fa80c-6b70-4c8a-938d-3d44273b1ffb"/>
 				<textElement textAlignment="Center" verticalAlignment="Middle">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Address}]]></textFieldExpression>
 			</textField>
@@ -157,35 +157,35 @@
 			<textField isStretchWithOverflow="true">
 				<reportElement x="13" y="122" width="152" height="20" uuid="c8514bfb-5e34-43f4-a256-7899cb58f0c1"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{ReminderAddress}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="172" width="132" height="20" uuid="d21620a9-4a49-496e-80f6-db842f0b70a9"/>
 				<textElement>
-					<font fontName="Segoe UI" size="14" isBold="true"/>
+					<font  size="14" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Reminder}]]></textFieldExpression>
 			</textField>
 			<textField pattern="dd.MM.yyyy">
 				<reportElement x="388" y="192" width="100" height="20" uuid="5141d92f-3325-445b-b616-90630c1648f7"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="232" width="294" height="20" uuid="3f7d1c4a-a326-436b-831d-5da9fd255bf0"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8" isBold="true"/>
+					<font  size="8" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{DUNNINGTEXT}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="212" width="214" height="20" uuid="52834aec-d107-4cc7-9662-1cdd73ba15c1"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8" isBold="true"/>
+					<font  size="8" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Dunninglevel} + " " + $F{DUNNINGLEVEL}]]></textFieldExpression>
 			</textField>
@@ -196,21 +196,21 @@
 			<textField pattern="EEEEE dd MMMMM yyyy">
 				<reportElement x="340" y="13" width="112" height="15" forecolor="#999999" uuid="26510f19-a203-4b34-8093-f6a9f7f6050e"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="452" y="13" width="48" height="15" forecolor="#999999" uuid="218ef560-390f-4807-b7f6-98e6f6162892"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$R{Seite}+" "+$V{PAGE_NUMBER}+" "+$R{von}]]></textFieldExpression>
 			</textField>
 			<textField evaluationTime="Report">
 				<reportElement x="500" y="13" width="40" height="15" forecolor="#999999" uuid="7ac354ed-0f8f-41fa-80a5-c2a0f74f7e09"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
 			</textField>
diff --git a/report/Salesorder_report/UMST.jrxml b/report/Salesorder_report/UMST.jrxml
index cef8c14fd1629de3082c839b8060781cc2ad467e..f4764748315d207f0ea60ed84232f9a2753f0fb2 100644
--- a/report/Salesorder_report/UMST.jrxml
+++ b/report/Salesorder_report/UMST.jrxml
@@ -20,7 +20,7 @@
 				<textField>
 					<reportElement x="103" y="0" width="108" height="15" uuid="3d348b3c-02e2-48e4-b8bf-4aec0f800811"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{zzglUmst} + " " + $F{VAT} + " %"]]></textFieldExpression>
 				</textField>
@@ -29,7 +29,7 @@
 						<printWhenExpression><![CDATA[!$F{VAT}.equals("0.0")]]></printWhenExpression>
 					</reportElement>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$V{WERT_1}]]></textFieldExpression>
 				</textField>
diff --git a/report/Salesorder_report/reportData.jrxml b/report/Salesorder_report/reportData.jrxml
index 5ba84dcc365b4e7581f23cb273b525636854895f..97f1b4394d5eab6e707be1ac7ea8ff635f61e532 100644
--- a/report/Salesorder_report/reportData.jrxml
+++ b/report/Salesorder_report/reportData.jrxml
@@ -84,42 +84,42 @@
 				<textField isStretchWithOverflow="true">
 					<reportElement x="0" y="0" width="146" height="15" uuid="c462ada5-3614-4037-a832-2063c9984900"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{SALESORDERAddr}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="347" y="0" width="100" height="15" uuid="358dc7c8-e5fe-430d-bd83-a2d76d2e2179"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8" isBold="true"/>
+						<font  size="8" isBold="true"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{OrderType}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="347" y="20" width="50" height="15" uuid="f27d5581-b73b-4a1c-97fe-809debd77775"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Number}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="348" y="35" width="50" height="15" uuid="731882eb-328c-4e30-b44a-fd17b8a8b95a"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Date}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="397" y="20" width="55" height="15" uuid="14ec5c0b-29bf-4719-95c0-05e3779175b6"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERCODE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="397" y="35" width="55" height="15" uuid="3451e207-2ac2-4045-b2be-0d1476b21380"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERDATE}]]></textFieldExpression>
 				</textField>
@@ -128,7 +128,7 @@
 				<textField isStretchWithOverflow="true">
 					<reportElement x="0" y="0" width="555" height="15" uuid="6b48863f-95dd-494b-9c1c-35f5254c43da"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Person}]]></textFieldExpression>
 				</textField>
@@ -137,7 +137,7 @@
 				<textField isStretchWithOverflow="true">
 					<reportElement x="0" y="0" width="555" height="15" uuid="0a20b228-aeb9-46d7-bd1d-ca4615a529e9"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{HEADER}]]></textFieldExpression>
 				</textField>
@@ -147,7 +147,7 @@
 				<textField isStretchWithOverflow="true">
 					<reportElement x="0" y="0" width="555" height="15" uuid="3357ca3b-0720-4cf7-81bc-ee0b882d8f2e"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Stornotext}]]></textFieldExpression>
 				</textField>
@@ -156,28 +156,28 @@
 				<staticText>
 					<reportElement x="0" y="9" width="30" height="15" uuid="43778b06-86fc-47fa-bbe7-24f9b0b3d909"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<text><![CDATA[Pos]]></text>
 				</staticText>
 				<textField>
 					<reportElement x="30" y="9" width="83" height="15" uuid="f85de48a-2bbb-4b78-91e9-9dd42000e45e"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Articlenumber}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="113" y="9" width="131" height="15" uuid="9d65f719-86ff-4842-9235-c2382296f9a4"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Articledescription}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="265" y="9" width="66" height="15" uuid="83721667-5409-4eeb-ad20-019a9b5a4f86"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Amount}]]></textFieldExpression>
 				</textField>
@@ -186,28 +186,28 @@
 						<printWhenExpression><![CDATA[!$P{anzahl}.equals("0")]]></printWhenExpression>
 					</reportElement>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Discount} + "\n%"]]></textFieldExpression>
 				</textField>
 				<textField isStretchWithOverflow="true">
 					<reportElement x="386" y="9" width="53" height="15" uuid="4333aa5c-f9da-497d-8d76-c8739db008a1"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Unitprice} + "\n" + $F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField isStretchWithOverflow="true">
 					<reportElement x="442" y="9" width="37" height="15" uuid="8b8c7d2d-f223-4d54-9e8a-ba6e283f1b8a"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{VAT} + "\n%"]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="477" y="9" width="77" height="15" uuid="ca1e1455-d2ad-43cd-abc7-9e5a1c2e641e"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Sum} +"\n"+ $F{CURRENCY}]]></textFieldExpression>
 				</textField>
@@ -227,7 +227,7 @@
 				<textField pattern="#,##0.00;-#,##0.00">
 					<reportElement x="490" y="17" width="65" height="15" uuid="c04eaf8a-9756-4ae0-bc80-fcbe78b0ea6c"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{SUMITEMSUM}]]></textFieldExpression>
 				</textField>
@@ -249,14 +249,14 @@
 				<textField>
 					<reportElement x="405" y="4" width="83" height="15" uuid="5b93cde2-fe92-4c90-bcc4-80d96b2a362f"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8" isBold="true"/>
+						<font  size="8" isBold="true"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Total} + " " +$F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="488" y="4" width="64" height="15" uuid="389711a3-219f-4c9b-b6f0-0d16a1d4595f"/>
 					<textElement textAlignment="Right">
-						<font fontName="Segoe UI" size="8" isBold="true"/>
+						<font  size="8" isBold="true"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{TOTAL}]]></textFieldExpression>
 				</textField>
@@ -274,14 +274,14 @@
 				<textField isStretchWithOverflow="true">
 					<reportElement x="99" y="2" width="442" height="20" uuid="d5e3900e-a293-4e6f-b6de-28613da90b8a"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{OrderPaymentTerm}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="0" y="0" width="100" height="20" uuid="b3876fe7-62fa-4af1-94c9-37364f391341"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{PaymentConditions} + ":"]]></textFieldExpression>
 				</textField>
@@ -290,14 +290,14 @@
 				<textField>
 					<reportElement x="0" y="0" width="100" height="20" uuid="578ee813-05f9-486d-83a1-dba4e78b6851"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{DeliveryConditions} + ":"]]></textFieldExpression>
 				</textField>
 				<textField isStretchWithOverflow="true">
 					<reportElement x="99" y="0" width="442" height="20" uuid="5353573a-e5a9-43fa-a9d2-5740085d224a"/>
 					<textElement>
-						<font fontName="Segoe UI" size="8"/>
+						<font  size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{OrderDeliveryTerm}]]></textFieldExpression>
 				</textField>
@@ -319,7 +319,7 @@
 			<textField>
 				<reportElement x="0" y="97" width="555" height="20" forecolor="#999999" uuid="3a30004a-a50d-42dc-a144-bc1da0294773"/>
 				<textElement textAlignment="Center" verticalAlignment="Middle">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Address}]]></textFieldExpression>
 			</textField>
@@ -340,28 +340,28 @@
 			<textField>
 				<reportElement x="0" y="4" width="30" height="15" uuid="0f758907-3120-4cf7-8a86-2095d58d2b46"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{ITEMSORT}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="30" y="4" width="83" height="15" uuid="35e07d2a-3677-467e-a721-dfd5f9f39973"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{PRODUCTCODE}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="113" y="4" width="152" height="15" uuid="64acab7d-d360-4036-9ce5-89948409083d"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{ITEMNAME}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="265" y="4" width="66" height="15" uuid="e33ce58d-c53f-4288-86c3-3d610a81e976"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$V{Menge_Einheit}]]></textFieldExpression>
 			</textField>
@@ -370,28 +370,28 @@
 					<printWhenExpression><![CDATA[!$F{ORDERITEM.DISCOUNT}.equals("0,00")]]></printWhenExpression>
 				</reportElement>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{ORDERITEM.DISCOUNT}]]></textFieldExpression>
 			</textField>
 			<textField pattern="#,##0.00;-#,##0.00">
 				<reportElement x="386" y="4" width="53" height="15" uuid="a29b24be-f6b0-4755-b8dc-56cf358ce4fe"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{PRICE}]]></textFieldExpression>
 			</textField>
 			<textField pattern="#,##0.00;-#,##0.00">
 				<reportElement x="443" y="4" width="36" height="15" uuid="2f05ba9c-ee86-4f5d-ae4d-ed0af2282b19"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{ORDERITEM.VAT}]]></textFieldExpression>
 			</textField>
 			<textField pattern="#,##0.00">
 				<reportElement x="488" y="4" width="64" height="15" uuid="d4d35c15-d9b7-4e47-abd2-30edab0e7aaf"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{ITEMSUM}]]></textFieldExpression>
 			</textField>
@@ -402,7 +402,7 @@
 			<textField isStretchWithOverflow="true">
 				<reportElement x="0" y="0" width="555" height="20" uuid="678c4956-6136-49ba-8199-ed41c384e3ea"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{FOOTER}]]></textFieldExpression>
 			</textField>
@@ -413,21 +413,21 @@
 			<textField pattern="EEEEE dd MMMMM yyyy">
 				<reportElement x="370" y="24" width="83" height="20" forecolor="#999999" uuid="07424005-2256-4514-a2da-6b00b8e5e5c9"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="452" y="24" width="62" height="20" forecolor="#999999" uuid="1dd85e84-1044-4ca0-aabf-3e07d75c4fa7"/>
 				<textElement textAlignment="Right">
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA["Seite "+$V{PAGE_NUMBER}+" von"]]></textFieldExpression>
 			</textField>
 			<textField evaluationTime="Report">
 				<reportElement x="514" y="24" width="40" height="20" forecolor="#999999" uuid="a1f1ca02-0eb6-4647-b6ff-ff326f8ce8b2"/>
 				<textElement>
-					<font fontName="Segoe UI" size="8"/>
+					<font  size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
 			</textField>
diff --git a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js b/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
index 9c8dc10fe8b0c59cbd29d2f2401ddc5525fd6240..d6006ccdd464d20f8b102867f5047aad882482d2 100644
--- a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
+++ b/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
@@ -4,7 +4,6 @@ import("system.translate");
 import("system.swing");
 import("system.vars");
 import("system.db");
-import("lib_email");
 
 var details = vars.get("$global.RptOfferOrderDetails");
 var orgid = db.array(db.ROW, "select ORG_ID, LANG from RELATION where RELATIONID = '" + details[1] + "'");
diff --git a/system/default/default.aod b/system/default/default.aod
index daab14d940d75328fb0bc5fe8c6c1bd708def34a..72900c8224b7231a461721b44b1cc6b99f470400 100644
--- a/system/default/default.aod
+++ b/system/default/default.aod
@@ -7,5 +7,5 @@
   <aditoDataPath>$PROJECTHOME/data</aditoDataPath>
   <loginUser>admin</loginUser>
   <autoLogin v="false" />
-  <aditoDebug>TRACE</aditoDebug>
+  <aditoDebug></aditoDebug>
 </system>